nps 是一款轻量级、高性能、功能强大的内网穿透代理服务器。
目前支持 tcp、udp 流量转发,可支持任何 tcp、udp 上层协议(访问内网网站、本地支付接口调试、ssh 访问、远程桌面,内网 dns 解析等等……),此外还支持内网 http 代理、内网 socks5 代理、p2p 等,并带有功能强大的 web 管理端。
功能
协议支持全面,兼容几乎所有常用协议,例如 tcp、udp、http(s)、socks5、p2p、http 代理...
全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务
https 集成,支持将后端代理和 web 服务转成 https,同时支持多证书
操作简单,只需简单的配置即可在 web ui 上完成其余操作
展示信息全面,流量、系统信息、即时带宽、客户端版本等
扩展功能强大,该有的都有了(缓存、压缩、加密、流量限制、带宽限制、端口复用等等)
域名解析具备自定义 header、404 页面配置、host 修改、站点保护、URL 路由、泛解析等功能
快速开始
安装
https://github.com/ehang-io/nps/releases
下载对应的系统版本即可,服务端和客户端是单独的
服务端启动
下载完服务器压缩包后,解压,然后进入解压后的文件夹
执行安装命令
对于 linux|darwin
sudo ./nps install
对于 windows,管理员身份运行 cmd,进入安装目录
nps.exe install
默认端口
nps 默认配置文件使用了 80,443,8080,8024 端口
启动
对于 linux|darwin
sudo nps start
对于 windows,管理员身份运行 cmd,进入程序目录
nps.exe start
安装后 windows 配置文件位于 C:\Program Files\nps
,linux 和 darwin 位于/etc/nps
如果发现没有启动成功,可以查看日志(Windows 日志文件位于当前运行目录下,linux 和 darwin 位于/var/log/nps.log
)
访问服务端 ip:web 服务端口(默认为 8080)
使用用户名和密码登陆(默认 admin/123,正式使用一定要更改)
客户端连接
点击 web 管理中客户端前的+号,复制启动命令
执行启动命令,linux 直接执行即可,windows 将./npc
换成 npc.exe
用 cmd 执行 如果需要注册到系统服务可查看注册到系统服务
https://ehang-io.github.io/nps/#/use?id=注册到系统服务
配置
客户端连接后,在 web 中配置对应穿透服务即可
可以查看使用示例
使用示例
统一准备工作(必做)
开启服务端,假设公网服务器 ip 为 1.1.1.1
,配置文件中bridge_port
为 8024,配置文件中web_port
为 8080
内网客户端运行(windows 使用 cmd 运行加.exe)
./npc -server=1.1.1.1:8024 -vkey=客户端的密钥
注意:
运行服务端后,请确保能从客户端设备上正常访问配置文件中所配置的bridge_port
端口,telnet,netcat 这类的来检查
域名解析
适用范围:
小程序开发、微信公众号开发、产品演示
注意:
域名解析模式为 http 反向代理,不是 dns 服务器,在 web 上能够轻松灵活配置
假设场景:
有一个域名 proxy.com
,有一台公网机器 ip 为 1.1.1.1
两个内网开发站点 127.0.0.1:81
,127.0.0.1:82
想通过(http|https://)a.proxy.com
访问127.0.0.1:81
,通过(http|https://)b.proxy.com
访问127.0.0.1:82
使用步骤:
将*.proxy.com
解析到公网服务器 1.1.1.1
点击刚才创建的客户端的域名管理,添加两条规则规则:
域名:a.proxy.com
,内网目标:127.0.0.1:81
,
域名:b.proxy.com
,内网目标:127.0.0.1:82
现在访问(http|https://)a.proxy.com
,b.proxy.com
即可成功
tcp 隧道
适用范围:
ssh、远程桌面等 tcp 连接场景
假设场景:
想通过访问公网服务器 1.1.1.1 的 8001 端口,连接内网机器 10.1.50.101
的 22 端口,实现 ssh 连接
使用步骤:
在刚才创建的客户端隧道管理中添加一条 tcp 隧道,填写监听的端口(8001)、内网目标 ip 和目标端口(10.1.50.101:22
),保存。
访问公网服务器 ip(1.1.1.1),填写的监听端口(8001),相当于访问内网 ip(10.1.50.101):目标端口(22),例如:ssh -p 8001 root@1.1.1.1
udp 隧道
适用范围:
内网 dns 解析等 udp 连接场景
假设场景:
内网有一台 dns(10.1.50.102:53
),在非内网环境下想使用该 dns,公网服务器为 1.1.1.1
使用步骤:
在刚才创建的客户端的隧道管理中添加一条 udp 隧道,填写监听的端口(53)、内网目标 ip 和目标端口(10.1.50.102:53
),保存。
修改需要使用的 dns 地址为 1.1.1.1,则相当于使用 10.1.50.102
作为 dns 服务器
socks5 代理
适用范围:
在外网环境下如同使用 vpn 一样访问内网设备或者资源
假设场景:
想将公网服务器 1.1.1.1 的 8003 端口作为 socks5 代理,达到访问内网任意设备或者资源的效果
使用步骤:
在刚才创建的客户端隧道管理中添加一条 socks5 代理,填写监听的端口(8003),保存。
在外网环境的本机配置 socks5 代理(例如使用 proxifier 进行全局代理),ip 为公网服务器 ip(1.1.1.1),端口为填写的监听端口(8003),即可畅享内网了
注意:
经过 socks5 代理,当收到 socks5 数据包时 socket 已经是 accept 状态。表现是扫描端口全 open,建立连接后短时间关闭。若想同内网表现一致,建议远程连接一台设备。
http 正向代理
适用范围:
在外网环境下使用 http 正向代理访问内网站点
假设场景:
想将公网服务器 1.1.1.1 的 8004 端口作为 http 代理,访问内网网站
使用步骤:
在刚才创建的客户端隧道管理中添加一条 http 代理,填写监听的端口(8004),保存。
在外网环境的本机配置 http 代理,ip 为公网服务器 ip(1.1.1.1),端口为填写的监听端口(8004),即可访问了
注意:
对于私密代理与 p2p,除了统一配置的客户端和服务端,还需要一个客户端作为访问端提供一个端口来访问
私密代理
适用范围:
无需占用多余的端口、安全性要求较高可以防止其他人连接的 tcp 服务,例如 ssh。
假设场景:
无需新增多的端口实现访问内网服务器 10.1.50.2
的 22 端口
使用步骤:
在刚才创建的客户端中添加一条私密代理,并设置唯一密钥 secrettest 和内网目标 10.1.50.2:22
./npc -server=1.1.1.1:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret
如需指定本地端口可加参数-local_port=xx
,默认为2000
注意:
password 为 web 管理上添加的唯一密钥,具体命令可查看 web 管理上的命令提示
假设 10.1.50.2 用户名为 root,现在执行ssh -p 2000 root@127.0.0.1
即可访问 ssh
p2p 服务
适用范围:
大流量传输场景,流量不经过公网服务器,但是由于 p2p 穿透和 nat 类型关系较大,不保证 100%成功,支持大部分 nat 类型。nat 类型检测
假设场景:
想通过访问使用端机器(访问端,也就是本机)的 2000 端口---->访问到内网机器 10.2.50.2 的 22 端口
使用步骤:
在nps.conf中设置p2p_ip(nps 服务器 ip)和p2p_port
(nps 服务器 udp 端口)
注:若 p2p_port 设置为 6000,请在防火墙开放 6000~6002(额外添加 2 个端口)udp 端口
在刚才刚才创建的客户端中添加一条 p2p 代理,并设置唯一密钥 p2pssh
在使用端机器(本机)执行命令
./npc -server=1.1.1.1:8024 -vkey=123 -password=p2pssh -target=10.2.50.2:22
如需指定本地端口可加参数-local_port=xx
,默认为2000
注意:
password 为 web 管理上添加的唯一密钥,具体命令可查看 web 管理上的命令提示
假设内网机器为 10.2.50.2 的 ssh 用户名为 root,现在在本机上执行ssh -p 2000 root@127.0.0.1
即可访问机器 2 的 ssh,如果是网站在浏览器访问 127.0.0.1:2000 端口即可。
开源地址
https://github.com/ehang-io/nps
该文章在 2024/5/7 11:29:49 编辑过