部署Cloudflare Tunnel 内网转发
MeteorCat借助其赛博菩萨 Cloudflare 的 Workers 实现动态 IP 与域名的自动绑定, 简单来说就是只需要域名就能将本地宽带内部服务暴露到公网,
并且还同时享受到 Cloudflare 的CDN|DDoS防护|IP代理隐藏等额外优势, 仅仅只需要把域名移交给 cloudflare 管理.
这里首先就是需要以下条件:
cloudflare 账号: 官网地址
cloudflare 托管的域名: 不要用国内的任何域名, 因为国内可能需要做网证等验证
- 一台能够持续运行的
linux 服务器
这里依赖 Cloudflare Zero Trust, 其实就是要求本地局域网运行的 Cloudflare 守护程序,
与 Cloudflare 云端通信, 从而将云端请求数据转发到本地网络的 IP + 端口.
通过依赖 Cloudflare Tunnel 业务实现内网穿透, 但是国内特殊国情, 可能在国内访问速度不快并有断流的情况发生
上面提到的国情问题导致实际上体验方面可能很不好, 所以如果想长期稳定使用还是要购买公网IP服务.
另外需要说明下的是启用 Cloudflare Zero Trust 免费用户(Free)也需要信用卡验证下, 网上说有方法绕过我没试过
因为其 ‘打洞转发’ 特性, 目前很多都拿去代理转发, 所以一旦访问高峰期的时候就会出现很不稳定的情况.
官方MYSQL转发(可用于参考): MYSQL
注意: 我这边环境是采用 ARM 开发板的服务器, 所以有部分细微的差别
开通服务的步骤如下:
- 登录
Cloudflare 控制台
- 左侧菜单点击
Zero Trust
- 进入
Networks > Tunnels
- 注: 首次使用
Zero Trust 需要认证信用卡开通 Free 计划

这就是内网转发配置的地质, 我们需要创建自己渠道, 所以直接点击 Create a tunnel:

这里选择 Cloudflared 配置, 代表我们会安装 Cloudflare 内部客户端在我们本地服务器创建服务;
之后需要声明内网转发通道名称, 按照自己习惯配置名称即可:

我这里是转发内网的 armbian 服务器的 Cockpit, 所以按照 Choose your environment 选择 debian+arm64 安装:
1 2 3 4 5 6 7 8 9
| # Add cloudflare gpg key sudo mkdir -p --mode=0755 /usr/share/keyrings curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null
# Add this repo to your apt repositories echo 'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# install cloudflared sudo apt-get update && sudo apt-get install cloudflared
|
注意: 下载 gpg 有时候会突然被阻断, 需要注意是否下载完成才能执行 apt 相关操作
等待 cloudflared 系统安装服务完成, 之后就复制最下面的授权验证信息:
1 2 3 4 5
| # 服务凭证注册 sudo cloudflared service install [复制你 cloudflare 的命令行指令的base64]
# 如果需要替换或者卸载注册凭证, 需要执行以下命令 sudo cloudflared service uninstall
|
等待服务注册完成, 可能采用 cloudflared service install 会提示失败, 不用管他继续下一步:

这里部署 cockpit 服务来运维处理, 需要 cockpit.conf 设置 Origins={购买的域名} 和 AllowUnencrypted=true
配置完成之后点击 Complete Setup(配置设置) 弹出浮动窗口 Successfully 代表配置完成,
这里需要在自己服务器当中重启下服务:
1 2
| # 重启服务, 加载配置项 sudo systemctl restart cloudflared.service
|
初次启动的时候会发现没办法直接启动服务, 可以通过 sudo journalctl -f -u cloudflared.service 命令确定是否出现以下异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| # ====================================================================================================== # 如下异常: # ERR Failed to dial a quic connection error="failed to dial to edge with quic..." # ====================================================================================================== # quic 基于 udp, 而 udp 在国内很容易被运营商网络阻断, 需要切换成 http2 # 需要修改下 cloudflared 启动配置: sudo systemctl stop cloudflared.service # 先停止下系统服务 sudo vim /etc/systemd/system/cloudflared.service # 修改系统服务文件 # 1. 找到 ExecStart= 启动配置 # 2. 追加 '--protocol http2', 比如: /usr/bin/cloudflared --no-autoupdate --protocol http2 tunnel run --token <your_token> sudo systemctl daemon-reload # 更新系统服务 sudo systemctl start cloudflared.service # 注意: 切换 http2 也不一定有效, 因为国内特殊网络国情导致指不定网络抽风时候阻断, 这也是没有办法的 # ======================================================================================================
# ====================================================================================================== # 如下异常: # WRN The user running cloudflared process has a GID (group ID) that is not within ping_group_range # ====================================================================================================== # 容器内用户的组 ID 不在系统允许的 ping 权限范围内, 导致 ICMP 代理功能被禁用, 这是警告而非错误, 不影响隧道核心功能,可忽略 # 如果要解决可以修改下 sysctl: echo "net.ipv4.ping_group_range=0 65535" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 这个配置其实挺有用, 用于暴露给 cloudflared 进程做延迟判断 # ======================================================================================================
# ====================================================================================================== # 如下异常: # ERR Failed to fetch features, default to disable error="lookup cfd-features.argotunnel.com..." # ====================================================================================================== # 需要检查 /etc/resolv.conf 是否有正确配置 DNS 解析, 现在发行版采用 systemd-resolved.service 来做解析管理 # 确认是不是 resolv.conf 出现 nameserver 127.0.0.53, 如果是的话需要针对网卡追加dns解析器 sudo vim /etc/systemd/resolved.conf # 修改内部的 # # DNS=223.5.5.5 180.184.1.1 1.1.1.1 1.2.4.8 # # FallbackDNS=223.6.6.6 180.184.2.2 1.0.0.1 210.2.4.8 # 之后更新配置生效 sudo systemctl restart systemd-resolved # ======================================================================================================
|
一般主要问题就是 quic 阻断和 resolv 解析问题, 处理完能够看到默认心跳已经链接:

这样的话就可以通过 cockpit 页面去做运维操作.