为Cloudflared Tunnel开启HTTP2和IPv6支持
通过将Cloudflared Tunnel的传输层由QUIC改为HTTP/2, 地址栈加入IPv6支持,使连接更加稳定。
背景
先让我们了解一下, 默认情况下的 Cloudflared Tunnel 启动参数有那些影响到连接的因素:
- 传输层协议: 默认使用QUIC协议, 它是Google开发的基于UDP的传输层协议, 传输性能较高
- 地址栈: 默认使用IPv4地址栈, IPv6地址栈需要手动开启
由于本地运营商对UDP的Qos甚至阻断, 导致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地址栈也有其优势, 管控较为宽松, 线路不同等
仅IPv6地址栈: 加入
--edge-ip-version 6
参数, 以IPv6地址栈为主以连接Cloudflare边缘加入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