VpnHood!

将服务器置于反向代理之后

如果网络封锁了服务器的 IP 地址,只要应用不直接连接该 IP,就无法实施拦截。在 Cloudflare 等反向代理保护下,应用只需连接代理,再由代理将连接转发至您的服务器。

工作原理

您的域名将指向代理而非真实服务器。应用解析域名并连接至代理,代理会解密连接(如同处理常规网站一样),然后重新加密并转发给您的服务器。流量通过 Cloudflare 支持的 WebSocket 传输。只要其他反向代理支持 WebSocket 并能通过 TLS 连接您的服务器,也同样适用。

应用通过代理访问服务器 用户的应用解析您的域名并连接到 Cloudflare 等反向代理,代理再将连接转发给您的服务器。即使直连服务器 IP 的路由被封锁,应用也能轻松绕过。 反向代理 例如 Cloudflare 您的域名 app.example.com 203.0.113.10 已封锁 您的用户 VpnHood! CLIENT 您的服务器 VpnHood! SERVER 通过代理绕过封锁
应用通过代理访问服务器 用户的应用解析您的域名并连接到 Cloudflare 等反向代理,代理再将连接转发给您的服务器。即使直连服务器 IP 的路由被封锁,应用也能轻松绕过。 反向代理 例如 Cloudflare 您的域名 app.example.com 203.0.113.10 已封锁 您的用户 VpnHood! CLIENT 您的服务器 VpnHood! SERVER 通过代理绕过封锁

仅当密钥中包含受信任的域名时,应用才会解析该域名,这需要由受信任的证书颁发机构签发证书。

密钥中也可以包含服务器的真实地址。此时应用可采用双重连接方式:若真实地址被封锁,代理可确保连接不中断;但持有该密钥的人都能查看到服务器地址。若密钥中不含服务器地址,则所有应用都将强制通过代理连接。

注意事项

  • 封锁风险: 网络依然可以封锁反向代理的 IP 地址或您的域名。不过 Cloudflare 的 IP 同时承载着海量其他网站,对其进行封锁的代价极高。
  • DNS 解析: 应用在连接前会通过本地网络的 DNS 查询您的域名。如果网络屏蔽或篡改了解析结果,应用会退回使用密钥中包含的 IP 地址;若密钥中仅包含域名,则将无法连接。
  • 隐私安全: 反向代理与您的服务器一样,能看到隧道内的传输内容:包括用户的连接目标以及未加密传输的明文数据(HTTPS 流量始终保持加密)。请务必选择值得信赖的反向代理服务商。
  • 仅限 TCP: 通过代理连接的应用无法使用服务器提供的 UDP 和 QUIC 端口。
  • 服务条款: 请确认您的服务商条款是否允许 VPN 流量。通常供 50 人左右的小规模群体使用不会有问题。

准备工作

  • 一个顶级域名或二级域名,并在服务器上配置由受信任证书颁发机构(CA)签发的证书:请参考使用域名与受信任证书。在域名解析记录直接指向服务器时,请先完成此配置。
  • 域名后仅关联单台服务器。若解析记录指向两台服务器,可能导致同一会话的连接被分散转发,从而中断连接。
  • 服务器需监听 TCP 端口 443,或反向代理支持转发的其他端口。Cloudflare 仅支持在 443, 2053, 2083, 2087, 2096, 8443 上转发 HTTPS 流量。

开启代理

  1. 登录 Cloudflare,打开域名的 DNS 解析设置,将指向服务器的解析记录状态更改为 Proxied;若有 AAAA 记录,也请一并设置。
  2. 进入 SSL/TLS 设置,将加密模式调整为 Full (strict)。Cloudflare 随后将通过 TLS 连接您的服务器并校验其证书。若选择 Flexible 模式,则会使用服务器不支持的普通 HTTP 协议。

VpnHood! MANAGER 会通过域名在 TCP 端口 80 上使用普通 HTTP 自动续期证书,Cloudflare 会将其转发至您的服务器。对于托管服务器,请保持 Always Use HTTPS 处于关闭状态,否则请求会被重定向至 HTTPS 导致证书续期失败。

在托管服务器上配置

检查服务器集群的域名证书:确保 Signature 显示为 CA Signed,且 Visibility 设为 PublicInToken。这样密钥中就会包含该域名供应用解析。

若要让所有应用都经由代理连接,请在服务器的 Access Points 中移除服务器自身的直连 IP 地址:

  1. 关闭 Automatic Configuration。
  2. 修改各个地址,将其 Mode 设置为 Private。
  3. 保持 Listen 为 Yes,使服务器继续监听端口以接收代理的连接。
VpnHood! MANAGER 中为反向代理配置服务器接入点:关闭自动配置(1),并将各地址的模式设为私有(2)、监听设为是(3)
服务器的两个地址均已从密钥中移除,但服务器仍会监听这些地址。

仅当证书显示为 CA Signed 时,MANAGER 才允许生成不含地址的密钥。设置服务器的 IP 地址中详细说明了各项设置。

如果保持为 PublicInToken,地址将保留在密钥中,应用可同时使用直连地址与代理。当某个地址被封锁时,代理能确保用户连接不中断。

由于 Push token to clients 默认开启,持有旧密钥的应用会在下次连接时自动获取新密钥。

该域名指向单一服务器,因此在多台服务器组成的集群中,所有通过代理访问的应用都会连接到同一台服务器。

在独立服务器上

请确保服务器使用该域名的证书,并将 IsValidHostName 设为 true:使用域名和受信任的证书中介绍了具体操作。此后生成的密钥都会包含该域名,应用会解析并使用它。

独立服务器始终会在密钥中附带自身地址和域名,因此应用可同时使用直连与代理。当某个地址被封锁时,代理能确保用户连接不中断,但任何持有密钥的人都可以查看到该地址。

后续步骤