Cloudflare Tunnel常见问题

清夏晚风 Lv7

错误代码

在使用 Cloudflare Tunnel 时,可能会遇到各种错误。以下整理了常见的错误及对应的解决方法。


连接错误

cloudflared 无法连接到 Cloudflare 网络时,会根据具体情况输出不同的错误信息。

DNS 解析失败

错误信息:

1
2
ERR edge discovery: error looking up Cloudflare edge IPs: the DNS query failed
error="lookup _v2-origintunneld._tcp.argotunnel.com on 172.19.64.1:53: no such host"

原因: 机器配置的 DNS 解析器无法解析 cloudflared 用于发现 Cloudflare Tunnel 目标 IP 的 SRV 记录。常见于企业 DNS 解析器过滤了 SRV 记录,或 DNS 返回了压缩的 SRV 记录。

排查方法:

1
2
3
4
5
# 测试本地 DNS 是否能解析 SRV 记录
dig SRV _v2-origintunneld._tcp.argotunnel.com

# 对比测试 Cloudflare 公共解析器
dig SRV _v2-origintunneld._tcp.argotunnel.com @1.1.1.1

解决方法:

  • 1.1.1.1 可返回结果但本地解析器不行,将系统 DNS 改为 Cloudflare DNS(1.1.1.1)或其他公共 DNS。
  • 若两个解析器均无结果,说明防火墙阻止了出站 DNS 查询(UDP 53 端口),需联系网络管理员放行。

超时变体:

1
2
ERR edge discovery: error looking up Cloudflare Edge IPs: the DNS query failed
error="lookup _v2-origintunneld._tcp.argotunnel.com on 127.0.0.11:53: read udp ... i/o timeout"

常见于 Docker/Kubernetes 容器环境,内部 DNS 解析器不可达或配置错误。

解决方法:

  • Docker 中可通过 --dns 1.1.1.1 覆盖解析器。
  • Kubernetes 中检查 kube-dnsCoreDNS 服务是否正常运行。

QUIC 握手超时

错误信息:

1
2
3
ERR Failed to dial a quic connection error="failed to dial to edge with quic:
timeout: handshake did not complete in time" connIndex=0 ip=198.41.192.227
INF Retrying connection in up to 2s connIndex=0 ip=198.41.192.227

原因: cloudflared 已解析到 Cloudflare 目标 IP,但无法通过 UDP 7844 端口完成 QUIC 握手。网络或防火墙阻止了出站 UDP 流量。

排查方法:

1
2
# 测试 UDP 7844 端口连通性
nc -uvz -w 3 198.41.192.227 7844

解决方法:

  • 在防火墙中放行出站 UDP 7844 端口流量。
  • 如果无法放行 UDP,cloudflared 会自动回退到 HTTP/2 over TCP,也可通过 --protocol http2 参数强制使用 HTTP/2。

TCP 连接超时

错误信息:

1
2
ERR Unable to establish connection with Cloudflare edge
error="DialContext error: dial tcp 198.41.200.43:7844: i/o timeout" connIndex=0

原因: cloudflared 无法通过 TCP 7844 端口到达 Cloudflare。如果同时出现 QUIC 握手超时,说明 UDP 和 TCP 均被阻止,隧道完全无法连接。

排查方法:

1
2
3
4
5
# 测试 TCP 7844 端口连通性
nc -vz -w 3 198.41.200.43 7844

# 也可使用 curl 测试
curl -v https://region1.v2.argotunnel.com:7844

解决方法:

  • 在防火墙中放行出站 TCP 7844 端口流量到 Cloudflare Tunnel IP 范围。
  • 如果环境完全阻止 7844 端口,隧道将无法正常工作。

Error 1033 — 隧道未连接到 Cloudflare 网络

错误信息: 浏览器访问时显示 Error 1033

原因: Cloudflare 网络找不到健康的 cloudflared 实例来接收流量,即隧道未连接到 Cloudflare 网络。

排查方法: 在 Cloudflare Dashboard 中查看隧道状态:

状态 含义 解决方法
Healthy 隧道正常运行 无需操作
Inactive 隧道已创建但从未运行过 cloudflared 连接 执行 cloudflared tunnel run 或安装为系统服务
Down 隧道曾连接但现已断开 检查 cloudflared 进程是否运行,服务器是否关机、崩溃或网络变更
Degraded 隧道运行中但部分连接失败 检查 cloudflared 日志定位连接失败原因,排查本地网络和防火墙规则

Error 502 Bad Gateway — 源服务器连接失败

错误信息:

1
2
502 Bad Gateway — Unable to reach the origin service. The service may be down
or it may not be responding to traffic from cloudflared.

原因: 隧道已连接到 Cloudflare 网络,但 cloudflared 无法访问配置的源服务。常见原因包括:

原因 说明
源服务未启动 本地 Web 服务进程崩溃或未运行
防火墙阻止 防火墙/iptables 阻止了 cloudflared 访问本地端口
origin URL 配置错误 配置了不可达的内网地址
TLS 证书不匹配 源服务使用自签名证书未被信任
服务监听地址错误 服务仅监听 127.0.0.1,未监听 0.0.0.0

