前置条件
一台具有固定公网IP地址、可以配置安全组的服务器,且已安装docker compose服务
足够的服务器带宽,建议≥5Mbps
(可选)可进行域名解析的服务器,以便于通过域名访问管理的web端
项目来源
NPS原版项目地址:https://github.com/ehang-io/nps
NPS优化二开项目地址:https://github.com/yisier/nps/
NPS优化二开项目文档:https://yisier.github.io/nps/
因NPS原版项目于2021年4月8号发布 v0.26.10 以后就没有更新,所以有热心大佬基于NPS原版项目进行额外维护,修复了原版项目的严重bug,优化了使用配置流程。以下安装都基于NPS优化二开项目进行配置。
安装配置
服务端是基于一台安装Rocky Linux 9的阿里云ECS服务器(主要用于运行NPS服务),一台已备案的安装Ubuntu 24.04LTS、宝塔面板的腾讯云服务器(主要用于域名解析),个人域名解析在腾讯云配置
受控客户端是一台Windows11的电脑
核心逻辑:先建立目录结构 -> 初始化防崩溃数据库文件 -> 编写配置文件 -> 启动容器。
1.准备工作
从 https://github.com/yisier/nps/releases 下载同一个版本下的服务端和客户端代码,以当前安装环境为例,应该下载的文件是
服务端文件名称:linux_amd64_server.tar.gz
客户端文件名称:windows_amd64_client.tar.gz
2.阿里云ECS服务器
登录阿里云的ECS服务器,切换成root账户登录
1. 初始化目录与数据库
# 1. 创建项目主目录 (建议放在 /opt 或 /data 下 , 这里以 /opt 为例)
mkdir -p /opt/nps/conf
# 2. 进入配置目录
cd /opt/nps/conf
# 3. 初始化核心数据库文件 (至关重要!)
# clients.json: 存储所有客户端(NPC)的验证密钥、备注等信息
echo "[]" > clients.json
# tasks.json: 存储所有隧道(TCP/UDP)的端口映射规则
echo "[]" > tasks.json
# hosts.json: 存储域名解析规则 (如果不使用泛域名解析,此文件为空但也必须存在)
echo "[]" > hosts.json
2. 创建核心配置文件 (nps.conf)
# 在 /opt/nps/conf 目录下创建
vi nps.conf
nps.conf 详细配置内容:
# --- 基础配置 ---
appname = nps
# 运行模式:dev(开发) 或 pro(生产),dev 模式下日志更详细
runmode = dev
# --- 核心通信端口 ---
# [重要] 客户端(NPC)连接服务端的端口
# 需要在云服务器防火墙放行此端口 (TCP)
bridge_port=7001
# --- Web 管理后台配置 ---
# Web 管理界面访问端口 (如 http://IP:8080)
# 需要在云服务器防火墙放行此端口 (TCP)
web_port=7002
# Web 界面登录用户名
web_username=admin
# [必改] Web 界面登录密码 (请务必修改为强密码)
web_password=DTWjgeQ74Nu9RM8nP8AD
# --- 端口防冲突配置 ---
# 为了防止 NPS 占用了服务器原本的 80/443 端口 (通常被 Nginx/1Panel 占用)
# 我们将 NPS 的 HTTP 代理端口改为非常规端口
http_proxy_port=7003
https_proxy_port=7004
# 绑定 IP,0.0.0.0 代表允许所有外网连接
bridge_ip=0.0.0.0
# --- 高级限制与鉴权 ---
# 最大并发隧道数量
max_tunnel_num=100
# 最大客户端连接数
max_client_num=50
# 默认的公共连接密钥 (通常用不上,我们在网页端为每个客户端单独设置 vkey)
public_vkey=123
# 是否允许在 Web 界面进行用户注册 (个人使用建议关闭,更安全)
allow_user_login=false
allow_user_register=false
# --- 端口开放范围 ---
# 限制网页上可以随意开启的端口范围,防止误占用系统端口
allow_ports=900-65500
数据交互端口:7001(主要服务端口)7002(web管理后台端口)7003(http代理端口)7004(https代理端口)
web管理后台的登录用户名和密码是web_username、web_password的配置项
3. 编写 Docker Compose
# 回到项目主目录 /opt/nps
cd /opt/nps
vi compose.yml
compose.yml 内容:
services:
nps:
# 使用社区维护的活跃镜像,替代原版 ffdfgdfg (已停更)
image: yisier1/nps
container_name: nps
restart: always
# [核心配置] Network Mode: Host
# 容器直接共享宿主机(云服务器)的网络栈。
# 优势:
# 1. 性能最好,没有 NAT 损耗。
# 2. 网页后台新增端口映射时,无需修改 compose 文件,无需重启容器,立即生效。
network_mode: host
volumes:
# 将宿主机的配置目录挂载到容器内部
# 包含了 nps.conf 和我们刚才初始化的 json 数据库
- ./conf:/conf
4. 启动
# 启动服务
docker-compose up -d
# 查看日志 (确认无报错)
docker logs -f nps
3.阿里云防火墙配置
以上 nps.conf 配置的端口需要在阿里云防火墙上打开授权,否则会访问不通。
提前规划自己需要的端口,其中上面nps.conf已经用到的服务必须端口:7001(主要服务端口)7002(web管理后台端口)7003(http代理端口)7004(https代理端口),这些是必须要开启的
同时自己需要给每个受控客户端分配端口,比如我给我的未来受控端分配的端口是7011-7020,下面就会进行配置
阿里云控制台–>云服务器 ECS–>选择自己的ECS服务器–>进入之后选择安全组–>选择绑定的安全组,如果有多个选任一即可
入方向–>增加规则
| 配置类型 | 自定义配置 |
| 授权策略 | 允许 |
| 优先级 | 1 |
| 协议 | 自定义TCP |
| 访问来源(ipv4) | 0.0.0.0/0任何位置 只有这样能保证在任何网络下都能够连接和访问对应端口 |
| 访问目的(端口) | 可以用 / 表示端口起止范围,如果有多条,可以以数字逗号隔开 eg:7001/7004,7011/7011 或者更宽泛一些 7000/7020 |
| 描述 | NPS服务端口 |
点击提交即可
4.腾讯云服务器
1. DNS域名管理
进入域名解析界面,新增一条 Web管理后台域名 nps.tutuspring.com 的解析A记录,A记录的地址指向当前腾讯云服务器
2. 登录宝塔面板,网站–>PHP项目–>添加站点
| 域名 | nps.tutuspring.com |
| PHP版本 | 纯静态 |
3. 点击新创建的站点
点击SSL,配置对应的SSL证书
点击反向代理,添加反向代理,打开高级功能
| 代理名称 | nps |
| 代理目录 | / |
| 目标URL | http://<阿里云ecs服务器公网IP地址>:7002 eg:http://182.92.118.102:7002 |
| 发送域名 | 182.92.118.102 |
4. 测试管理界面打开是否正常
访问 https://nps.tutuspring.com 即可登录nps的管理web端,用户名和密码为之前在nps.conf配置文件里面配置的,建议登陆以后第一时间修改密码,登录后查看“仪表盘”界面的显示信息是否和配置的一致
5.NPS的Web管理后台
登录 https://nps.tutuspring.com 网站
1.新增客户端
左侧列表 客户端–>新增
| 备注 | 一般为设备名 eg:UM880Pro |
| Basic 认证用户名 | 保持默认 |
| Basic 认证密码 | 保持默认 |
| 唯一验证密钥 | 保持默认 |
| 允许客户端通过配置文件连接 | 是 |
| 启用IP白名单 | 否 |
| IP黑名单(防暴力破解) | 保持默认 |
| 到期时间 | 保持默认 |
点击新增后
2.新增隧道
在客户端列表页,点击刚刚新增记录的最右侧的 隧道 按钮 –> 进入隧道列表 –> 新增
| 模式 | TCP隧道 |
| 客户端 ID | 不用修改,查看是否是自己刚刚添加的客户端即可 |
| 备注 | 根据用途填写,用来标识该端口的作用 eg: MSTSC |
| 服务端端口(留空自动生成) | 阿里云服务器的端口,需要在ECS防火墙上打开该端口,如果使用内网穿透的服务比较多,建议创建表格进行记录和梳理 eg:7011 |
| 目标 (IP:端口) | 需要内网穿透电脑的IP地址,如果是客户端当前电脑,IP可以直接填写127.0.0.1,端口写自己需要透传的端口,3389是Windows远程连接的默认端口 eg:127.0.0.1:3389 |
| Proxy Protocol Version | 建议留空,不要设置。 |
点击新增。
3.复制启动命令
点击左侧菜单栏的“客户端”,在展示的客户端列表中,点击刚刚添加的客户端所属行前面的加号,展出的详情里面,点击“快捷启动命令”后面的复制按钮
6.受控端-Windows客户端
登录受控端Windows电脑,检查电脑的远程连接开关已开启,当前电脑账户的登录密码已设置,能够在锁屏后输入密码进行登录。
在非系统盘(即非 C 盘)下创建一个路径没有空格(不能是Program Files、Program Files (x86)这样的目录)的npc文件夹
在电脑D盘下,创建 D:\GreenSoft\npc 目录,并在npc目录下,把上面的客户端 windows_amd64_client.tar.gz 移动到当前目录并解压,删除冗余的压缩包后,D:\GreenSoft\npc 目录仅需要留 npc.exe文件即可
右键点击npc.exe,选择“以管理员权限运行”,在出现的黑窗口根据显示内容,输入 1,然后粘贴在Web后台管理复制的“快捷启动命令”的那串字符串,回车。没有报错信息后,就可以输入 0 关闭,或者直接关闭黑窗口。
7.测试连接端
1. 测试设备是Windows时,使用的客户端可以是Windows自带的RDP客户端,如果需要远程连接多个电脑,建议下载并安装开源工具1Remote,下载地址:https://github.com/1Remote/1Remote/releases
2. 远程连接设备是IOS时,需要去 Apple应用商店下载 Windows App mobile(原先的远程桌面)
3. 远程连接设备是Android时,暂时没有测过。
连接填写内容:
| 地址 | <阿里云ECS服务器的公网地址> eg:182.92.118.102 |
| 端口 | <需要访问的受控端,对应的端口> eg:7011 |
| 用户名 | <受控端电脑的登录用户> |
| 密码 | <受控端电脑的登录密码> |
FAQ
1.远程访问以后,可以连接,但会每隔几秒出现断连情况
检查受控电脑启动的后台程序,有没有流量过滤的软件,此类软件有Adguard、火绒、clash翻墙软件等,他们对于流量会进行二次处理,进而影响连接的稳定性。
如果受控电脑安装了Adguard客户端 v8.0+,需要设置下面两个地方才能使内网穿透功能稳定
1. Adguard客户端–>应用管理–>搜索npc–>找到受控端电脑的npc,点击配置–>关闭通过 AdGuard 路由流量、关闭过滤流量、关闭过滤 HTTPS 流量
2. 如果在nps的Web管理后台,其中隧道–>目标(IP 端口) 填写了127.0.0.1,就涉及到了本地回环问题
设置–>应用设置–>高级设置–>关闭 过滤localhost连接
重新启动Adguard,然后再次进行连接即可
参考连接:
https://www.lvtu.site/archives/nps-fu-wu-duan-bu-shu NPS 服务端部署 docker
https://www.lvtu.site/archives/npc-ke-hu-duan-bu-shu NPC 客户端部署 docker
https://github.com/1Remote/1Remote
https://github.com/yisier/nps/
https://yisier.github.io/nps/
https://github.com/ehang-io/nps


暂无评论内容