前言

——本文旨在探讨如何自建内网穿透服务,将对比多种自建方案的优劣,并详细演示如何利用NPS这一高性能工具,搭建一个稳定、高速(百兆带宽)的私有内网穿透服务

最近想要把家里的一些服务映射出去(详见我的 这篇文章),而市面上现成的 FRP 提供商又有普遍带宽过小的原因(例如 SAKURA FRP 即使是最高的付费套餐也仅有 30M 带宽可用),所以,一个自建的穿透服务就显得很必要了。更何况现在许多运营商都在试图回收用户的公网 IP。

而本文将从服务器选购到 NPS 部署、配置详细地说明这套方案。

# 本文仅包含 Linux 的服务端安装教程,若您需要运行服务端在其它设备上(如树莓派)请找到对应教程

为什么自建内网穿透

虽然直接购买 FRP 服务可能也是一个好方案,但是自建内网穿透服务将会更加灵活经济也更加可控。自建服务还有以下优点:

  • 数据走自己的服务器,隐私和安全更有保障。
  • 如果已有云服务器,后续只需支付服务器费用。
  • 可自由调整带宽、协议和访问策略。

为什么选择 NPS

  1. 自带可视化的 WEB 管理面板:所有配置——包括客户端连接、端口映射、域名解析、流量统计——都可以在网页上通过点击完成。你再也无需通过SSH连接服务器去反复修改和核对那些令人头疼的配置文件。
  2. 低资源、高性能:NPS使用Go语言编写,天生具有高并发和低资源占用的特性。在实际测试中,能够轻松跑满百兆带宽,CPU和内存消耗却非常低,而且, NPS 是全平台的——这意味着你可以在树莓派或低配VPS上稳定运行它,长期下来能节省不少服务器成本。
  3. 功能全面,一站式解决。
  4. 新手友好:如果你之前没有内网穿透的经验,那么NPS的上手难度远低于FRP。它的服务端和客户端配置都非常简单,几乎只需要填写服务器IP和一个验证密钥即可连接成功。这种简化的流程让技术背景不深的用户也能轻松搭建起属于自己的私有穿透服务。

是的,它不仅仅是一个端口映射工具,更是一个完整的强大的内网穿透服务平台:

  • TCP/UDP端口映射:最基础的功能。
  • HTTP/HTTPS反向代理:非常适合穿透Web服务。
  • SOCKS5代理:为客户端提供全局代理能力。
  • 内网域名解析:为不同服务绑定域名,通过不同域名访问内网不同机器,无需记忆端口。
  • 连接压缩和加密:保障数据传输的效率和安全性。
  • 详细的流量、连接数统计:方便你监控服务使用情况。

服务器的选购

这里选择了雨云,主要是因为它家的宁波 2H4G 200M 真的太吃香了,国内买雨云绝对错不了(除了价格有点小贵,还有海外地区有些拉跨)

雨云-新一代云服务提供商

截至 2025.8.19,雨云宁波地区机型价格如下:

  • 2H2G 100M:504/年
  • 2H4G 200M:571.2/年

若是觉得价格偏高,还可以看看其它地区的 NAT 机器,不过配置麻烦且带宽稍小。

下面附上我目前正在使用的 200M 机型的网络测试结果:

测试结果仅供参考

可以看到,服务器的带宽确实是有着190Mbps,没有虚标。只是跨运营商可能会被 QoS。

部署 NPS 服务端

介绍

NPS(Netpower Permanent Service) 是一款轻量级、高性能的内网穿透代理服务器/反向代理软件。的核心目标是帮助您轻松地从外部网络访问位于内网(如家庭或公司局域网)中的服务。此外还支持内网http代理、内网socks5代理p2p等,同时支持snappy压缩、站点保护、加密传输、多路复用、header修改等。支持web图形化管理,集成多用户模式。

不论您是想要开一个 MC 服务器,又或是想要将自己的端口映射到公网,又或是想要将内网的 HTTP(s) 服务暴露到公网,它都能满足你。

部署

程序需要使用如下两个端口:

  • 8080:管理面板端口
  • 8024:与程序通信端口

本文通过 Docker 部署。

由于是国内机器,所以安装 Docker 需要使用国内的源。所以可以使用以下脚本并按提示配置 CE 源及镜像源。

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

#了解更多请访问官方网站 https://linuxmirrors.cn

开始部署 NPS 服务端:

# 创建 /opt/nps 目录存放配置文件
mkdir /opt/nps

# 安装wget并且下载配置文件
yum install -y wget && wget https://img.zeruns.tech/down/conf.zip

# 解压配置文件到 /opt/nps 目录
unzip conf.zip -d /opt/nps

# 拉取 ffdfgdfg/nps 镜像
docker pull ffdfgdfg/nps

# 运行 nps 容器,配置文件夹 conf 在 /opt/nps/conf 目录下
docker run -d --name=nps --restart=always --net=host -v /opt/nps/conf:/conf ffdfgdfg/nps

# 查看日志
docker logs nps

安装后访问 IP:8080 即可进入管理面板。登陆后请尽快修改账号及密码。

修改 /opt/nps/conf/nps.conf 配置文件中的web_password!

设置

我们转到左栏的 客户端,然后新增,备注随意。这样就可以看见自己设置的客户端了。

安装 NPS 客户端

Windows 客户端

