为Cloudflared Tunnel开启HTTP2和IPv6支持

通过将Cloudflared Tunnel的传输层由QUIC改为HTTP/2, 地址栈加入IPv6支持,使连接更加稳定。

背景

先让我们了解一下, 默认情况下的 Cloudflared Tunnel 启动参数有那些影响到连接的因素:

  • 传输层协议: 默认使用QUIC协议, 它是Google开发的基于UDP的传输层协议, 传输性能较高
  • 地址栈: 默认使用IPv4地址栈, IPv6地址栈需要手动开启

由于本地运营商对UDPQos甚至阻断, 导致Cloudflared Tunnel在某些网络环境下无法正常工作。同时运营商对于IPv4的相关管控设施和规则早已趋于完善, 流控、QoS等问题也更加严重。

切换到HTTP/2

Cloudflared Tunnel默认使用QUIC协议, 它是Google开发的基于UDP的传输层协议, 传输性能较高。但是由于QUIC协议的一些限制, 如连接建立延迟、连接迁移、丢包率等, 使得在某些网络环境下无法正常工作。

为了解决这些问题, 我们将Cloudflared Tunnel的传输层协议由QUIC改为HTTP/2。HTTP/2协议是基于TCP的协议, HTTP/2同时也是目前较为主流的传输层协议。

切换到HTTP/2需要加入--protocol http2这一启动参数。

开启IPv6支持

默认情况下, Cloudflared Tunnel只支持IPv4地址栈。但是IPv6地址栈也有其优势, 管控较为宽松, 线路不同等

  1. 仅IPv6地址栈: 加入--edge-ip-version 6参数, 以IPv6地址栈为主以连接Cloudflare边缘

  2. 加入IPv6地址栈支持: 加入--edge-ip-version auto参数, 同时支持IPv4和IPv6地址栈,交由Cloudflared Tunnel自动选择

实施

进入/etc/systemd/system/cloudflared.service文件, 对ExecStart命令进行如下修改:

ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel  --protocol http2 --edge-ip-version auto  run --token aaXX123

其中--protocol http2表示开启HTTP/2支持, --edge-ip-version auto表示加入IPv6地址栈支持。

重启Cloudflared Tunnel服务:

systemctl restart cloudflared