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

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

前言

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,而不是国内默认路由的美西节点。现在,享受丝滑的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,就可自由转载本文。禁止CSDN/采集站采集转载。
授权协议:署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)

评论

  1. thislucky
    Windows Edge
    已编辑
    1 月前
    2024-3-19 11:39:59

    有尝试过windows上使用Clash 的 tun模式 来代理 cloudflare-tunne 吗?
    域名嗅探关了也是:“ ERR Unable to establish connection with Cloudflare edge error="TLS handshake with edge error: EOF" ”
    用的http2

  2. Reader
    Macintosh Chrome
    2 月前
    2024-2-28 0:36:36

    感谢,使用 gost 的透明代理也成功了,加载速度提升 6 倍

  3. sora
    Macintosh Chrome
    2 月前
    2024-2-20 17:35:50

    感谢分享,我用的cloudflare/cloudflared:latest的docker镜像,需要增加一个环境变量TUNNEL_TRANSPORT_PROTOCOL值为http2否则默认为走udp的quic

    • 博主
      sora
      Windows Chrome
      2 月前
      2024-2-20 19:44:59

      是的,使用QUIC的话还是直连,需要用http2。稍后我会加上备注,也谢谢你的提醒

  4. 自镇流高压汞灯
    Windows Firefox
    2 月前
    2024-2-20 15:26:33

    安装Xray-core很好解决,只要找个现成的或是自建一个可用的在线代理,使用代理后的地址来安装即可。是否也能使用别的工具作为前置代理?若是能够使用WARP作为前置代理的话,由于WARP可以自选IP,就相当于Cloudflare Tunnel也能自选IP了。

    • 博主
      自镇流高压汞灯
      Windows Chrome
      2 月前
      2024-2-20 19:53:49

      WARP理论也是可以的,但具体情况我不是很清楚,听说只能v6直连...?不太稳定的样子。
      可以用wgcf代理整机的流量,但是貌似它是用WireGuard协议连接到cloudflare的EndPoint的...?WireGuard的早就被ban了。具体怎么实现还不清楚。

发送评论 编辑评论


				
上一篇
下一篇