一款轻量级、高性能、功能强大的内网穿透代理服务器
共 7039字,需浏览 15分钟
·
2024-05-20 10:30
来源:github.com/ehang-io/nps
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 每月赠书
新项目:仿小红书(微服务架构)正在更新中... , 全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ 。全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了261小节,累计41w+字,讲解图:1806张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有1400+小伙伴加入(早鸟价超低)
-
功能 -
快速开始 -
使用示例 -
开源地址
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 端口 -
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 中配置对应穿透服务即可
可以查看使用示例
使用示例
统一准备工作(必做)
-
开启服务端,假设公网服务器 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
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 每月赠书
新项目:仿小红书(微服务架构)正在更新中... , 全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ 。全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了261小节,累计41w+字,讲解图:1806张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有1400+小伙伴加入(早鸟价超低)
1. 我的私密学习小圈子~
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