← yygy1976笔记
Network

把 Cloudflare Tunnel 装了又拆

2026 · 10Cloudflare · 内网穿透

Cloudflare Tunnel 的宣传很诱人:不用开端口、不用公网 IP、自带 HTTPS。我装了一套,把三个服务挂上去,跑通,然后——拆了。

先看数据

链路TTFB
现有 Lucky + DDNS 直连11 ms
Cloudflare Tunnel1381 ms
Cloudflare Tunnel(另一个服务)2435 ms
内网直连(基线)1–2 ms

慢 120 到 220 倍。

为什么

查 cloudflared 的连接日志:

Registered tunnel connection location=lax01
Registered tunnel connection location=lax11

它连到了 洛杉矶。于是路径变成:

你 → 洛杉矶边缘 → 回国内家里 cloudflared → 原路返回

跨境两趟。这不是配置问题,是原理问题——Cloudflare 在中国大陆没有可用节点(企业版 China Network 除外)。强制连香港或新加坡同样跨境,改善有限;用国内 VPS 中转又等于自建 frp,不如直接用现成的。

所以怎么用才对

场景该用什么
国内访问家里服务Lucky + DDNS 直连(家里有公网 IP 就别上 Tunnel)
家里没有公网 IP / 端口被封Cloudflare Tunnel(这才是它的正确场景)
给海外的人看Tunnel(对海外用户反而快)
临时演示分享Tunnel + Access(自带 HTTPS 和登录)
判断准则:家里公网 IP 可用时,Tunnel 在国内没有存在价值。

拆的时候有个顺序问题

直接删隧道会报错:

This tunnel has active connections.
Please stop all cloudflared replicas, or wait a few minutes

必须先停本机服务,等连接释放,再删隧道。不然后台一直挂着。

顺带的收获:一个 HA 的 400 之谜

挂 Home Assistant 时它一直返回 400 Bad Request,内网直连却是 200。做了三组对照:

直连 170:8123                    → 200
带 Host: ha.example.com 直连     → 200    ← 域名不是问题
带 X-Forwarded-For 直连          → 400    ← 真凶

HA 默认不信任前置代理,见到这个头就拒绝。按常规往 configuration.yaml 写 http: trusted_proxies —— 完全没生效。

翻 HA 源码才发现:2026 版已经把 http 配置从 YAML 迁到内部存储,.storage/http 里有个 yaml_migration_done: true 标志,一旦置位,写 YAML 永久无效。正确做法是改 .storage/http,而且要停容器→改→启(运行时会被覆写)。

这条比 Tunnel 本身值钱:以后动 HA 的 http 参数别再写 YAML。


最终我把隧道、DNS、Access 策略、cloudflared 服务、二进制,全部清干净,连 HA 里为它加的受信任代理也还原了。原有 11ms 的链路毫发无损。

装了又拆,不算白干——至少下次有人问"Tunnel 在国内快不快",我能直接给数字。