跳转到主要内容

让桥接、站点与管理端共用一个端口

在端口受限的网络中,让 NPC 桥接、HTTP(S) 隧道和 Web 管理共用 TCP 端口

端口复用可以让明文 TCP 桥接、HTTP(S) 隧道入口和 Web 管理共用一个 TCP 端口,适合公网只允许开放少量端口的环境。NPS 会根据连接开头的协议特征分流。

服务端配置

以下示例共用 443:

bridge_type=tcp
bridge_port=443
http_proxy_port=443
https_proxy_port=443
web_port=443
web_host=admin.nps.example.com

重启 NPS,并把以下 DNS 记录都解析到服务端:

  • admin.nps.example.com:Web 管理。
  • 业务域名:HTTP(S) 隧道。

Web 管理依赖 HTTP Host 与 web_host 精确区分。使用 IP 或其他 Host 访问会进入业务 HTTP 入口,而不是管理端。

客户端连接

普通 NPC 仍连接同一个桥接端口:

./npc -server=nps.example.com:443 -vkey=客户端验证密钥

端口复用只基于 TCP。KCP 使用 UDP,TLS 桥接使用独立的 tls_bridge_port,不能按以上方式合并到复用端口。

限制与验证

  • Web 管理复用适用于明文 HTTP 识别;需要安全访问时,建议在受控网络/VPN 中使用,或让外层反向代理单独终止管理端 HTTPS。
  • HTTP 识别支持常用的 GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS 和 TRACE。依赖其他方法的首个请求应先实测。
  • 复用监听会绑定所有地址,需使用防火墙限制管理域名对应入口的访问来源。
  • 修改任一端口或 web_host 都需要重启 NPS。

重启后分别验证 NPC 上线、业务 HTTP、业务 HTTPS 和管理域名,不能只检查端口处于 LISTEN:

curl -I -H 'Host: admin.nps.example.com' http://127.0.0.1:443/
curl -I -H 'Host: app.example.com' http://127.0.0.1:443/