目录
Open 目录
一、CF Tunnel 是什么?
Cloudflare Tunnel 是 Cloudflare 官方提供的一种免费服务,主要功能是: 通过加密隧道连接内网与 Cloudflare 边缘节点,结合自有域名来实现稳定的内网穿透,适合在无公网IP的环境中将搭建的服务安全暴露到公网中。
不过由于 Cloudflare 节点在国内的连通性较差,不能保证最终实现效果。
Cloudflare Tunnel 共有两种方式进行部署,本文主要介绍其在客户端上使用 cloudflared 的完整配置过程,可以结合官方文档一起观看。
二、使用 Cloudflare 官方提供的面板进行安装及管理
在 Zero Trust 左侧菜单栏中,选择网络——>连接器——>Cloudflare Tunnel,再点击创建隧道,按照指示一步步进行即可。
这一方式极为简单,不过多赘述,更详细的步骤可查看官方文档
三、使用 cloudflared 组件进行部署及管理
3.1安装 cloudflared
以 Debian 系统为例,cloudflared 组件有两种安装方式。
(1)Ubuntu/Debian 官方源安装
更新软件源并安装依赖
sudo apt-get update
sudo apt-get install -y wget gnupg lsb-release
添加 Cloudflare 的官方密钥和源
wget -q https://packages.cloudflare.com/cloudflare-main.gpg -O- | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://packages.cloudflare.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare.list
安装 cloudflared
sudo apt-get update
sudo apt-get install -y cloudflared
验证是否安装成功
cloudflared --version
(2)二进制安装
通过 GitHub 仓库下载最新文件
curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o cloudflared
设置可执行权限并移动到系统目录
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/
同样验证是否安装成功
cloudflared --version
3.2 Cloudflare 登录
执行以下命令后会输出一个 URL,在浏览器中打开,登录 Cloudflare 账号并选择要使用的域名进行授权。
cloudflared tunnel login
3.3 创建 Tunnel
创建一个隧道,名字可以自定义。
“<>”记得删除,后续不再重复提示。
cloudflared tunnel create <tunnel-name>
创建成功后,会返回一个Tunnel ID,类似于‘f6dbcecf-aaaa-aaaa-aaaa-abababababab’,请复制下来,后面会用上。如果不小心遗漏了,可以运行下面的命令查看。
ls -la ~/.cloudflared/
3.4 配置 DNS 记录
修改命令中的 tunnel-name 和 domain 为你创建的隧道的名称和想使用的域名。
cloudflared tunnel route dns <tunnel-name> <domain>
3.5 编写配置文件
创建配置目录。
sudo mkdir -p /etc/cloudflared
复制凭证文件到系统目录,要修改 Tunnel-ID
sudo cp ~/.cloudflared/<Tunnel-ID>.json /etc/cloudflared/
sudo chown root:root /etc/cloudflared/<Tunnel-ID>.json
sudo chmod 400 /etc/cloudflared/<Tunnel-ID>.json
配置文件具体内容
sudo tee /etc/cloudflared/config.yml >/dev/null <<'EOF'
tunnel: Tunnel-name
credentials-file: /etc/cloudflared/<Tunnel-ID>.json
ingress:
# HTTP 服务转发
- hostname: domain
service: http://localhost:8080
# 兜底规则(必需)
- service: http_status:404
EOF
Tunnel name 填入隧道名字,Tunnel ID 填入隧道的ID,domain 填入想使用的域名。service 修改服务所在的端口,也可以使用 “http://127.0.0.1:8080” 的方式。
验证配置文件是否有错误。
cloudflared tunnel ingress validate
3.6 配置开机自启动
创建系统服务并运行,
cloudflared service install | systemctl start cloudflared
3.7 配置自动更新
sudo tee /etc/cron.daily/cloudflared-update >/dev/null <<'EOF'
#!/bin/bash
/usr/local/bin/cloudflared update
systemctl restart cloudflared
EOF
设置可执行权限
sudo chmod +x /etc/cron.daily/cloudflared-update
3.8 测试
访问刚才配置的域名,如果能正常访问,说明配置成功;或者前往 Cloudflare Zero Trust 控制台查看Tunnel的状态,显示正常则成功。