内网穿透工具--NPS
一、简介
NPS是一款轻量级,高性能,强大功能的内网穿透代理服务器。目前支持TCP,UDP流量转发,可支持任何TCP,UDP上层协议(访问内网网站,本地支付接口调试,SSH访问,远程桌面,内网dns解析等等......),此外还支持内网http代理,内网socks5代理,p2p等,并带有功能强大的网络管理端。
源码地址:https://github.com/cnlh/nps
发布地址:https://github.com/cnlh/nps/releases
通常内网穿透工具都有服务端和客户端,安装要求如下:
- 服务端:需要安装在一个有公网IP的服务器上,系统为Linux/Windows/Mac均可。
- 客户端:一般安装在一个内网的VPS服务器或Windows/Mac/Linux电脑上使用。
二、服务端配置
1、修改配置文件
conf/nps.conf 如无特殊需求,无需修改。
#web管理端口
web_port
#web界面管理密码
web_password
#服务端客户端通信端口
bridge_port
#ssl certFile绝对路径
https_default_cert_file
#ssl keyFile绝对路径
https_default_key_file
#域名代理https代理监听端口
https_proxy_port
#域名代理http代理监听端口
http_proxy_port
#客户端与服务端连接方式kcp或tcp
bridge_type
2、nps server启动
nps.exe start
#重启/停止服务端
nps.exe stop|restart
服务端运行nps test,无报错后nps start启动服务端。
然后打开地址http://ip:8080访问管理界面,具体端口以自己修改的为准,再使用密码登录进去,默认用户名admin,默认密码为123。
3、nps server添加client
随便填就行,client config文件用得到,socks5、http代理时候需要用到basic认证帐号密码。
client状态:
得到客户端启动命令:
./npc.exe -server=192.168.91.1:8024 -vkey=adminkey -type=tcp
192.168.91.1为我服务器端的IP
三、客户端配置
1、Linux系统
#启动客户端,比如服务端公网IP为192.168.91.1,服务端配置文件中tcpport为8024
./npc -server=192.168.91.1:8024 -vkey=客户端的密钥
2、Windows系统
#启动客户端,比如服务端公网IP为192.168.91.1,服务端配置文件中tcpport为8024
npc.exe -server=192.168.91.1:8024 -vkey=客户端的密钥
四、使用场景
关于使用场景,Github文档写的很清楚了,这里大概的说下。
1、tcp隧道模式
适用:想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,或者做微信公众号开发、小程序开发等。
详细教程→点击查看。
2、udp隧道模式
适用:在非内网环境下使用内网dns,或者需要通过udp访问内网机器等。
详细教程→点击查看。
3、http代理模式
适用:在外网使用HTTP代理访问内网站点。
详细教程→点击查看。
4、socks5代理模式
适用:搭建一个内网穿透55,在外网如同使用内网v皮n一样访问内网资源或者设备。
详细教程→点击查看。
五、使用测试
1、TCP隧道
两种配置方式:server web配置和client config文件配置。其一即可。
(1)、server web配置
点击tunnel创建隧道
增加tcp隧道:
隧道建立后,连接server ip 192.168.91.1的7000端口,即连接到内网192.168.91.149的3389端口。
(2)、client config文件配置
config文件在nps client启动时加载即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
crypt=true
compress=true
[tcp]
mode=tcp
target_addr=192.168.91.149:3389
server_port=7000
client 的config文件无法重载,故,只能启动时候加载上所有配置,不建议用config文件方式进行隧道配置,不灵活,推荐使用server web配置方式。
2、UDP隧道
UDP隧道配置和TCP过程一样,mode改成UDP即可。
3、socks5内网代理
两种配置方式:server web配置和client config文件配置。其一即可。
(1)、server web配置
增加socks5:
代理设置完毕后,连接server ip 192.168.91.1的9000端口即可代理到内网中。
在nps server添加client时,设置了basic权限认证admink/admink,部分浏览器插件如SwitchyOmega不支持s5的basic认证,建议使用proxychains或者Proxifier进行代理。
proxychains配置:
socks5 x.x.x.x 9000 admink admink
(2)、client config文件配置
config文件在nps client启动时加载即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
basic_username=admink
basic_password=admink
crypt=true
compress=true
[socks5]
mode=socks5
server_port=9000
client 的config文件无法重载,故,只能启动时候加载上所有配置,不建议用config文件方式进行socks5代理配置,不灵活,推荐使用server web配置方式。
4、http内网代理
http内网代理和socks5过程一样,mode改成httpProxy即可。
5、内网文件访问服务
内网文件访问配置只能在client config中进行。
config文件在nps client启动时加载即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
basic_username=admink
basic_password=admink
crypt=truecompress=true
[file]mode=file
server_port=8888
local_path=C:\\
strip_pre=/fileservice/
local_path配置内网机要设置文件服务的目录。
server_port配置一个server ip上的端口。
strip_pre配置访问文件服务的path。
启动
npc.exe -config=npc.conf
成功启动:
浏览器中访问:http://x.x.x.x:8888/fileservice/
目前只能做文件访问,还做不到文件管理。
六、相关功能
1、数据压缩支持
由于是内网穿透,内网客户端与服务端之间的隧道存在大量的数据交换,为节省流量,加快传输速度,由此本程序支持SNNAPY形式的压缩。
- 所有模式均支持数据压缩,可以与加密同时使用
- 开启此功能会增加cpu和内存消耗
- 在server端加上参数-compress=snappy(或在web管理中设置)
2、加密传输
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了ssh协议等,通过设置配置文件,将服务端与客户端之间的通信内容加密传输,将会有效防止流量被拦截。
- 开启此功能会增加cpu和内存消耗
- 在server端加上参数-crypt=true(或在web管理中设置)
3、站点保护
域名代理模式所有客户端共用一个http服务端口,在知道域名后任何人都可访问,一些开发或者测试环境需要保密,所以可以设置用户名和密码,nps将通过Http Basic Auth来保护,访问时需要输入正确的用户名和密码。
- web管理中可配置
4、host修改
由于内网站点需要的host可能与公网域名不一致,域名代理支持host修改功能,即修改request的header中的host字段。
- 在web管理中设置
5、自定义header
支持对header进行新增或者修改,以配合服务的需要。
6、404页面配置
支持域名解析模式的自定义404页面,修改/web/static/page/error.html中内容即可,暂不支持静态文件等内容。
7、流量限制
支持客户端级流量限制,当该客户端入口流量与出口流量达到设定的总量后会拒绝服务,域名代理会返回404页面,其他会拒绝连接。
8、带宽限制
支持客户端级带宽限制,带宽计算方式为入口和出口总和,权重均衡。
9、负载均衡
本代理支持域名解析模式的负载均衡,在web域名添加或者编辑中内网目标分行填写多个目标即可实现轮训级别的负载均衡。
10、守护进程
本代理支持守护进程,使用示例如下,服务端客户端所有模式通用,支持linux、darwin、windows。
./(nps|npc) start|stop|restart|status 若有其他参数可加其他参数 (nps|npc).exe start|stop|restart|status 若有其他参数可加其他参数
11、KCP协议支持
KCP是一个快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,在弱网环境下对性能能有一定的提升。可在app.conf中修改bridgeType为kcp。
- 当服务端为kcp时,客户端连接时也需要加上参数-type=kcp。
该工具很强大,更多的使用可以自行研究,如果有人知道Frp管理面板的话,可以给博主提供下。
七、防御方案
- 加强内网攻击检测
- 部署apt设备和蜜罐设备
- 捕捉内网攻击行为
参考文章
https://mp.weixin.qq.com/s/NTBd8AI92yG4Au7W5W9Ktw
https://blog.csdn.net/superDE009/article/details/99700179