nps内网穿透使用
原版的https://github.com/ehang-io/nps已经停止更新
新版的地址 https://github.com/yisier/nps
一、安装
可以下载已经编译好的程序安装。网上有很多教程。
也可以下载源码编译,需要注意的是如果到cmd/nps下面编译,运行的时候,需要把conf目录拷贝到nps目录下才能运行,缺少配置文件会运行失败。
所以直接在根目录运行
go build cmd/nps/nps.go
go build cmd/npc/npc.go
比较好,正如源码中Makefile那样写的。
二、运行
1)nps配置
如上面所说,主要是注意配置好conf文件。
简单运行一个nps的基本配置,配置conf/nps.conf:
bridge_type=tcp // npc连接到nps的方式
bridge_port=8024 // npc连接到nps的端口,例如这里配置为8024
bridge_ip=0.0.0.0
tls_enable=true // 这个开启的话,npc可以以tls加密的方式连接到nps
tls_bridge_port=8025 // 这个是加密方式的npc访问端口,例如这里配置为8025
#web
web_host=a.o.com
web_username=admin // web端登录账号
web_password=123 // web端登录密码
web_port = 8081 // web端登录端口
web_ip=0.0.0.0
web_base_url= // web的baseurl,和当前服务器上的其他url没冲突的话,置空就行
web_open_ssl=false // 是否使用https,设置为true的话,下面的证书配置web_cert_file和web_key_file生效
web_cert_file=conf/server.pem
web_key_file=conf/server.key
log_level=6 // 日志级别数值越大,输出的内容就越多。
log_path=nps.log // 日志路径
#Web management multi-user login
allow_user_login=false // 是否允许用户登录,结合allow_user_register可以多用户使用。注册的user信息会写入 conf/clients.json配置文件中。
allow_user_register=false // 是否允许用户注册 , 开启后,用户可以注册用户和登录。不过截至目前,admin账号似乎没有管理功能,所以一般就保持默认false吧
allow_user_change_username=false // 是否允许用户修改用户名
剩下的还有一些Web API的验证配置和其他连接上的控制配置。
之后就可以运行nps了,可以把nps配置为系统服务来运行,保持其稳定性。
对应的端口,例如上面提到的8081 web端口,8024 8025 npc连接端口,要注意防火墙放通。
还需要放通一个或者多个端口,用于业务端通过这些端口来穿透到内网目标主机(例如下面例举的12345端口)。如果只配置少量的端口,例如一个的话,由于端口冲突,那么这一个端口,同时只能用来访问一个客户端,此时需要关闭其他不用的客户端即可。
2)nps运行
在上面配置好nps之后,可以登录到页面进行配置,增加客户端
主要是配置 唯一验证密钥,即vkey。这个值配置好后,需要给到目标主机,目标主机上运行npc的时候,需要这个vkey来验证连接。
配置完成后,可以查看给到npc的配置:
然后配置隧道,比如TCP隧道:
例如:服务端的端口设置为12345,目标端口为22(ssh),那么在npc启动后,通过命令: ssh [目标主机的用户]@[nps的地址] -p 12345 即可通过ssh连接到目标主机上。
备注:这里的12345端口即前面提到的要确保放通的提供给业务端穿透的端口。
配置完成后,可以从客户端那边
3)npc配置
将 npc放到内网目标主机上,依据之前查看到的配置,例如 ./npc -server=xx.xx.xx.xx:8024 -vkey=mytest27 -type=tcp 来启动。
或者把这些配置写到conf/npc.conf文件中:
[common]
server_addr=xx.xx.xx.xx:8025 // nps的连接地址与端口,可以选择加密和不加密的连接端口
conn_type=tcp // 连接方式
vkey=mytest27 // nps中配置的客户端的唯一验证密钥,即vkey
auto_reconnection=true
max_conn=1000
flow_limit=1000
rate_limit=1000
crypt=true
compress=true
disconnect_timeout=60
tls_enable=true // 如果是连接的加密端口,需要配置为true。这里连接的是8025加密端口,所以配置为true。
4) npc运行
按照上面配置好后,可以启动npc,确保npc也是保持运行,可以配置为系统服务。
然后就可以通过nps主机的地址和配置的通道端口来访问到目标主机的端口了。上面配置隧道的时候已经举例,不再赘述。