写在开头

nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理p2p等,并带有功能强大的web管理端。

web

  1. 做微信公众号开发、小程序开发等----> 域名代理模式
  2. 想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式
  3. 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式
  4. 在外网使用HTTP代理访问内网站点----> http代理模式
  5. 搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式

开始

安装

1.直接通过安装包安装

releases

下载对应的系统版本即可,服务端和客户端是单独的

2.通过源码安装

  • 安装源码 go get -u ehang.io/nps
  • 编译

服务端 go build cmd/nps/nps.go

客户端 go build cmd/npc/npc.go

3.通过docker安装

server client

启动

服务端

下载完服务器压缩包后,解压,然后进入解压后的文件夹

  • 执行安装命令

对于linux|darwin sudo ./nps install

对于windows,管理员身份运行cmd,进入安装目录 nps.exe install

  • 启动

对于linux|darwin sudo nps start

对于windows,管理员身份运行cmd,进入程序目录 nps.exe start

安装后windows配置文件位于 C:\Program Files\nps,linux和darwin位于/etc/nps

停止和重启可用,stop和restart

如果发现没有启动成功,可以使用 nps(.exe) stop,然后运行 nps.(exe)运行调试,或查看日志 (Windows日志文件位于当前运行目录下,linux和darwin位于/var/log/nps.log)

  • 访问服务端ip:web服务端口(默认为8080)
  • 使用用户名和密码登陆(默认admin/123,正式使用一定要更改)
  • 创建客户端

客户端

  • 下载客户端安装包并解压,进入到解压目录
  • 点击web管理中客户端前的+号,复制启动命令
  • 执行启动命令

版本检查

  • 对客户端以及服务的均可以使用参数 -version打印版本
  • nps -version./nps -version
  • npc -version./npc -version

配置

  • 客户端连接后,在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
  • 点击刚才创建的客户端的域名管理,添加两条规则规则:1、域名:a.proxy.com,内网目标:127.0.0.1:81,2、域名:b.proxy.com,内网目标:127.0.0.1:82

现在访问(http|https://)a.proxy.comb.proxy.com即可成功

https: 如需使用https请进行相关配置,详见 使用https

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端口即可。

最后修改:2023 年 09 月 10 日
如果觉得我的文章对你有用,请随意赞赏