Cloudflare 是什么应该不用过多介绍了,本帖聊一下 Cloudflare Tunnel 的用法。
cf tunnel 是什么?
Cloudflare Tunnel 为您提供了一种安全的方式,将您的资源连接到 Cloudflare,而无需公共可路由的 IP 地址。使用 Tunnel,您不会将流量发送到外部 IP 地址,而是在您的基础设施中创建一个轻量级的守护程序,仅向 Cloudflare 的全球网络创建出站连接。Cloudflare Tunnel 可以安全地将 HTTP Web 服务器、SSH 服务器、远程桌面和其他协议连接到 Cloudflare。这样,您的源站可以通过 Cloudflare 提供流量,而不会容易受到绕过 Cloudflare 的攻击。
(摘自官方文档)
有什么用?
tunnel 字面意思一根加密隧道直接从 Cloudflare 网络插到你的服务器,提供 webui 页面方便管理域名与服务器上部署的项目之间的绑定。
- 项目部署上线更简单,只需建立好隧道,然后设置域名指向项目暴露的本地地址和端口即可。
- 无需编写任何 Nginx 配置,非常适合像我这样的懒人或小白用户。
- 无需配置证书,使用加密隧道,项目不会直接暴露到公网上,从而增强了安全性。(ps: 需开启防火墙)
如何工作的?
大致流程为:
用户 —> cf 服务器 —> cf 侧 tunnel 设置入口 --(加密)–> 服务器侧的 tunnel 出口 → 本机项目
开始搭建
1. 在 Cloudflare 的侧边栏中,找到并点击 Zero Trust 菜单。如果是首次使用,需要进行订阅,选择免费套餐进行开通。
2. 在进入 Zero Trust 面板后,从侧边栏中找到并点击 Tunnel 菜单。
3. 创建一条隧道(cf 侧)
3.1 隧道类型选 Cloudflared
3.2 设置隧道名,名字随便取,我个人习惯于取能够辨识服务器的名称。
3.3 安装环境选 Docker,记得复制 docker 的安装命令以备后用。
3.4 不用点下一步,直接在左上角点击返回,即可确认隧道已成功创建。
4. 服务器侧隧道设置
在第 3.3 节中,我们获得了一个类似于以下的 docker 命令:
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9
先别着急用,需要添加几个 docker 参数,注意 network 需要设置为 host。讲一下我之前遇到的坑,docker 启动容器默认会使用桥接模式(bridge),在后面域名绑定时,127.0.0.1:port 是 cloudflared 这个容器内部的地址,如果你的项目也是使用 docker 的桥接模式启动的,那么就无法找到对应的服务。当然也可以用 172.17.0.1:port 这个地址进行绑定,但还是建议让 cloudflared 容器以 host 模式启动。
docker 启动命令
docker run -d --restart always --network host --name cloudflared cloudflare/cloudflared tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9
or
docker-compose 配置
version: '3'
services:
cloudflared:
image: cloudflare/cloudflared
container_name: cloudflared
restart: always
network_mode: host
command: tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9
5. 配置域名和部署项目的绑定
5.1 点击前面创建的隧道 Configure
5.2 添加 Public Hostname
5.3 配置域名与服务器上的项目端口,类型有很多可选的,选 http 即可。
5.4 配置完成后,尝试访问你的域名以确认是否设置成功。