# 程序需要以服务形式运行。

Releases · ehang-io/nps 下载 tar.gz 文件。

在 C 盘新建一个 nps 文件夹,然后将 nps.exe 文件放置于这个文件夹内。随后我们需要以管理员身份运行 CMD。

  • Win+R 打开运行
  • 输入 cmd 后回车
  • Ctrl+Shift+Enter

然后在命令提示符内执行 cd /npc,这是移动到 nps 目录的意思。

回到管理面板,找到客户端命令:

随后执行:

npc.exe install -server......
# 后半段由框中命令组成

这样我们的npc就添加到系统服务里了,再找到 控制面板 - 管理工具 - 服务 里找到【nps内网穿透客户端】,找到【恢复】选项卡,按照下图中设置即可。设置完成后就可以启动服务了。

此时,所有设定就已结束了。

Linux 客户端

这里介绍 Docker 的安装方式。

确保你的机器上已安装了 Docker。

随后安装 NPS 客户端(NPC)

# 创建 /opt/nps 目录存放配置文件
mkdir /opt/npc

# 安装wget并且下载配置文件,可根据自己系统将yum替换为apt或其他
yum install -y wget && wget https://img.zeruns.tech/down/conf.zip

# 解压配置文件到 /opt/nps 目录
unzip conf.zip -d /opt/npc

# 拉取 ffdfgdfg/nps 镜像
docker pull ffdfgdfg/npc

# 运行 npc 容器,按提示改好命令,如下图所示
docker run -d --name=npc --restart=always --net=host ffdfgdfg/npc -server=<ip:port> -vkey=<web界面中显示的密钥> <以及一些其他参数>

# 查看日志
docker logs npc

建立隧道

我们转到左栏的建立隧道,这里有很多种隧道,您需要依照实际情况来选择建立的隧道类型。

  • TCP 隧道:用于穿透 TCP 协议的流量,例如 Minecraft Java版(或者转发 HTTP 流量)
  • UDP 隧道:UDP 流量,例如 Minecraft 基岩版
  • HTTP 代理:代理 HTTP(S) 流量,一般用于建站
  • SOCKS 代理:一般用于 SS 连接,或是 VPN 等使用场景

这里是一些隧道穿透的基本设置及其概念:

  • 客户端 ID:字面意思,你想选择的客户端
  • 服务端端口:即外部端口,外部流量要想访问必须访问这个端口,端口可以自定义
  • 目标:客户端上需要被穿透的服务地址,一般是 127.0.0.1:<端口>

验证服务及带宽测试

基础连通性测试

找到一台电脑,打开命令提示符或终端,输入:

telnet <你的服务器IP> <你映射的端口号>
# 示例:telnet 123.123.123.123 5000
  • 如果窗口变黑或出现光标闪烁:TCP端口映射成功,连接已建立。
  • 如果提示“无法打开到主机的连接”或长时间等待后失败:说明连接失败。请返回检查NPS客户端配置、服务器防火墙和安全组设置。

网络测试

推荐使用最真实的文件下载方式来检验速度。这是最可靠的方法。在内网设备上准备一个较大的文件(如一个ISO系统镜像或视频文件,几百MB到1GB),然后从外部网络尝试下载它。观察浏览器或下载工具的实际速度。

# 注意:此时单位可能是 MB/S,但是服务器带宽单位是 M(即 Mbps),需要自行换算一下(1 MB/S = 8M)

# 注意:这样的测试结果虽然是最真实的,也就是你实际的访问速率,但这并不能直接代表服务器带宽大小。因为这是你经过层层路由转发再到达服务器得到的结果。如果你需要判断服务器带宽大小请务必使用Speedtest CLI等专业工具,这些专业工具得到的结果才是服务器真实带宽。

# 所以,建议您在选购服务器时,优先选择离自己地理位置近的、同运营商网络的机器。

常见问题及排查

Q:客户端显示在线,但端口就是不通?

  • A1:检查服务器防火墙:确保你的云服务商(阿里云、腾讯云等)的安全组和服务器本身的防火墙(iptables/ufw) 已经放行了你所使用的端口。
  • A2:检查目标服务:确认你内网中需要被访问的服务(如NAS、Web服务器)本身运行正常,并且监听了正确的IP(通常是0.0.0.0)和端口。

Q:之前用得好好的,突然无法连接了?

  • A1:客户端掉线:检查客户端机器是否重启或休眠。确保NPS客户端进程已配置为系统服务(如systemd服务)并设置了开机自启。
  • A2:服务器重启:同样,确保NPS服务器端进程已设置为开机自启。
  • A3:IP地址变化:如果你使用DDNS而非固定IP,检查域名解析是否正确。

Q:速度非常慢,远达不到预期?

  • A1:服务器带宽瓶颈:回顾之前的速测试方法,确认你的服务器上行带宽是否充足。
  • A2:线路问题:你的服务器与你所在地区的网络线路质量可能不佳。可以尝试使用pingtracert(Windows)/traceroute(Linux)命令测试到服务器的延迟和路由跳转,看看是否存在明显延迟或丢包。

Q:Web管理界面无法访问?

  • A1:端口冲突:检查NPS服务器配置文件中 web_port 指定的端口是否被其他程序占用。
  • A2:配置文件修改后未重启:修改 nps.conf 后,必须重启NPS服务才能生效。

版权申明