排查方法:

1
2
3
4
5
6
7
8
9
10
11
# 检查本地服务监听情况
ss -tulnp | grep :8080

# 模拟 cloudflared 行为调用源服务
curl -v http://localhost:8080

# 查看 cloudflared 实时日志
journalctl -u cloudflared -f

# 测试 DNS 解析
dig +short your-subdomain.your-domain.com @1.1.1.1

解决方法:

  • 确保源服务已启动并监听 0.0.0.0(而非仅 127.0.0.1)。
  • 检查 config.ymloriginUrl 配置是否正确,推荐使用 http://localhost:8080 而非内网 IP。
  • 检查防火墙是否放行了本地端口。

证书相关错误

x509: certificate signed by unknown authority

错误信息:

1
error: x509: certificate signed by unknown authority

原因: 源服务使用了 cloudflared 不信任的证书,例如使用了自签名证书或中间代理启用了 SSL/TLS 解密。

解决方法:

  • 将证书添加到系统证书池。
  • 使用 --origin-ca-pool 参数指定 CA 证书路径。
  • 临时使用 --no-tls-verify 参数跳过证书验证(仅限测试环境)。

SSL 连接错误

原因: 源服务 HTTPS 配置不正确,或使用 Let’s Encrypt 证书但在 Cloudflare 控制面板中 SSL/TLS 加密模式设置为 Full (Strict)

解决方法: 在 Cloudflare 控制面板的 SSL/TLS 设置中,将加密模式改为 FullFlexible,或确保源服务器配置了有效的 SSL 证书。


DNS 记录冲突

错误信息:

1
An A, AAAA, or CNAME record with that host already exists.

原因: 尝试保存隧道的 public hostname 时,该主机名已存在 DNS 记录。

解决方法:

  • 在 Cloudflare Dashboard 的 DNS 记录管理中删除已存在的记录。
  • 或者使用其他未被占用的主机名。

认证与凭证问题

cloudflared 服务已安装

错误信息:

1
cloudflared service is already installed.

原因: 同一台机器上已运行了其他 cloudflared 实例。一台机器只能运行一个 cloudflared 服务实例。

解决方法:

  • 将更多路由添加到现有隧道,而非创建新隧道。
  • 如需重新安装,先执行 sudo cloudflared service uninstall 卸载。

凭据文件不存在

错误信息:

1
Tunnel credentials file '/root/.cloudflared/xxx.json' doesn't exist or is not a file

原因: config.ymlcredentials-file 指向的路径不正确。

解决方法: 检查 config.yml 中的 credentials-file 路径是否正确,确保文件存在于指定位置。

隧道认证失败

原因: Cloudflare 账户中用户的权限发生变化(如用户被移除出账户),导致之前下载的证书文件中的 API 令牌失效。

解决方法: 重新执行 cloudflared login 登录并重新生成证书文件。


其他常见问题

Too many open files

错误信息:

1
too many open files

原因: 系统文件描述符限制过低。

解决方法: 增加系统文件描述符限制:

1
ulimit -n 65535

缓冲区大小警告

错误信息:

1
failed to sufficiently increase receive buffer size

原因: 系统 UDP 接收缓冲区大小不足,可能影响 QUIC 连接性能。可以忽略此警告,不会影响连接建立。

解决方法: 按需调整系统参数:

1
2
3
4
5
# 临时调整
sudo sysctl -w net.core.rmem_max=2500000

# 永久调整(写入 /etc/sysctl.conf)
echo "net.core.rmem_max=2500000" | sudo tee -a /etc/sysctl.conf

流媒体响应被缓冲

问题: Cloudflare Tunnel 对流媒体响应进行了缓冲,而非实时传输。

解决方法:config.yml 的 ingress 规则中为该服务禁用缓冲:

1
2
3
4
5
ingress:
- hostname: stream.example.com
service: http://localhost:8080
originRequest:
disableChunkedEncoding: true

如何收集调试日志

如需向 Cloudflare 支持团队提交问题,可使用以下命令收集调试日志:

1
2
3
4
5
# 前台运行并输出详细日志
cloudflared tunnel --loglevel debug run <隧道名称>

# 或写入文件
cloudflared tunnel --loglevel debug run <隧道名称> > tunnel-debug.log 2>&1

防火墙规则参考

确保放行以下出站流量:

协议 端口 用途
UDP 7844 QUIC 连接(默认协议)
TCP 7844 HTTP/2 回退连接
UDP 53 DNS 解析

Cloudflare Tunnel 完整的目标 IP 列表请参考 Cloudflare 官方文档

  • Title: Cloudflare Tunnel常见问题
  • Author: 清夏晚风
  • Created at : 2026-06-09 15:23:22
  • Updated at : 2026-07-19 01:57:11
  • Link: https://blog.yuil.cn/2026/06/09/组网相关工具/虚拟软件/CloudFlare Tunnel/Cloudflare Tunnel常见问题/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments