内网穿透方案-nps
- [新手必懂:内网穿透入门指南(从原理到工具 + 操作)](#新手必懂:内网穿透入门指南(从原理到工具 + 操作))
- 部署演示
新手必懂:内网穿透入门指南(从原理到工具 + 操作)
很多人想把家里的电脑、NAS 当作服务器,部署应用供手机或其他网络的设备连接,但大多没有固定公网 IP 或弹性 IP,外部设备根本找不到本地设备。这时候,"内网穿透" 就能解决问题 ------ 它能让外部设备轻松 ping 通你的本地设备,实现跨网通信。
一、内网穿透到底是什么?(通俗理解)
简单说,内网穿透就是给本地设备(电脑 / NAS)的 "局域网 IP",配一个能被全网访问的 "公网地址"。
核心逻辑本地设备的 IP 是 "局域网专用",就像藏在小巷里的房子,外面的人直接找不到。
内网穿透相当于在路口设了个 "中转站",把小巷里的地址映射到路口的 "公网地址" 上。
外部设备只需通过这个公网地址,就能间接对接本地设备,不用复杂设置就能通信。
形象类比你家(本地设备)在没有门牌号的小巷(局域网)里,别人想找你根本无从下手。内网穿透就像在路口设了个指引站(公网地址),别人先到指引站,再跟着指引找到你家,直接实现 "跨路对接"。
二、热门内网穿透工具对比(新手友好)
不同工具的操作难度、收费情况不同,按需选择即可:
| 工具名称 | 操作难度 | 收费情况 | 核心优势 | 适用场景 |
|---|---|---|---|---|
| 花生壳 | 低(傻瓜式) | 免费版有流量 / 速度限制,付费版解锁全功能 | 无需手动配置,自动映射,支持多种设备 | 新手入门、临时测试、轻量应用部署 |
| Ngrok | 低 - 中(简单配置) | 免费版有域名随机、流量限制,付费版稳定 | 跨平台支持好,生成公网地址快,无需备案 | 开发测试、短期对外提供服务 |
| frp | 中(需改配置文件) | 完全免费(自建服务器)或用第三方节点 | 速度快、无流量限制,灵活性高 | 有基础电脑知识、追求稳定的用户 |
| nps | 中 - 高(需搭建服务端) | 完全免费(自建),无流量 / 设备限制 | 自定义程度极高,速度稳定,可批量管理设备 | 有服务器基础、需长期稳定使用的用户 |
选择小建议
纯新手、不想折腾:直接选花生壳,跟着引导点几下就能用。
想免费且稳定:有电脑基础选 Frp,没基础选 Ngrok 免费版。
多设备跨网互访(比如手机连 NAS 传文件):优先 ZeroTier。
长期用、需批量管理设备:有服务器基础可选 NPS。
三、内网穿透核心操作步骤
不管选哪款工具,核心流程都离不开这 3 步,新手也能轻松上手:
- 选一款适合自己的工具
优先选傻瓜式工具,不用手动配复杂参数。根据上面的对比表,结合自己的需求和技术基础选择即可。 - 本地设备与工具绑定
下载工具客户端,安装到你的电脑或 NAS 上。
登录工具账号,按指引选择要映射的本地服务(比如部署的应用、设备本身)。
勾选对应的本地 IP 和端口(工具通常会自动检测,不用手动填写)。 - 获取公网地址并测试连接
绑定成功后,工具会生成专属公网地址(可能是 IP 或带域名的链接)。
用手机(开流量,别连同一 WiFi)或其他网络的电脑,输入这个公网地址,就能 ping 通本地设备,也能访问上面部署的应用了。
补充说明:nps 和 frp 类似,都属于 "自建型工具",需要自己拥有一个额外的公网 IP,可以是直接购买的云服务器,也可以在一些平台上购买IP(比如七普云)。虽然操作比花生壳、Ngrok 稍复杂,但搭建完成后稳定性和可控性更强,适合长期使用。像花生壳这种使用相对简单,本文主要记录一下nps的使用方法。
部署演示
一、实验环境
为了适应不用的需求,测试nps方案的环境为:
- 一台虚拟机(ubuntu系统)
- 一台百度云服务器(ubuntu系统)
为了方便测试,我通过如下命令在虚拟机中安装了一个mqtt服务(为了方便,直接是root用户下操作):
cmd
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash

cmd
apt install emqx

执行如下命令,mqtt服务即可启动:
cmd
systemctl start emqx
EMQX相关的端口有如下:
| 端口号 | 介绍 |
|---|---|
| 1883 | MQTT 协议端口 |
| 8883 | MQTT/SSL 端口 |
| 8083 | MQTT/WebSocket 端口 |
| 8080 | HTTP API 端口 |
| 18083 | Dashboard 管理控制台端口 |
尝试登录控制台(使用本地ip加上端口18083即可,初始用户名:admin,密码:public),登陆后会要求修改密码:

使用通信猫测试软件尝试连接已经可以连接成功了:

进入正题,从nps仓库下载2个文件(根据使用系统选择),一个是nps服务端,放到百度云服务器上运行,一个是nps客户端,放在局域网IP的虚拟机上运行,这里就就下载如下两个:

二、配置服务端
将linux_amd64_server.tar.gz文件上传到百度云服务器上,依次在文件同级路径下命令行执行如下3条命令
cmd
tar -xzvf linux_amd64_server.tar.gz
cmd
sudo ./nps instal
cmd
sudo nps start
注意nps服务端启动会占用80,8080,8024端口,如需修改默认占用端口: 修改 /etc/nps/conf 下的 nps.conf 文件

到这里就可以使用浏览器访问云服务公网IP加上默认端口8080访问nps管理端(默认用户名admin,密码:123)

登录后新建一个客户端:

设置个备注和密钥(客户端要用),其他暂时就不用改了,点击新增即可

出来后点击右上角刷新就就可以看到客户端状态,这里离线是还没开始配置客户端:

三、配置客户端
把linux_amd64_client.tar.gz上传到虚拟机中:

解压
cmd
tar xzvf linux_amd64_client.tar.gz

使用如下命令启动客户端(命令中服务器ip换成自己的服务器公网IP,端口8024是服务端默认端口):
cmd
./npc -server=服务器ip:8024 -vkey=123456 -type=tcp > ./nps.txt
希望关闭命令行后应用正常运行添加nohup指定后台运行即可:
cmd
nohup ./npc -server=服务器ip:8024 -vkey=123456 -type=tcp > ./nps.txt &
这里为了方便测试就直接使用第一条命令了:

命令执行后在管理端刷新就能看到客户端状态为在线了(截图中的第一个数字3是客户端ID后面要用):

开始在nps管理端新增端口穿透(注意公网端口要在云平台添加安全策略开放端口):

出来后刷新一下就能看到客户端状态为在线:

再次使用通信猫连接公网IP和映射出来的端口就能看到可以正常连接,表示穿透成功:
