VpnHood!

设置服务器 IP 地址

访问密钥用于指示客户端应用连接的目标地址。服务器通常会自动解析该地址,但如果设备拥有多个 IP 地址,您可能需要手动设置:包括服务器监听的地址,以及写入密钥中的连接地址。

服务器如何自动获取地址

默认情况下,服务器会监听本机的所有 IP 地址,使用 TCP 端口 443。

对于访问密钥中的地址,服务器会通过自身的出站流量自动查询:请求外部 Web 服务以获取出站公网 IP。对于托管服务器,VpnHood! MANAGER 会通过 Automatic Configuration 执行相同操作,并自动同步接入点。所有新建服务器默认开启此功能。

这种方式在大多数设备上都能正常工作。但在以下情况下,需要手动设置:

  • 设备的实际出站 IP 与客户端连接的 IP 不同(例如配置了独立出站 IP),此时自动查询获取的是出站 IP。
  • 设备拥有多个公网 IP 地址,且您希望访问密钥使用指定的某一个 IP。
  • 自动查询失败(例如设备无法访问外部 Web 服务)。此时独立服务器将无法启动,并在日志中记录 PublicEndPoints has not been configured properly.。

在受管服务器上

在 VpnHood! MANAGER 中打开 Servers,选择服务器并找到其 Access Points。每个接入点代表服务器的一个地址及其端口。

关闭自动配置时,VpnHood! MANAGER 中服务器的接入点列表
新地址 203.0.113.10 会写入密钥中。旧地址 198.51.100.20 不会写入,但服务器仍会监听该地址,以便使用旧密钥的应用连接。

若要自行设置,请关闭 Automatic Configuration:开启时无法更改列表。MANAGER 会提示您确认,因为服务器将使用新设置重启。

通过两项设置来指定每个地址的用途:

  • Mode 决定谁能获取该地址。PublicInToken 会将其写入服务器集群的每个访问密钥中。Public 则不写入密钥,MANAGER 仅在将应用调度到该服务器时才提供。Private 则绝不提供给应用。
  • Listen 决定服务器是否监听该地址。仅当服务商已将该地址路由到此设备时,才设为 Yes:在 Linux 上,服务器会自动将设备原本没有的监听地址添加到网络中。

UDP Port 和 QUIC Port 为选填项,填入 -1 可关闭对应端口。

在仅有内网 IP 的云服务器上(如 AWS、Google Cloud、Azure 或 Oracle Cloud),请使用相同端口添加两项:内网 IP 设为 Mode Private 且 Listen Yes;公网 IP 设为 PublicInToken 且 Listen No。Automatic Configuration 也会自动完成此配置。

若要检查,请打开服务器集群页面:其 Access Points 下会列出密钥中包含的所有地址。

在独立服务器上配置

服务器从 /opt/VpnHoodServer/storage/appsettings.json 读取配置。全新安装后该文件并不存在:创建该文件后,服务器将优先使用其中的配置。在 FileAccessManager 下有两个配置项控制地址:

  • TcpEndPoints:指定服务器监听的地址和端口。
  • PublicEndPoints:指定写入访问密钥的地址和端口。此处必须填写实际可访问的公网地址;填入 0.0.0.0 或 [::] 会导致服务器无法启动。

完整配置文件示例:服务器监听所有地址,并在密钥中使用 203.0.113.10

{
  "FileAccessManager": {
    "TcpEndPoints": [ "0.0.0.0:443", "[::]:443" ],
    "PublicEndPoints": [ "203.0.113.10:443" ],
    "SslCertificatesPassword": null
  },
  "ServerConfig": {
    "LogAnonymizer": true,
    "AddListenerIpsToNetwork": "*"
  },
  "LogLevel": "Information"
}

若仅需监听特定地址(例如使用独立出站 IP),请将该地址同时填入 TcpEndPoints。在非 Docker 环境下,如果系统尚未绑定该监听地址,服务器会自动将其添加到网络接口中。

如果同时启用了 UdpEndPoints 或 QuicEndPoints,请为它们配置与 TCP 相同的地址。

在仅分配内网 IP 的云服务器上(如 AWS、Google Cloud、Azure 或 Oracle Cloud),请监听内网地址或所有地址,并将公网 IP 填入 PublicEndPoints。

修改后,使用 sudo systemctl restart VpnHoodServer 重启服务器(Docker 环境请使用 sudo docker restart VpnHoodServer)。可通过 vhserver gen 生成测试密钥进行验证:HostEndPoints: 一行会显示密钥中包含的地址。

已分发的密钥处理

密钥包含生成时指定的地址,因此持有旧密钥的应用会继续尝试连接旧地址。应用每次连接都会自动获取最新密钥,因此更改后请让服务器继续监听旧地址几天,然后再将其移除。

在受管服务器上,将其保留为接入点,并设为 Mode Private 与 Listen Yes:由于 Push token to clients 默认开启,应用会自动获取新密钥。在独立服务器上,只需将旧地址保留在 TcpEndPoints 中即可。

如果应用已无法连接旧地址,则需要重新获取新密钥。若绑定了域名并配置了 CA 证书,密钥就能通过 DNS 解析获取新地址,IP 变更也不会导致连接中断。

后续步骤