一款轻量级、高性能、功能强大的内网穿透代理服务器
👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事上“练” 《互联网高频面试题》:面朝简历学习,春暖花开 《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题 《精进 Java 学习指南》:系统学习,互联网主流技术栈 《必读 Java 源码专栏》:知其然,知其所以然
👉这是一个或许对你有用的开源项目
国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。
功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:
Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud 视频教程:https://doc.iocoder.cn 【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本
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 路由、泛解析等功能 服务端支持多用户和用户注册功能
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/
快速开始
安装
https://github.com/ehang-io/nps/releases
下载对应的系统版本即可,服务端和客户端是单独的
服务端启动
下载完服务器压缩包后,解压,然后进入解压后的文件夹
执行安装命令
对于 linux|darwin
sudo ./nps install
对于 windows,管理员身份运行 cmd,进入安装目录
nps.exe install
默认端口
nps 默认配置文件使用了 80,443,8080,8024 端口 80 与 443 端口为域名解析模式默认端口 8080 为 web 管理访问端口 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 中配置对应穿透服务即可
可以查看使用示例
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/yudao-cloud 视频教程:https://doc.iocoder.cn/video/
使用示例
统一准备工作(必做)
开启服务端,假设公网服务器 ip 为 1.1.1.1
,配置文件中bridge_port
为 8024,配置文件中web_port
为 8080访问 1.1.1.1: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
在需要连接 ssh 的机器上以执行命令
./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
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
微信扫码关注该文公众号作者