博文头图
Cloudflare Tunnel速度慢?尝试给它加个前置代理提高速度

Cloudflare Tunnel速度慢?尝试给它加个前置代理提高速度

本文最后更新于794天前,其中的信息可能已经有所发展或是发生改变。

前言

Cloudflare Tunnel是一个非常好用的内网穿透工具,无需服务器,仅仅需要一个Cloudflare账号就可以将无公网IP的内网服务穿透到外网去。但是有个相当致命的缺点:Cloudflare到中国大陆的网络情况不佳,分配到的EndPoint基本都在美西,速度慢不说,还经常炸。

最近一段时间,从移动分到的Cloudflare Tunnel EndPoint基本都是在洛杉矶LAX,但是移动到洛杉矶最近的网络炸的惨不忍睹,丢包70%,实属逆天:

这直接导致了本站的Smokeping服务离线数天。当你配置好了隧道,能基本正常工作,却时不时看到这个页面,伴随速度慢,就说明到Cloudflare 的网络连通性太差了。

网络连通性差,速度慢,给Cloudflare Tunnel配置一个前置代理不就能解决了吗?然而,Cloudflare Tunnel本身并不支持前置HTTP/Socks5代理,官方的意见是不会支持:https://github.com/cloudflare/cloudflared/issues/350#issuecomment-1706842883

官方不支持,我们就给Cloudflare Tunnel想办法套一个前置透明代理。下面本文就记述如何使用V2Ray/Xray Core配合iptables实现为Cloudflare Tunnel提供透明代理,提高速度。

你可能会问下列问题,我的回答是:

Q1: 要使用V2Ray/Xray Core就需要服务器,自己有服务器为什么不使用类似FRP的自建内网穿透服务?

Q2: 不可以自选EndPoint的IP来达到较好的效果吗?

A1: 使用Cloudflare Tunnel可以更有效隐藏服务器的IP,防止被攻击;也不一定非要有服务器才能自建V2Ray,例如Edge Tunnel. 当然执意选择自建的肯定不会看我这篇文章了。(之前用过FRP,但是Cloudflare Tunnel真香)

A2: Cloudflare Tunnel通过连接到EndPoint的7844端口来工作,只有198.41.192.0/24和198.41.200.0/24这两组IPv4地址开放了7844端口,绝大多数加速443端口的自选IP都没开放7844端口,都不能用。

正文,开搞

本文默认你已经在需要穿透的内网设备上配置好了Cloudflare Tunnel并能基本正常工作,只是因为网络问题速度慢,需要前置代理来提速。

Step1. 安装Xray-core

首先,安装Xray-core. 不要觉得这是一件能简单完成的任务,国内机器上安装Github上的软件是很痛苦的问题。Xray-install的GitHub issue中有人提到前置代理...那么这就是一个先有鸡还是先有蛋的问题。一般过一会儿多试试总能安装上。

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

Step2. 配置Xray-core

本地客户端中新起一个dokodemo-door的inbound,注意不要开始流量探测。 路由模块 routing 中的domainStrategy最好设置为 AsIs.

//客户端配置
"inbounds": [
    {
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true // 接收流量转发
      }
    },
    ......
  ],
  ......
  "routing": {
    "domainStrategy": "AsIs",
    "domainMatcher": "mph",
  ......

同时不要开启服务端的流量探测。如需要流量探测,建议在其他客户端上开启,或者在服务端中另起一个inbound. 否则Cloudflare Tunnel会出现ERR Unable to establish connection with Cloudflare edge error="TLS handshake with edge error: EOF" connIndex=0的错误并且无法工作。

为什么?因为Cloudflare Tunnel会解析region1.v2.argotunnel.comregion2.v2.argotunnel.com的DNS记录,并使用cftunnel.com的SNI去连接到EndPoint。但是cftunnel.com本身并没有A和AAAA的DNS记录,这导致Xray-core服务端无法通过解析cftunnel.com的IP地址来进行连接。所以需要关掉流量探测,让Xray-core服务端通过IP连接。或者可以在服务端尝试指定cftunnel.com的hosts,但我没有进行过尝试,理论上可行。

上图为Xray-core服务端嗅探出了cftunnel.com的域名,但无法连接。

Step3. 配置iptables

添加下列iptables规则:

sudo iptables -t nat -A OUTPUT -d 198.41.192.0/24 -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -d 198.41.200.0/24 -p tcp -j REDIRECT --to-ports 12345

region1.v2.argotunnel.comregion2.v2.argotunnel.com分别解析到198.41.192.0/24和198.41.200.0/24中的IP地址,而且Cloudflare Tunnel默认使用IPv4,配置iptables规则将这两段IP转发到dokodemo-door上即可完成透明代理。注意iptables规则重启后即失效,需要配合iptables-persistent进行持久化。

Step4. 调优

Cloudflare Tunnel会时不时连接到下面几个域名来完成类似检查更新,汇报信息的功能,好在是使用443(HTTPS)端口来进行通信,可以自选IP。

  • api.cloudflare.com
  • update.argotunnel.com
  • <你的团队名称_需自己修改>.cloudflareaccess.com
  • pqtunnels.cloudflareresearch.com

将上述域名放到hosts里面自选IP,或者直接在hosts中写死我们透明代理加速过的198.41.192.0/24和198.41.200.0/24中的IP也可以。

104.17.18.19 api.cloudflare.com
104.17.18.19 update.argotunnel.com
104.17.18.19 pqtunnels.cloudflareresearch.com
104.17.18.19 <你的团队名称_需自己修改>.cloudflareaccess.com

此外,还需要配置cloudflared使用http2协议与EndPoint通信,iptables转发规则对QUIC无效。若使用cloudflared二进制文件则需要修改对应的config.yml,请确保protocolhttp2; 若使用cloudflared docker镜像,则需要增加环境变量TUNNEL_TRANSPORT_PROTOCOL的值为http2.

Step5. 验收

重启cloudflared,查看效果:

sudo systemctl restart cloudflared

我的Xray-core服务端架设在日本,可以看到Endpoint的location已经变成了nrt01nrt08,而不是国内默认路由的美西节点。

当然,由于网络和线路的不稳定性,网络波动可能会导致cloudflared掉线。而似乎cloudflared的断线重连做的不好,常常重连失败或者重连没有经过代理。最好的办法还是定时重启cloudflared,辅以相对稳定的优化线路。

重启cloudflared可以使用crontab实现:

crontab -e #编辑crontab

# 将下列代码粘贴进编辑器中,作用是每6小时重启一次cloudflared
00 */6 *   *   *    sudo service cloudflared restart

现在,享受丝滑的Cloudflare Tunnel!

引用

💡 How to make cloudflared tunnel use a proxy server (socks5 or http/s) when connecting to edge nodes ??? · Issue #1025 · cloudflare/cloudflared

开启全局透明代理后,cloudflared(argo tunnel)无法使用 · Issue #188 · v2rayA/v2rayA

Tunnel with firewall · Cloudflare Zero Trust docs

本文永久链接:https://blog.xmgspace.me/archives/cloudflare-tunnel-via-proxy.html
本文文章标题:Cloudflare Tunnel速度慢?尝试给它加个前置代理提高速度
如无特殊说明,只要您标明转载自Xiaomage's Blog,就可转载本文。若无法复制请联系站长获取文章副本。
授权协议:署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)

