故障排查¶
常见问题¶
连接被拒绝或超时¶
症状: nps-ctl 命令在连接 edge 时报连接错误。
解决方案:
- 检查
edges.toml中的api_url是否正确,且包含协议前缀(https://)。 - 确认 edge 服务器上的 NPS 服务正在运行:
- 确认 Web UI 端口(默认 25412)可达。如果 NPS 绑定在
127.0.0.1,需要确保反向代理(如 Caddy)正确转发到该端口。 - 检查防火墙规则——API 端口必须开放或通过代理转发:
认证失败¶
症状: API 请求返回 401 或 "auth error" 响应。
解决方案:
- 检查
edges.toml中的auth_key是否与服务器上/etc/nps/conf/nps.conf中的auth_key一致。 - 确认
edges.toml中的auth_crypt_key与服务器端的auth_crypt_key完全匹配(必须恰好 16 个字符)。 - 使用新版 API(v0.35.0+)时,检查
username和password是否与服务器的web_username和web_password一致。 - 如果使用
api_mode = "auto",可以尝试显式设置为"legacy"或"modern",以排除自动探测失败的可能。
SSL 证书错误¶
症状: 请求因 SSL/TLS 验证错误而失败。
解决方案:
- 在测试环境中使用自签名证书时,可以加上
--no-ssl-verify参数: - 在生产环境中,应修复服务器上的证书链。如果使用 Caddy 配合 ACME,请确认域名解析正确且 ACME 验证能够成功。
警告
--no-ssl-verify 会完全禁用证书验证。请勿在生产环境中使用——应当修复根本的证书问题。
客户端未连接¶
症状: client list 显示客户端处于断开状态,或主机映射返回 502 错误。
解决方案:
- 检查客户端机器上的 NPC 服务是否正在运行: 或者直接通过 SSH 查看:
- 确认 edge 服务器的防火墙已放行桥接端口:
- 查看 NPC 日志中是否有连接错误:
- 确保客户端的
vkey与 edge 上注册的一致。使用client list -e <edge>来验证。
找不到配置文件¶
症状: 启动时报 No configuration file found 错误。
解决方案:
- 创建配置目录和文件:
- 或者显式指定配置文件路径:
- 检查文件是否为合法的 TOML 格式。常见错误是使用了
[edges.name]表语法,而不是[[edges]]数组语法。
Edge 安装静默失败¶
症状: edge install 执行完毕没有报错,但 NPS 并未运行。
解决方案:
- 使用详细输出模式运行安装命令,查看详细信息:
- 确认二进制文件已部署到位:
- 检查 systemd 服务文件是否存在:
- 查看服务日志中是否有启动失败的信息:
提示
安装流程在 nps-ctl v0.7.0 中得到了改进,增加了回退 systemd 服务文件和严格的验证检查。如果你使用的是更早的版本,建议先升级 nps-ctl。
主机映射不生效¶
症状: 域名解析正确,但返回 502 Bad Gateway 或无响应。
解决方案:
- 确认客户端已在该主机映射所在的 edge 上保持连接:
- 验证 DNS 解析到了 edge 服务器的 IP:
- 检查主机映射的目标是否正确(服务必须在客户端机器的指定端口上监听):
- 在客户端本地测试服务是否正常:
- 如果在 NPS 前面使用了 Caddy,请确认 Caddyfile 将该域名代理到了 NPS HTTP 代理端口(默认 30080)。
调试日志¶
nps-ctl 提供两个级别的详细输出:
这些参数是全局的,适用于任何子命令。调试输出包含完整的 HTTP 请求/响应过程,对于排查 API 相关问题非常有用。
常见问答¶
应该使用哪个 NPS 分支?¶
推荐使用 djylb/nps。原始的 ehang-io/nps 自 2021 年起已停止维护。djylb 分支仍在活跃开发中,包含安全修复,并新增了新版 API(v0.35.0+)等功能。nps-ctl 针对 djylb/nps 进行测试。
nps-ctl 能同时管理 NPS 和 NPC 吗?¶
可以。edge 命令组用于管理 NPS 服务端节点(安装、升级、重新配置、同步、导出)。client 命令组用于管理 NPC 客户端(安装、升级、重新配置、状态查看、重启)。两者均通过 SSH 操作,使用配置文件中的 ssh_host 字段。
nps-ctl 兼容原始的 ehang-io/nps 吗?¶
旧版 API 是兼容的,因此基本操作(列出客户端、隧道、主机映射;添加和删除条目)应当可以正常工作。但 ehang-io/nps 已停止维护,可能存在未修复的安全问题。新版 API 字段(username、password、platform_token、api_mode)是 djylb/nps v0.35.0+ 专有的。
如何生成 auth_key?¶
使用内置工具:
只有一个 edge 时能使用 nps-ctl 吗?¶
可以。在 edges.toml 中定义一个 [[edges]] 块即可,所有命令的使用方式完全一样。多 edge 功能(同步、广播)只是没有额外的目标节点而已。