VpnHood!

通过域名连接

默认情况下,服务器使用自签名证书且访问密钥直连 IP 地址。绑定自定义域名并配置受信任的 CA 证书后,所有连接将伪装成常规网站访问,隐蔽性更强。

绑定域名的优势

配置后生成的访问密钥将包含该域名。客户端连接时会解析域名并像浏览器一样校验服务器证书。即使服务器更换 IP 地址,只需更新域名解析,现有密钥即可继续使用。

访问密钥中依然保留服务器的 IP 地址。若客户端暂时无法解析域名,会自动回退通过 IP 正常连接。

准备工作

  • 一个由您控制的域名或子域名,例如 vpn.example.com。请使用具体域名,不支持泛域名。
  • 将域名解析到服务器连接 IP 的 DNS 记录:配置 A 记录,若服务器支持 IPv6 则同时配置 AAAA 记录。必须直接解析到服务器,切勿开启 CDN 代理。
  • 若使用托管服务器,在使用该域名期间须始终开放 TCP 端口 80:用于初次签发及后续每隔数月的证书自动续期验证。

在托管服务器上配置

  1. 在 VpnHood! MANAGER 中,依次打开 Server Farms 与目标集群。在 SSL / TLS Certificates 下点击 Add,在 Domain Name 中输入域名并选择 Create。MANAGER 会为其创建自签名证书并打开详情页。
  2. 编辑 Signing 并选择 AutoSign。MANAGER 将向 Let's Encrypt 申请证书,并通过服务器的 TCP 端口 80 验证域名。完成后,Signature 将显示为 CA Signed,且 MANAGER 会在证书到期前自动续期。
  3. 随后编辑 Visibility 并选择 PublicInToken。该集群的所有密钥将自动包含此域名,集群原有的证书状态将变为 Public。

此后从 MANAGER 复制的新密钥都将包含该域名。由于 Push token to clients 默认开启,使用旧密钥的应用在连接时会自动同步新配置。在此之前请保留旧证书,否则旧密钥将无法连接。

若验证失败,Signing 会显示失败原因,多次重试失败后将自动切回 Manual。修复 DNS 记录或开放对应端口后,重新选择 AutoSign 即可。

如需确认配置,打开集群详情:在 Access Points 列表中,该域名将排在首位。

单个服务器页面也有 SSL / TLS Certificates 列表。此处的证书仅对该单台服务器生效;若要将域名写入客户端密钥,请务必在集群层级添加。

在独立服务器上配置

独立服务器无法自动获取证书。请从证书颁发机构获取域名的 PFX 格式证书(包含私钥),并将其重命名为 /opt/VpnHoodServer/storage/access/certificates/default.pfx 替换原文件。

接着在 /opt/VpnHoodServer/storage/appsettings.json 的 FileAccessManager 下,将证书密码填入 SslCertificatesPassword,并将 IsValidHostName 设为 true。新安装的环境中若无此文件,直接创建即可,之后服务器将优先使用该配置。

完整配置文件内容,请将示例密码替换为您证书的实际密码

{
  "FileAccessManager": {
    "SslCertificatesPassword": "your-pfx-password",
    "IsValidHostName": true
  },
  "ServerConfig": {
    "LogAnonymizer": true,
    "AddListenerIpsToNetwork": "*"
  },
  "LogLevel": "Information"
}

服务器会自动从证书中读取域名,因此无需单独配置。

使用 sudo systemctl restart VpnHoodServer 重启服务器,Docker 环境下则运行 sudo docker restart VpnHoodServer。若密码错误,服务器将无法启动,并在日志中显示 The server could not start.。

变更前生成的密钥因绑定旧证书将失效。请重新打印各密钥并发送给用户,原有的配置选项和使用记录均会保留。密钥 ID 即为其在 /opt/VpnHoodServer/storage/access 中的文件名(不含 .token2 后缀)。

列出所有密钥,并根据 ID 重新打印指定密钥

sudo ls /opt/VpnHoodServer/storage/access
sudo /opt/VpnHoodServer/vhserver print 2b9d4a6e-1c3f-4e8a-9b7d-5f0e8c2a1d34

在 Docker 中,可通过 sudo docker exec VpnHoodServer /app/vhsupervisor 运行相同命令,操作与 vhserver gen 一致。

新密钥直接关联域名,不再依赖具体证书文件。后续证书续期时,密钥依然有效,只需替换新证书并重启服务器即可。

后续步骤