释放小七猫的分享欲

Cloudflare Tunnel 白嫖教程

categories: 技术 tags: 网络
@ 13/07/2026

Cloudflare Tunnel 白嫖教程

这破端口号我真是输烦了。。。之前在设备上部署服务都是 Nginx 非标端口 + 反向代理来访问各种服务,好处是安全且直连,速度快。但带个端口号始终是不方便。后来我尝试了一下用阿里云服务器的公网 IP,来反向代理我的服务,访问速度快了很多。但悲剧的点在于,我的服务刚部署不到 5 分钟,阿里云客服就打电话让我域名备案,否则不能使用 80/443 端口,被迫无奈放弃。

于是我又想起了 Clouflare 的 Tunnel 功能,其实之前有过尝试,但延迟比较高就放弃了,今天来重新部署。

前提条件:cloudflare 需要托管至少一个域名。

配置 Cloudflare Tunnel

在 cloudflare 官网选择 ZeroTrust,然后选择网络 - 连接器

在网络连接器中创建一条或多条新的隧道,这里有几种处理方案,没有本质区别。

  1. 每个设备都创建一条各自的隧道。比如说,NAS1 创建一条,NAS2 创建一条,软路由创建一条。这样做的好处是各设备解耦,一个设备的 cloudflared 崩掉不影响其他设备。缺点是需要维护多个设备的 cludflared。
  2. 网关上创建隧道,通过网关代理其他服务。好处是只需要部署一条隧道,管理方便。缺点是需要保证网关设备的稳定性。

两个方案没有绝对的好坏之分,也可以搭配使用,不用纠结。我这里是 2 台设备各自创建一个隧道。

通过这些步骤可以查看隧道信息,并获取 token 以便于设备连接,后续我们会用到。

点击“已发布应用程序路由”,在里面添加你需要的反向代理。

Linux 设备建立隧道

这里使用 Fedora 作为演示,Fedora 默认仓库不带软件包 cloudflared

但这个包在 COPR 中有,添加一下软件源就可以用了:

sudo dnf copr enable medzik/cloudflared
sudo dnf update
sudo dnf install cloudflared

然后复制连接器上提供的命令,创建 cloudflared 服务:

sudo cloudflared service install eyJhIj....

通过 systemctl 可以查看服务状态:

❯ systemctl status cloudflared
● cloudflared.service - cloudflared
     Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Mon 2026-07-13 11:02:46 CST; 6h ago
 Invocation: 71cdc3da4e324e4a8571f27d409926bf
   Main PID: 1391 (cloudflared)
      Tasks: 24 (limit: 18856)
     Memory: 43.3M (peak: 62.9M, swap: 3M, swap peak: 3.5M)
        CPU: 14.067s
     CGroup: /system.slice/cloudflared.service
             └─1391 /usr/bin/cloudflared --no-autoupdate tunnel --protocol http2 run --token eyJhIjoiNGEzZGZiNzM3Y2M5ZD>

7月 13 14:44:22 fedora-server cloudflared[1391]: 2026-07-13T06:44:22Z ERR  error="Incoming request ended abruptly: cont>

正常情况下状态是 active (running)。

然后我们需要修改一下连接协议,查看现在的状态:

❯ cat /etc/systemd/system/cloudflared.service | grep Exec
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --token eyJhIjo

默认的 cloudflared 启动协议没有显式指定,默认参数是 auto,其实就是优先选用 UDP(QUIC)协议,这个 UDP 协议非常容易导致网络波动(原因我不说)宕机,虽然这种宕机短时间内就会恢复,但谁都不想网络时不时地崩一下。

针对这种情况,强制使用 http2 协议是最直接、最有效的解决办法,因为它规避了 UDP(QUIC)带来的各种网络兼容性问题。

修改 /etc/systemd/system/cloudflared.service,将 protocol http2 加到相应位置即可。

这个 auto/http2 其实是指 cloudflared 客户端和你服务器之间的连接方式。

重启 cloudflared 服务:

sudo systemctl restart cloudflared

OpenWRT 设备建立隧道

OpenWRT 配置过程有小区别,但原理一样。

安装 luci-app-cloudflared 插件,完成后重新登陆,在“VPN“选项中可以看到。在 cloudflare 连接器页面中获取 token 并填入。

零信任隧道中的配置页面不配置源站证书无法使用。

但没关系,直接通过终端配置即可:

root@IWrt:~# cd /etc/config/
root@IWrt:/etc/config# cat cloudflared

config cloudflared 'config'
        option enabled '1'
        list interfaces 'wan'
        option protocol 'auto'
        option logfile '/var/log/cloudflared.log'
        option token 'eyJhIjoi...'
        option config '/etc/cloudflared/config.yml'
        option origincert '/etc/cloudflared/cert.pem'
        option loglevel 'info'

将 /etc/config/cloudflared 中的 auto 修改为 http2 即可。

最后启用该插件,大功告成。

root@IWrt:/etc/config# ps -ef | grep cloudflared
 7390 root     1266m S    /usr/bin/cloudflared tunnel --no-autoupdate --protocol http2 --loglevel info --logfile /var/log/cloudflared.log run --token eyJhIj...