家用 mini 主机部署 Cloudflare Tunnel 踩坑笔记
· 开发
现象
在家用 mini 主机(Docker 容器)里启动 cloudflared,一直报错:
lookup _v2-origintunneld._tcp.argotunnel.com on 114.114.114.114:53: i/o timeout
edge discovery、SRV 记录全部 FAIL,隧道始终起不来。
排查过程
1. DNS 超时 → 用 host 网络
114.114.114.114、1.1.1.1 都不通,但主机上 dig @223.5.5.5 秒回,容器里却超时。
结论:Docker bridge 网络的 UDP/53 出站被挡。绕开它:
docker run --network host cloudflare/cloudflared:latest tunnel run --token <TOKEN>
2. QUIC 握手超时 → 改用 http2
DNS 好了,又报:
failed to dial to edge with quic: timeout handshake
QUIC 走 UDP 7844,国内网络容易超时。强制走 TCP 443:
--protocol http2
3. 备用连接报错 → 不用管
日志里偶尔出现某条 connIndex 对某边缘节点握手超时。cloudflared 默认开多条连接,只要一条 Registered 就正常,其余是重试噪音。想干净一点:
--conn 1 --edge-ip-version 4
4. 隧道通了但 502 → Service 写成 https
后端服务 memos 是明文 HTTP,后台却配了:
https://localhost:5230
改回:
http://localhost:5230
稳定运行的最终配置
systemd 守护 + Docker,开机自启:
[Service]
Restart=always
ExecStart=/usr/bin/docker run --rm --network host --name cloudflared \
cloudflare/cloudflared:latest tunnel --no-autoupdate \
--protocol http2 --conn 1 --edge-ip-version 4 run --token <TOKEN>
内网服务(memos)最好也用 host 网络,ufw allow 5230 放行,隧道转发指向 http://localhost:5230。
小结
三个关键点:
- 主机通 ≠ 容器通——Docker bridge 的 UDP/53、NAT 可能单独被挡,改
--network host最省事。 - 国内跑隧道两个高频坑:UDP 被干扰(用
--protocol http2)、部分边缘节点不可达(属正常冗余重试)。 - 502 先查后台 Service 协议,http/https 写错是最常见原因。