NPC连接双NPS服务器离线自动切换
一、NPS 双服务端高可用配置步骤
1、确认服务端环境
假设您有两台 NPS 服务端:
| 服务器 | 公网IP | 服务端口 | Web 管理端口 |
|---|---|---|---|
| Server A | 203.0.113.10 | 8024 | 8080 |
| Server B | 203.0.113.20 | 8024 | 8080 |
关键前提:
两台服务端需使用相同的 vkey(在 nps.conf 中配置)
防火墙已放行 8024 端口(客户端连接端口)
2、 配置客户端(/root/nps/npc.conf)
修改客户端配置文件(核心步骤)
sudo nano /root/nps/npc.conf
#关键配置(支持双服务端故障转移):
[common]
server_addr=203.0.113.10:8024,203.0.113.20:8024 # 用逗号分隔多个服务端
vkey=your_secure_vkey # 必须与两台服务端的 nps.conf 一致
daemon=true # 后台运行
#高可用参数
conn_type=tcp
retry_time=3 # 连接失败后重试间隔(秒)
retry_count=3 # 单次重连尝试次数
auto_switch=true # 自动切换到可用服务端
必须检查:
vkey 值需与 两台服务端 的 nps.conf 中 vkey 完全一致
服务端 IP 顺序:优先连接第一个 IP,失败后自动切第二个
3、服务端配置验证(两台服务端均需检查)
确保 nps.conf 包含:
[vkey]
vkey = your_secure_vkey # 与客户端配置一致
重启服务端使配置生效
4、Server A 和 Server B 均执行
cd /root/nps
sudo ./nps stop
sudo ./nps start
二、客户端服务化配置(开机自启)
1、创建 Systemd 服务
执行以下指令创建Systemd服务
sudo tee /etc/systemd/system/npc.service <<‘EOF’
[Unit]
Description=NPS Client Service
After=network.target
[Service]
User=root
WorkingDirectory=/root/nps
ExecStart=/root/nps/npc -config=/root/nps/npc.conf
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
2、启用服务
sudo systemctl daemon-reload
sudo systemctl start npc
sudo systemctl enable npc
sudo systemctl status npc # 验证状态
三、高可用功能验证
1、模拟服务端故障
在 Server A 上临时关闭服务端
cd /root/nps
sudo ./nps stop
2、检查客户端自动切换
实时监控客户端日志
tail -f /root/nps/logs/npc.log
成功标志:
/06/02 08:15:01.000 [INFO] Connecting to server 203.0.113.20:8024…
/06/02 08:15:01.200 [INFO] Connected to server 203.0.113.20:8024
客户端会在 retry_time × retry_count 时间内自动切换到备用服务端(本例:3秒×3次=9秒内切换)
四、关键故障排查
1、问题现象:客户端只连接第一个服务端,不自动切换
原因及解决方案:
| 现象 | 原因 | 解决方案 |
|---|---|---|
日志显示 connect: connection refused 但未切换 | auto_switch=false | 确保 npc.conf 中 auto_switch=true |
| 切换后隧道中断 | 服务端 vkey 不一致 | 检查两台服务端 nps.conf 的 vkey 值 |
| 重连超时过长 | retry_time 设置过大 | 调整为 retry_time=2(建议2-5秒) |
2、快速诊断命令:
检查客户端当前连接的服务端
grep “Connected to server” /root/nps/logs/npc.log | tail -1
3、强制触发重连测试
sudo pkill -f npc && sudo systemctl start npc
五、生产环境建议
1、服务端负载均衡:
在客户端配置中添加权重(NPS v3.26.0+ 支持):
server_addr=203.0.113.10:8024#1,203.0.113.20:8024#2 # #后数字=权重(值越大优先级越高)
2、健康检查增强:
在 npc.conf 中添加:
health_check_interval=10 # 每10秒检查服务端存活
health_check_timeout=3 # 超时3秒判定为故障
3、避免单点故障:
两台服务端必须部署在不同物理机/可用区
使用 DNS 轮询(如 nps.example.com 解析到两个IP),但 NPS 客户端不支持 DNS 轮询,仍需在 server_addr 中显式写 IP
3、最后验证清单
客户端配置:/root/nps/npc.conf 包含 多个服务端IP+auto_switch=true
两台服务端 nps.conf 的 vkey 完全一致
执行 systemctl status npc 显示 active (running)
手动停止主服务端后,客户端 9秒内自动切换到备用服务端(根据 retry_time×retry_count)
通过 npc.log 确认隧道流量正常传输
4、重要提醒:
操作路径是 /root/nps/,所有命令必须针对 NPS 工具链(nps/npc)
当前配置需按 NPS 双服务端配置 处理,第二台VPS服务器仅作为备用,而非负载均衡;
执行后, npc 客户端将实现双 NPS 服务端的高可用连接。
可使用域名代替IP地址配置NPC的服务器地址,在客户端较多时,且服务器变更ip可以不用修改大量客户端配置文件: server_addr=abc1.com:8024,abc2.com:8024
如仍有问题,执行日志监测:
cat /root/nps/npc.conf | grep -E “server_addr|vkey|auto_switch”
tail -20 /root/nps/logs/npc.log















