摘要:还在为无法远程访问公司电脑、调试微信小程序回调或展示本地项目而烦恼吗?第三方穿透工具限制多且速度慢?本文将手把手教你如何通过开源免费的NPS,搭建一个专属、高性能、安全可靠的内网穿透服务。
一、 我们为什么需要内网穿透?
在日常开发和运维中,你很可能遇到过以下痛点:
远程办公:周末在家,急需访问公司内网的管理系统或连接办公室的电脑处理紧急事务。
开发调试:进行微信小程序、公众号开发或支付功能调试时,第三方平台要求公网域名进行回调,而你的本地开发环境只有内网地址。
服务演示:想给异地的同事或客户实时演示本地运行的项目,却没有公网IP,无法生成访问链接。
设备管理:出门在外时,想要访问家中的NAS、监控摄像头或其他智能设备。
传统的解决方案,如使用限制众多的免费穿透工具或配置复杂的VPN,往往体验不佳。而内网穿透技术正是为此而生的完美解决方案,NPS则是其中的佼佼者。
二、 什么是NPS?
NPS是一款使用Go语言开发的轻量级、高性能、功能强大的内网穿透代理服务器。其主要优势包括:
全能协议支持:全面支持TCP、UDP、HTTP(S)、SOCKS5、P2P等多种协议。
友好的Web管理:提供直观的Web控制台,配置简单,无需记忆复杂命令。
真正的跨平台:可在Linux、Windows、macOS乃至群晖NAS上稳定运行。
企业级安全:支持数据加密压缩和身份验证,保障通信安全。
高效性能:资源占用极低,转发效率高。
项目地址:
官方文档:https://ehang-io.github.io/nps/
GitHub:https://github.com/ehang-io/nps
三、 NPS工作原理简介
NPS采用经典的服务端-客户端(C/S)架构:
服务端(NPS):部署在具备公网IP的云服务器上,作为流量中转站,接收来自外部的访问请求。
客户端(NPC):部署在你需要穿透的内网机器上(如公司电脑、家里的NAS),它会主动与服务端建立一个稳定的加密隧道。
流量转发:当外部用户访问服务端的特定端口时,服务端会通过已建立的隧道,将请求转发给内网的客户端,再由客户端将请求送达最终的内网服务,并将响应数据原路返回。
架构示意图:
graph LR
A[公网用户] --> B[云服务器
NPS服务端
端口: 7180, 7080等]
B -- 通过加密隧道 --> C[内网机器
NPC客户端]
C --> D[内网服务
如: 192.168.1.10:8080]
D --> C
C -- 返回响应数据 --> B
B --> A
四、 准备工作
一台云服务器:需要具有公网IP,配置要求不高(1核1G即可),操作系统推荐CentOS或Ubuntu。
一台内网机器:你需要暴露到公网的服务所在的电脑或服务器(如本地开发机)。
NPS程序:从GitHub Releases页面下载对应的服务端(server)和客户端(client)二进制包。
下载地址:https://github.com/ehang-io/nps/releases
软件版本选择示意图:
在下载页面选择与您操作系统架构对应的版本,服务器通常选择 linux_amd64_server.tar.gz。
五、 实战部署:一步步搭建NPS服务
5.1 部署服务端(在云服务器上操作)
步骤 1: 解压与安装
# 进入源码目录,假设安装包已上传至此
cd /usr/local/src
# 创建服务端程序目录
mkdir -p /usr/local/nps_server
# 解压安装包
tar -zxvf linux_amd64_server.tar.gz -C /usr/local/nps_server
# 进入目录并安装
cd /usr/local/nps_server
./nps install
执行install命令后,会将配置文件、静态资源等复制到系统目录(如/etc/nps),并将可执行文件nps复制到/usr/bin,方便直接运行。 安装成功输出示意图:
安装命令会将配置文件复制到 /etc/nps/conf目录。 步骤 2: 关键配置 编辑主配置文件 /etc/nps/conf/nps.conf,重点关注以下几项:
# HTTP(S)代理端口,不启用可留空
http_proxy_ip=0.0.0.0
http_proxy_port=7180 # HTTP代理端口
https_proxy_port=7143 # HTTPS代理端口
# 公共密钥,客户端连接服务端时的校验密码,请修改为强密码
public_vkey=你的超级复杂密码
# Web管理面板配置
web_host=你的服务器IP # 可以是0.0.0.0
web_username=你的管理员用户名 # 自定义
web_password=你的管理员密码 # 自定义强密码
web_port = 7080 # Web管理后台访问端口
步骤 3: 启动与验证
# 启动NPS服务
nps start
# 检查端口是否正常监听
netstat -lnpt | grep nps
如果看到7080、7180、8024等端口处于监听状态,说明服务启动成功。 步骤 4: 访问Web管理后台 打开浏览器,访问 http://你的服务器IP:7080,使用配置的用户名和密码登录。 Web管理登录界面示意图:
通过Web管理界面可以轻松管理所有客户端和隧道。
重要:确保你的云服务器安全组/防火墙已放行以下端口:7080(Web管理)、7180(HTTP代理)、7143(HTTPS代理)、8024(客户端连接)。
5.2 配置客户端
步骤 1: 在Web界面添加客户端登录Web管理后台,进入「客户端」页面,点击「新增」。
备注:填写一个易于识别的名称,如我的办公电脑。
唯一验证密钥:系统会自动生成一个密钥(如pc8jnp6f7mv1ww81),请务必记下,这是客户端连接服务端的凭证。
添加客户端界面示意图:
为客户端设置一个备注名,并保存好自动生成的唯一验证密钥。 步骤 2: 在内网机器上启动客户端(NPC)将客户端程序包上传到内网机器上,然后执行:
# 解压并进入客户端目录
mkdir -p /usr/local/nps_client
tar -zxvf linux_amd64_client.tar.gz -C /usr/local/nps_client
cd /usr/local/nps_client
# 启动客户端,连接服务端
./npc -server=你的云服务器IP:8024 -vkey=刚才生成的唯一验证密钥 &
客户端启动后,在Web管理后台的「客户端」页面,应该能看到该客户端的状态由「离线」变为「在线」。
5.3 创建隧道,实现内网穿透
现在,最关键的一步是建立隧道规则。这里以最常见的TCP隧道为例:
在Web管理台,进入「TCP隧道」页面,点击「新增」。
客户端ID:选择刚刚上线的那个客户端。
服务端端口:填写一个云服务器上未被占用的端口,例如9909。外部用户将通过这个端口访问内网服务。
目标(IP:端口):填写你希望暴露的内网服务地址,例如192.168.1.10:9909(可以是NPC客户端本机,也可以是内网中的其他机器)。
添加TCP隧道界面示意图:
配置项示例值说明
客户端ID
我的办公电脑
选择已上线的客户端
服务端端口
9909
公网访问端口
目标(IP:端口)
192.168.1.10:9909
内网实际服务地址
配置说明:此规则意味着,所有发往你云服务器9909端口的流量,都会被NPS转发到内网192.168.1.10机器的9909端口。
六、 测试与总结
现在,你可以进行测试了。让一位朋友或在你的另一台网络不同的电脑上,尝试访问 http://你的云服务器IP:9909,如果一切顺利,请求将会被完美地转发到你的内网服务! 通过本文的详细教程,你已经成功搭建了一套完全由自己掌控的内网穿透系统。相比第三方免费服务,自建NPS在速度、稳定性、安全性和功能性上都有巨大优势,非常适合开发者和运维人员。