自建高性能内网穿透服务:基于NPS的详细教程

摘要:还在为无法远程访问公司电脑、调试微信小程序回调或展示本地项目而烦恼吗?第三方穿透工具限制多且速度慢?本文将手把手教你如何通过开源免费的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)架构:
  1. 服务端(NPS):部署在具备公网IP的云服务器上,作为流量中转站,接收来自外部的访问请求。
  2. 客户端(NPC):部署在你需要穿透的内网机器上(如公司电脑、家里的NAS),它会主动与服务端建立一个稳定的加密隧道。
  3. 流量转发:当外部用户访问服务端的特定端口时,服务端会通过已建立的隧道,将请求转发给内网的客户端,再由客户端将请求送达最终的内网服务,并将响应数据原路返回。
架构示意图: 

局部截取_20251220_204146

graph LR
    A[公网用户] --> B[云服务器<br>NPS服务端<br>端口: 7180, 7080等]
    B -- 通过加密隧道 --> C[内网机器<br>NPC客户端]
    C --> D[内网服务<br>如: 192.168.1.10:8080]
    D --> C
    C -- 返回响应数据 --> B
    B --> A

四、 准备工作

  1. 一台云服务器:需要具有公网IP,配置要求不高(1核1G即可),操作系统推荐CentOS或Ubuntu。
  2. 一台内网机器:你需要暴露到公网的服务所在的电脑或服务器(如本地开发机)。
  3. 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
如果看到708071808024等端口处于监听状态,说明服务启动成功。 步骤 4: 访问Web管理后台 打开浏览器,访问 http://你的服务器IP:7080,使用配置的用户名和密码登录。 Web管理登录界面示意图
通过Web管理界面可以轻松管理所有客户端和隧道。
重要:确保你的云服务器安全组/防火墙已放行以下端口:7080(Web管理)、7180(HTTP代理)、7143(HTTPS代理)、8024(客户端连接)。

5.2 配置客户端

步骤 1: 在Web界面添加客户端登录Web管理后台,进入「客户端」页面,点击「新增」。
  • 备注:填写一个易于识别的名称,如我的办公电脑
  • 唯一验证密钥:系统会自动生成一个密钥(如pc8jnp6f7mv1ww81),请务必记下,这是客户端连接服务端的凭证。
添加客户端界面示意图: 

局部截取_20251220_204445

 
为客户端设置一个备注名,并保存好自动生成的唯一验证密钥。 步骤 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隧道为例:
  1. 在Web管理台,进入「TCP隧道」页面,点击「新增」。
  2. 客户端ID:选择刚刚上线的那个客户端。
  3. 服务端端口:填写一个云服务器上未被占用的端口,例如9909。外部用户将通过这个端口访问内网服务。
  4. 目标(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在速度、稳定性、安全性和功能性上都有巨大优势,非常适合开发者和运维人员。
posted @ 2025-12-20 20:49  东峰叵,com  阅读(390)  评论(0)    收藏  举报