评论

  1. leo
    Windows Chrome
    2 月前
    2026-4-22 5:14:59

    文章里面说是像saas.sin.fan这类提供优选IP服务的网站不支持7844端口,还是大部分cf的边缘服务器没开7844端口呢?如果是后者是不是可以自己做一个优选服务来筛选 :no-location:

  2. 匿名
    Windows Edge重庆
    4 月前
    2026-2-25 16:11:06

    看不懂呀!大佬能不能具体点呀,目前速度太慢了

  3. user
    Android Firefox
    6 月前
    2025-12-07 10:41:08

    本来 cf tunnel 是为了隐藏服务器 ip,现在再加一个暴露 ip 的服务器来前置代理合理吗
    :no-location:

    • 博主
      user
      Windows Chrome山东
      6 月前
      2025-12-07 13:20:14

      并没有暴露服务器的IP呀,中间中转服务器的IP地址只有CF知道,没有暴露
      cf tunnel当然是隐藏源站IP的最佳实践之一,但是主要功能还是将内网的服务穿透到外网,能让外网直接访问到

      • 匿名
        Xiaomage
        Android Firefox
        已编辑
        6 月前
        2025-12-07 16:03:58

        我总觉得暴露了,要不再水一篇文章解释一下
        :no-location:

        • 博主
          匿名
          Windows Chrome山东
          6 月前
          2025-12-08 17:31:55

          因为加速的仅仅是源服务器到Cloudflare这一段,访客访问的还是Cloudflare,不会暴露源站的。有时间了或许可以

  4. Nick
    Macintosh Chrome
    8 月前
    2025-10-25 23:33:25

    博客最近是切换到cf了么? :no-location:

    • 博主
      Nick
      Windows Chrome山东
      8 月前
      2025-10-27 17:26:39

      目前是分线路解析,国内直连VPS,国外解析到cloudflare,如果您那边不是这样的话,我可以尝试排查下,换了DNS解析提供商,但目前没发现有问题。

  5. poi
    Windows Chrome瑞典
    11 月前
    2025-7-25 18:56:43

    大佬 我软路由开的透明代理 怎么设置让cf穿透不走代理啊

    • 博主
      poi
      Windows Chrome山东
      11 月前
      2025-7-26 17:10:10

      我不知道你路由器上是如何实现透明代理的,所有具体怎么做我不知道。你需要配置你的透明代理工具,把198.41.192.0/24和198.41.200.0/24这两个网段排除一下就可以了。不是大佬(

  6. kyleli
    Windows Firefox日本
    11 月前
    2025-7-03 16:51:56

    实测sninffing里的domainsExcluded加上两个cf相关域名即可。不需要关闭,不然有点得不偿失

    • 博主
      kyleli
      Windows Chrome山东
      11 月前
      2025-7-04 20:20:14

      这确实是个好办法,之前我从来没想到过👍 🐂🍺

  7. Windows Chrome新加坡
    1 年前
    2025-5-15 1:07:22

    我想知道你的图片是放在服务器上面的吗?我的放在服务器上面加载特别慢,需要十几秒。我想知道博主你是怎么解决的,我的博客点我头像就可以访问。

    • 博主
      任佳鹿
      Windows Chrome山东
      1 年前
      2025-5-15 10:28:17

      是的,但是我这个博客并没有用cloudflare tunnel,是直接解析到服务器IP地址的,服务器线路到国内是优化线路。
      我之前有其他的应用是通过cloudflare tunnel访问的,那确实慢一些,你可以尝试配置一下cloudflare缓存,把你的服图片缓存在cloudflare的服务器上。然后再优选cloudflare IP,会更快一些。

      • Xiaomage
        Windows Chrome新加坡
        1 年前
        2025-5-15 12:02:08

        好的,我知道了。我试试,我的是家宽搭建。现在家里停电,晚会我测试看看

发送评论 编辑评论


				
若您不希望公开IP属地,请点击此处,在评论末尾添加:no-location:标记。IP属地仅供参考。隐私政策
上一篇
下一篇