nps (之前叫easyProxy)是一款轻量级、高性能、功能强大的内网穿透代理服务器,使用go语言编写。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等),同时支持内网http、内网socks5、p2p等代理方式,支持snappy压缩(节省带宽和流量)、站点保护、加密传输、多路复用、header修改等并带有友好且功能强大的web图像管理界面。类似的工具还有Frp、lanproxy、Holer等,感兴趣的可去挨个看看。
【使用场景】:
1、做微信公众号开发、小程序开发等----> 域名代理模式
2、想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式
3、在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式
4、在外网使用HTTP代理访问内网站点----> http代理模式
5、搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式
Github地址:https://github.com/cnlh/nps
二、原理及功能
如上图所示,内网(通常情况是家里的有线宽带)没有固定公网IP(没有独立IP,实际是通过映射一个随机的ip出去的),无法在路由器上做端口映射,或者利用动态DNS连接回家里的设备,所以需要一个具有公网IP的设备来进行传递数据,公网IP设备和家里的能够建立一个稳定的隧道。在nps中,我们把具有公网IP的设备称为服务端(VPS),没有公网IP的内网设备称为客户端,相当于客户端借助于VPS将公网转发出去,外面的也可以通过访问VPS代理访问到内网的客户端,客户端如果再配合着隧道的话,还可连接到内网的其他设备上,这样就实现了外网访问无公网IP的内网设备的实现。如果不好理解的话,再看下图:
【功能】:
在外网使用HTTP代理访问内网站点----> http代理模式,比如在外网访问群辉的HTTP界面,这应该是最常用的
想在外网通过远程桌面连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式,穿透3389端口
在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式
搭建一个内网透明穿透,在外网如同使用内网一样访问内网资源或者设备----> socks5代理模式,比如在外网直接通过192.168.1.1访问路由器,连域名都不需要
【几种隧道方式的比较】
| 隧道方式 | 适用场景 |
|---|---|
| tcp隧道模式 | 适用:想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,或者做微信公众号开发、小程序开发等。 |
| udp隧道模式 | 适用:在非内网环境下使用内网dns,或者需要通过udp访问内网机器等。 |
| http代理模式 | 适用:在外网使用HTTP代理访问内网站点。 |
| socks5代理模式 | 适用:搭建一个内网穿透55,在外网如同使用内网v皮n一样访问内网资源或者设备。 |
【其他功能说明】
三、部署配置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。
参见1:https://blog.csdn.net/qq_38656841/article/details/103789525
参见2:https://www.cnblogs.com/smlile-you-me/p/15096899.html



