前言
现在家庭宽带用户基本很难再分配到一条公网IP,IPv6对部分应用的兼用和普及上面还存在很多困难,如果想在外网访问家里部署的服务,那么内网穿透就是一个比较折中的办法了。
我看了很多方案,觉得最快最方便实施的就是NPS,只需一个有公网IP的服务器,和一个路由器就可以部署了。
在服务器端安装NPS,在家里路由器、NAS或电脑上安装NPC,然后绑定一下就可以在外网访问家里的应用了。
注意1:NPS和NPC两个应用的版本号必须一样,否则无法使用。
注意2:原项目已停更多年,先由网友接力在v0.26.10基础上二次开发,目前已更新到v0.26.28,
项目开源地址:https://github.com/yisier/nps
docker地址
环境准备
- 一台拥有公网IP的服务器(例如阿里云、华为云、腾讯云等各种云服务商);
- 一台需要被穿透的内网机器(例如家里的NAS、软路由、树莓派、PC等);
- SSH工具(例如PuTTY、Xshell等,用于连接服务器;
安装
命令安装
Server服务器端安装与配置(公网服务器)
下载服务端程序。
首先,登录你的公网服务器,确定你的 CPU 架构(通常是
♾️ bash 代码:amd64或x86_64)。# 下载NPS程序,以v0.26.28版本为例 wget https://github.com/yisier/nps/releases/download/v0.26.28/linux_amd64_server.tar.gz # 解压 tar -zxvf linux_amd64_server.tar.gz安装与配置
♾️ bash 代码:# 执行安装命令 sudo ./nps install安装完成后,配置文件通常位于
♾️ bash 代码:/etc/nps/conf/nps.conf。我们需要修改一些关键配置。# 编辑配置文件 sudo nano /etc/nps/conf/nps.conf重点修改/确认以下几项:
# web管理端口,默认8080,建议修改为不常用的端口以防扫描
web_port = 8080
# web管理界面的用户名
web_username = admin
# web管理界面的密码 (务必修改!)
web_password = 123
# 客户端连接服务端的端口,默认8024
bridge_port = 8024
# 域名代理端口 (如果你需要穿透 HTTP/HTTPS 网站)
http_proxy_port = 80
https_proxy_port = 443按 Ctrl+O 保存,Ctrl+X 退出 nano 编辑器。
启动 NPS 服务
# 启动服务
sudo nps start
# 查看状态
sudo nps status如果显示运行中,说明服务端安装成功。
放行防火墙端口
这是最容易被忽略的一步。你需要去云服务商的安全组或服务器内部的防火墙放行以下端口:
- Web管理端口 (如 8080)
- 客户端连接端口 (如 8024)
- 你需要穿透的具体业务端口 (例如你想穿透内网的 SSH,你可能需要在公网开放 2222 端口)
web管理界面配置
- 打开浏览器,访问
http://你的公网IP:8080。 - 输入你在配置文件中设置的用户名和密码。
- 创建客户端:
- 点击左侧菜单 “客户端” -\> “新增” 。
- 备注:填写便于识别的名字(如 "Home-NAS")。
- 验证密钥 (vkey) :这是客户端连接服务端的凭证,可以自定义,也可以自动生成(例如
my_secret_key_123)。 - 压缩/加密:建议开启,提高传输效率和安全性。
- 点击 “新增” 。
此时,你会看到客户端列表中多了一行,状态为“离线”。记下刚才设置的 vkey。 NPC 客户端安装(内网机器)
此处以Linux客户端为例
下载客户端程序
♾️ bash 代码:# 下载 Linux amd64 客户端 wget https://github.com/yisier/nps/releases/download/v0.26.28/linux_arm64_client.tar.gz # 解压 tar -zxvf linux_arm64_client.tar.gz运行客户端
使用刚才在 Web 界面获取的
♾️ bash 代码:vkey和公网服务器 IP 进行连接。# 格式: ./npc -server=公网IP:8024 -vkey=你的密钥 -type=tcp ./npc -server=1.2.3.4:8024 -vkey=my_secret_key_123 -type=tcp如果看到
Successful connection with server...字样,说明连接成功!注册为系统服务(开机自启)
为了让它在后台稳定运行:
♾️ bash 代码:# 安装服务 sudo ./npc install -server=1.2.3.4:8024 -vkey=my_secret_key_123 -type=tcp # 启动服务 sudo npc startDocker部署
Server服务器端安装与配置(公网服务器)
拉取nps镜像
♾️ bash 代码:docker pull yisier1/nps启动服务和配置
容器管理里面去建立容器和打开浏览器配置
NPC 客户端安装(内网机器)
拉取npc镜像
♾️ bash 代码:docker pull yisier1/npc启动npc程序
♾️ bash 代码:docker run -d --restart=always --name <自定义名称> --net=host yisier1/npc -server=xxxx -vkey=xxxx填入之前获取的server和vkey码
创建穿透隧道
客户端连接成功后(Web 界面显示“在线”),我们就可以建立具体的穿透规则了。
示例 1:TCP 隧道(穿透 SSH 或 远程桌面)
假设你想通过公网访问内网机器的 SSH (端口 22)。
- 在 Web 管理界面,点击左侧 “TCP隧道” -\> “新增” 。
- 客户端ID:选择刚才创建的客户端。
- 服务端端口:
2222(这是你在公网访问时用的端口)。 - 目标 (IP:端口) :
127.0.0.1:22(这是内网机器自己的 SSH 端口)。 - 点击 “新增” 。
测试:
在外部网络,使用 SSH 连接 公网IP:2222,即可直接连入内网机器。
示例 2:HTTP 域名代理(穿透网站)
假设你内网有一个网站运行在 80 端口,你想通过
demo.example.com访问。- 确保你的域名
demo.example.com已经解析到了公网服务器 IP。 - 在 Web 管理界面,点击左侧 “域名解析” -\> “新增” 。
- 客户端ID:选择对应客户端。
- 主机:
demo.example.com。 - 目标 (IP:端口) :
127.0.0.1:80。 - 点击 “新增” 。
测试:
浏览器访问 http://demo.example.com,即可看到内网网站。
常见问题
- 连接状态一直是“离线” :
- 检查公网服务器防火墙是否放行了
8024端口。 - 检查客户端能否 Ping 通服务端 IP。
- 检查 vkey 是否填写正确。
- Web 界面打不开:
- 检查
8080端口是否放行。 - 检查
nps.conf中web_host是否限制了 IP(默认为空,允许所有)。 速度慢:
- 内网穿透受限于公网服务器的带宽。如果你的云服务器只有 1Mbps 带宽,穿透速度最快也只有 128KB/s。









