跳转到主要内容

让 NPC 通过 HTTP 或 SOCKS5 代理连接 NPS

在 NPC 无法直连外网时通过上游 HTTP 或 SOCKS5 代理建立 TCP 桥接

当 NPC 所在网络只允许通过企业代理访问外部地址时,可以让 NPC 先连接上游 HTTP 或 SOCKS5 代理,再由代理连接 NPS 的桥接端口。

这里配置的是 NPC 出站代理,不是对外提供 HTTP 正向代理或 SOCKS5 隧道。

命令行启动

SOCKS5 代理:

./npc \
  -server=nps.example.com:8024 \
  -vkey=<客户端验证密钥> \
  -type=tcp \
  -proxy=socks5://proxy-user:proxy-password@127.0.0.1:1080

HTTP 代理:

./npc \
  -server=nps.example.com:8024 \
  -vkey=<客户端验证密钥> \
  -type=tcp \
  -proxy=http://proxy-user:proxy-password@127.0.0.1:3128

代理不需要认证时,可省略 proxy-user:proxy-password@。用户名或密码包含 @、:、/ 等 URL 保留字符时,必须先做百分号编码。命令行参数可能被同一主机的其他用户从进程列表看到,长期运行时建议改用权限受限的配置文件。

npc.conf 配置

在 [common] 中设置 proxy_url:

[common]
server_addr=nps.example.com:8024
vkey=<客户端验证密钥>
conn_type=tcp
proxy_url=socks5://proxy-user:proxy-password@127.0.0.1:1080

限制配置文件只能被运行 NPC 的账号读取。Linux 上可使用:

chmod 600 /etc/nps/npc.conf

代理端必须允许的连接

  • HTTP 代理必须支持 CONNECT nps.example.com:8024 并返回 200。只允许浏览器访问 80/443 的代理可能拒绝 NPS 桥接端口。
  • SOCKS5 代理必须允许连接 NPS 的主机名和 TCP 桥接端口。
  • NPS 所在主机的安全组和防火墙仍需放通桥接端口,来源地址通常显示为上游代理的出口地址。

限制与安全边界

  • 出站代理只用于 conn_type=tcp 或 -type=tcp。KCP 使用 UDP,不会经过这个 HTTP/SOCKS5 代理参数。
  • 通过代理建立通道后,tls_enable=true 会继续执行到 NPS 的 TLS 握手和证书校验;应连接 TLS 桥接端口(通常为 8025),并按桥接证书与身份验证 配置 CA 或公钥指纹。
  • HTTP CONNECT 和普通 SOCKS5 连接本身不提供端到端加密。未启用 TLS 桥接时,代理能够读取桥接数据。
  • 不支持 PAC 脚本或自动读取操作系统代理,必须显式填写代理 URL。

验证与排障

  1. 先在 NPC 主机上验证代理端口可达,再启动 NPC。
  2. 检查 NPC 日志是否出现 Successful connection with server,并在 Web 管理中确认客户端在线。
  3. HTTP 代理返回 proxy CONNECT failed: 403 或类似错误时,请检查 CONNECT 目标端口策略和代理认证信息。
  4. 代理连接成功但验证失败时,检查 NPS 地址、桥接端口和客户端验证密钥,不要将上游代理密码与 NPS vkey 混淆。