将服务器置于反向代理之后
如果网络封锁了服务器的 IP 地址,只要应用不直接连接该 IP,就无法实施拦截。在 Cloudflare 等反向代理保护下,应用只需连接代理,再由代理将连接转发至您的服务器。
工作原理
您的域名将指向代理而非真实服务器。应用解析域名并连接至代理,代理会解密连接(如同处理常规网站一样),然后重新加密并转发给您的服务器。流量通过 Cloudflare 支持的 WebSocket 传输。只要其他反向代理支持 WebSocket 并能通过 TLS 连接您的服务器,也同样适用。
仅当密钥中包含受信任的域名时,应用才会解析该域名,这需要由受信任的证书颁发机构签发证书。
密钥中也可以包含服务器的真实地址。此时应用可采用双重连接方式:若真实地址被封锁,代理可确保连接不中断;但持有该密钥的人都能查看到服务器地址。若密钥中不含服务器地址,则所有应用都将强制通过代理连接。
注意事项
- 封锁风险: 网络依然可以封锁反向代理的 IP 地址或您的域名。不过 Cloudflare 的 IP 同时承载着海量其他网站,对其进行封锁的代价极高。
- DNS 解析: 应用在连接前会通过本地网络的 DNS 查询您的域名。如果网络屏蔽或篡改了解析结果,应用会退回使用密钥中包含的 IP 地址;若密钥中仅包含域名,则将无法连接。
- 隐私安全: 反向代理与您的服务器一样,能看到隧道内的传输内容:包括用户的连接目标以及未加密传输的明文数据(HTTPS 流量始终保持加密)。请务必选择值得信赖的反向代理服务商。
- 仅限 TCP: 通过代理连接的应用无法使用服务器提供的 UDP 和 QUIC 端口。
- 服务条款: 请确认您的服务商条款是否允许 VPN 流量。通常供 50 人左右的小规模群体使用不会有问题。
准备工作
- 一个顶级域名或二级域名,并在服务器上配置由受信任证书颁发机构(CA)签发的证书:请参考使用域名与受信任证书。在域名解析记录直接指向服务器时,请先完成此配置。
- 域名后仅关联单台服务器。若解析记录指向两台服务器,可能导致同一会话的连接被分散转发,从而中断连接。
- 服务器需监听 TCP 端口
443,或反向代理支持转发的其他端口。Cloudflare 仅支持在443, 2053, 2083, 2087, 2096, 8443上转发 HTTPS 流量。
开启代理
- 登录 Cloudflare,打开域名的 DNS 解析设置,将指向服务器的解析记录状态更改为 Proxied;若有 AAAA 记录,也请一并设置。
- 进入 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 地址:
- 关闭 Automatic Configuration。
- 修改各个地址,将其 Mode 设置为 Private。
- 保持 Listen 为 Yes,使服务器继续监听端口以接收代理的连接。
仅当证书显示为 CA Signed 时,MANAGER 才允许生成不含地址的密钥。设置服务器的 IP 地址中详细说明了各项设置。
如果保持为 PublicInToken,地址将保留在密钥中,应用可同时使用直连地址与代理。当某个地址被封锁时,代理能确保用户连接不中断。
由于 Push token to clients 默认开启,持有旧密钥的应用会在下次连接时自动获取新密钥。
该域名指向单一服务器,因此在多台服务器组成的集群中,所有通过代理访问的应用都会连接到同一台服务器。
在独立服务器上
请确保服务器使用该域名的证书,并将 IsValidHostName 设为 true:使用域名和受信任的证书中介绍了具体操作。此后生成的密钥都会包含该域名,应用会解析并使用它。
独立服务器始终会在密钥中附带自身地址和域名,因此应用可同时使用直连与代理。当某个地址被封锁时,代理能确保用户连接不中断,但任何持有密钥的人都可以查看到该地址。