NPS:轻量级高性能内网穿透工具 – 外网访问内网服务的最优解

家里有台 NAS、树莓派或者自建服务器,出门在外想连回去?公司内网想调试微信公众号/小程序 WebHook?这就涉及一个经典问题——内网穿透

市面上内网穿透方案不少:花生壳、ngrok、FRP、NPS……今天重点介绍 NPS,一款轻量级、高性能、功能强大的内网穿透代理服务器,在全网拥有 30k+ Star,是目前最受欢迎的 Go 语言内网穿透方案之一。

什么是 NPS?

NPS(全称 nps)是一个用 Go 语言编写的内网穿透工具,采用 服务端(Server)+ 客户端(Client)架构:

  • 服务端部署在有公网 IP 的云服务器上
  • 客户端部署在内网机器上(如树莓派、NAS、公司电脑)
  • 服务端和客户端之间建立隧道连接,将内网服务映射到公网

NPS Web 管理界面

NPS vs 其他方案

对比维度 NPS FRP 花生壳 ngrok
开发语言 Go Go 闭源 Go
Web 管理界面 ✅ 自带,功能完整 ✅ (frp v2+ 有 Dashboard) ✅ 官方后台 ❌ 需额外配置
协议支持 TCP/UDP/HTTP/HTTPS/SOCKS5/P2P TCP/UDP/HTTP/HTTPS TCP/HTTP TCP/HTTP
多用户支持 ✅ 服务端支持多用户
系统服务安装 ✅ 一键安装
流量统计 ✅ 完备的流量/带宽显示 ❌ 免费版无
免费使用 ✅ 完全开源免费 ✅ 完全开源免费 🟡 免费版限制多 🟡 自建 ngrok 复杂

核心功能

NPS 支持多种代理模式,覆盖几乎所有内网穿透需求:

1. TCP 隧道

最常用的模式。将一个公网端口映射到内网服务的端口:

  • SSH 远程连接内网服务器
  • 远程桌面连接
  • 内网 Web 服务映射出去

2. UDP 隧道

支持 UDP 协议转发,如内网 DNS 解析、游戏联机等。

3. HTTP/HTTPS 代理(域名代理)

将内网网站的流量通过域名转发出去,是微信公众号/小程序开发调试的神器。

4. SOCKS5 代理

建立一条内网代理通道,在外面像在内网一样访问所有资源。

5. P2P 穿透

通过打洞实现点对点连接,流量不经过中继服务器,速度更快。

特点与优势

  • 全平台兼容:Linux、Windows、macOS、群晖等,均支持一键安装为系统服务
  • 完整的 Web 管理面板:创建客户端、配置隧道、查看流量、实时带宽——全在浏览器里搞定
  • HTTPS 集成:支持将后端代理和 Web 服务自动转为 HTTPS,支持多证书
  • 功能全面:缓存、压缩、加密、流量限制、带宽限制、端口复用,该有的都有了
  • 域名解析:支持自定义 Header、404 页面、Host 修改、站点保护、URL 路由、泛解析
  • 多用户系统:服务端支持多用户注册使用,可以给别人开账号

快速部署

服务端(公网服务器)

# 下载服务端(以 Linux amd64 为例)
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
tar -zxvf linux_amd64_server.tar.gz

# 安装为系统服务
sudo ./nps install

# 启动
sudo nps start

启动后访问 服务器IP:8080 进入管理面板。
默认账号密码:admin / 123(生产环境务必修改)。

关键配置文件在 /etc/nps/nps.conf,可修改端口、密码等:

参数 说明
web_port Web 管理端口(默认 8080)
web_password 管理面板密码
web_username 管理面板账号
bridge_port 客户端通信端口(默认 8024)
http_proxy_port HTTP 代理监听端口
https_proxy_port HTTPS 代理监听端口

注意:如果服务器有防火墙,需要放行 Web 管理端口(8080)、客户端通信端口(8024)以及你配置的隧道端口。

客户端(内网机器)

# 下载客户端
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
tar -zxvf linux_amd64_client.tar.gz

# 连接服务端(在管理面板中新增客户端获取命令)
./npc -server=你的服务器IP:8024 -vkey=密钥 -type=tcp

连接成功后,在 Web 管理面板中配置对应的穿透隧道即可。

典型案例

案例一:外网 SSH 连接内网服务器

  1. 服务端 Web 管理 → TCP 隧道 → 新增
  2. 服务端端口:设置一个空闲端口(如 2222)
  3. 目标 IP/端口:内网机器的 SSH 地址(如 192.168.1.100:22)
  4. 防火墙放行 2222 端口
  5. 外网执行:ssh user@服务器IP -p 2222

案例二:微信公众号本地调试

  1. NPS 配置域名代理,将内网的开发服务器映射出去
  2. 将域名填入公众号的 Web 白名单
  3. 本地修改代码后,公众号请求直接到达本地环境,无需部署

案例三:远程访问内网 NAS

  1. 配置一条 TCP 隧道,将 NAS 的管理面板端口映射到公网
  2. 外网直接访问 服务器IP:映射端口 管理 NAS

局限性

  • 需要一台公网服务器:这是 NPS 最大的门槛,你需要一台有公网 IP 的云服务器来架设服务端
  • 流量经过中转:非 P2P 模式下,所有流量都经过中继服务器,对服务器带宽有要求
  • 项目停更风险:该项目近期更新频率较低,但功能已经非常成熟稳定

不过话说回来,你都要内网穿透了,确实需要一台公网服务器做跳板。NPS 的轻量级特性让它可以跑在 1 核 1G 的最低配云服务器上,一台 30 块钱的轻量云就够用。

总结

NPS 是目前最优秀的内网穿透工具之一,相比 FRP 拥有更完整的 Web 管理面板,相比商业解决方案完全免费开源。如果你有内网穿透的需求,NPS 是非常值得考虑的方案。

项目地址https://github.com/ehang-io/nps
官方文档https://ehang-io.github.io/nps/

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享