目录

创建本地管理的 Cloudflare Tunnel

Cloudflare Tunnel 为你提供一种安全的方式来将你的资源与 Cloudflare 连接,而无需一个公有可路由的 IP 地址。使用 Tunnel,你不会向外部 IP 发送流量——相反,你的基础架构中的一个轻量级守护程序 (cloudflared) 会创建仅出站的连接到 Cloudflare 的全球网络。Cloudflare Tunnel 可以安全地将 HTTP Web 服务器、SSH 服务器远程桌面 和其他协议连接到 Cloudflare。这样,你的源站就可以通过 Cloudflare 处理流量,而不会受到绕过 Cloudflare 的攻击的影响。

工作原理

Cloudflared 在你的资源和 Cloudflare 的全球网络之间建立出站连接(隧道)。隧道是将流量路由到 DNS 记录的持久对象。在同一个隧道内,你可以根据需要运行任意数量的 cloudflared 进程(连接器)。这些进程将建立与 Cloudflare 的连接并将流量发送到最近的 Cloudflare 数据中心。

https://developers.cloudflare.com/assets/handshake_hufad68abf6107ffc2ef859ebe1b42b6e2_299675_1768x1102_resize_q75_box-3f75968f.jpg

先决条件

在开始之前,请确保你:

1. 安装 cloudflared

Windows

  1. 在你的设备上下载 cloudflared。访问下载页面找到适合你操作系统的正确软件包。
  2. 将可执行文件重命名为 cloudflared.exe
  3. 在 PowerShell 中,将目录更改为你的 Downloads 文件夹并运行 .\cloudflared.exe --version。它应该会输出 cloudflared 的版本。请注意,如果你没有重命名 cloudflared.exe,它可能是 cloudflared-windows-amd64.execloudflared-windows-386.exe
1
PS C:\Users\Administrator\Downloads\cloudflared-stable-windows-amd64> .\cloudflared.exe --version

macOS

要下载并安装 cloudflared:

1
brew install cloudflared

或者,你可以直接下载最新的 Darwin amd64 版本

Linux

Debian 和 Ubuntu APT

在兼容的设备上使用 apt 包管理器安装 cloudflared。

  1. 添加 Cloudflare 的软件包签名密钥:
1
2
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
  1. 将 Cloudflare 的 apt 仓库添加到你的 apt 仓库中:
1
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
  1. 更新仓库并安装 cloudflared:
1
sudo apt-get update && sudo apt-get install cloudflared

RHEL RPM

在兼容的设备上使用 rpm 包管理器安装 cloudflared。

  1. 添加 Cloudflare 的仓库:
1
curl -fsSL https://pkg.cloudflare.com/cloudflared-ascii.repo | sudo tee /etc/yum.repos.d/cloudflared.repo
  1. 更新仓库并安装 cloudflared:
1
sudo yum update && sudo yum install cloudflared

Arch Linux

cloudflared 在 Arch Linux 的社区仓库中。在兼容的设备上使用 pacman 安装 cloudflared。

1
pacman -Syu cloudflared

其他

或者,你可以将 cloudflared 二进制文件或 linux 软件包下载到设备并手动安装。访问下载页面找到适合你操作系统的正确软件包。

从源代码构建

要从源代码构建 cloudflared 的最新版本:

1
2
3
4
git clone https://github.com/cloudflare/cloudflared.git
cd cloudflared
make cloudflared
go install github.com/cloudflare/cloudflared/cmd/cloudflared

根据你安装 cloudflared 的位置,你也可以将其移动到一个已知路径。

1
mv /root/cloudflared/cloudflared /usr/bin/cloudflared

2. 验证 cloudflared

1
cloudflared tunnel login

运行此命令将:

  • 打开一个浏览器窗口并提示你登录你的 Cloudflare 帐户。登录帐户后,选择你的主机名。
  • 默认 cloudflared 目录中生成一个帐户证书,cert.pem 文件。

3. 创建一个隧道并为其命名

1
cloudflared tunnel create <NAME>

运行此命令将:

从命令的输出中,记下隧道的 UUID 和你的隧道凭证文件的路径。

通过运行以下命令确认隧道已成功创建:

1
cloudflared tunnel list

4. 创建一个配置文件

  1. 在你的 .cloudflared 目录中,使用任意文本编辑器创建一个 config.yml 文件。此文件将配置隧道以将流量从给定的源站路由到所选的主机名。

  2. 将以下字段添加到文件中:

如果你正在连接一个应用程序:

1
2
3
url: http://localhost:8000
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json

如果你正在连接一个私有网络:

1
2
3
4
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
warp-routing:
  enabled: true
  1. 通过运行以下命令确认配置文件已成功创建:
1
cat config.yml

5. 开始路由流量

  1. 现在分配一个将流量指向你的隧道子域的 CNAME 记录:
  • 如果你正在连接一个应用程序,请将服务路由到一个公共主机名
1
cloudflared tunnel route dns <UUID or NAME> <hostname>
  • 如果你正在连接一个私有网络,请通过隧道路由一个 IP 地址或 CIDR:
1
cloudflared tunnel route ip add <IP/CIDR> <UUID or NAME>
  1. 确认路线已成功建立:
1
cloudflared tunnel route ip show

6. 运行隧道

运行隧道以将来自隧道的传入流量代理到本地源站上运行的任意数量的服务。

1
cloudflared tunnel run <UUID or NAME>

如果你的配置文件具有自定义名称或不在 .cloudflared 目录中,请添加 --config 标志并指定路径。

1
cloudflared tunnel --config /path/your-config-file.yml run <UUID or NAME>

Cloudflare Tunnel 可以将自身安装为 Linux 和 Windows 上的系统服务,以及 macOS 上的启动代理。有关更多信息,请参阅 作为服务运行

7. 检查隧道

你的隧道配置已完成!如果你想获取刚创建的隧道的相关信息,你可以运行:

1
cloudflared tunnel info <UUID or NAME>

你现在可以使用 Cloudflare DNS 将流量路由到你的隧道,或使用 Cloudflare Access 确定谁可以访问你的隧道

实用的命令

使用这些命令通过 CLI 管理本地隧道。

管理隧道

命令 描述
cloudflared tunnel login 会提示一个浏览器窗口,您可以在其中验证您的隧道到您的 Cloudflare 帐户。
cloudflared tunnel list 显示所有活动隧道、其创建的时间和相关连接。使用 -d 标志包含已删除的隧道。
cloudflared tunnel create <NAME or UUID> 创建隧道,将其注册到 Cloudflare edge 并生成凭证文件来运行此隧道。
cloudflared tunnel route 通过隧道路由通信量。
cloudflared tunnel route lb <NAME or UUID> <load balancer name> <load balancer pool> 使用指向隧道的原始池创建负载均衡器。
cloudflared tunnel route ip add <IP/CIDR> <NAME or UUID> 将任何网络路由空间(表示为 CIDR)添加到您的路由表。只要使用 Cloudflare WARP 并注册到运行此处选择的隧道的同一帐户,该网络空间就可供从用户的机器访问的请求访问。此外,这些请求将代理到指定的隧道,并访问给定 CIDR 中的 IP,只要从隧道可以访问该 IP。要将 IP 路由分配给特定 虚拟网络,请使用 --vnet 选项。
cloudflared tunnel route ip show (or list) 显示您的组织的专用路由表。您可以使用其他标志来过滤结果。
cloudflared tunnel route ip delete 从路由表中删除给定 CIDR 的行。WARP 客户端将无法再访问您的网络的该部分。
cloudflared tunnel route ip get <IP/CIDR> 检查路由表的哪一行将用于代理给定的 IP。这有助于检查和验证您的配置。
cloudflared tunnel route dns 创建指向隧道的 DNS CNAME 记录主机名。
cloudflared tunnel --config path/config.yaml run <NAME or UUID> 运行隧道,在您的服务器和 Cloudflare 边缘之间创建高可用连接。您可以提供隧道的名称或 UUID,使其作为最后一个命令行参数运行或使用 tunnel: <NAME> 在配置文件中运行。
cloudflared tunnel info <NAME or UUID> 显示给定隧道(由名称或 UUID 标识)的活动连接器的详细信息。
cloudflared tunnel cleanup <NAME or UUID> 删除具有给定 UUID 或名称的隧道的连接。这在您尝试在 cloudflared 未正常关闭后删除或运行隧道时收到错误(例如,如果发出 kill 命令)时非常有用。
cloudflared tunnel cleanup --connector-id <CONNECTOR-ID> <NAME or UUID> 断开并删除具有给定连接器 ID 的 cloudflared 副本。您可以通过运行 cloudflared tunnel info <NAME or UUID> 查看隧道的全部副本。
cloudflared tunnel delete <NAME or UUID> 删除具有给定名称或 UUID 的隧道。如果隧道有活动连接,则无法删除隧道。要无条件删除隧道,请使用 -f 标志。
cloudflared tunnel vnet add <NAME or UUID> 创建可以分配 IP 路由的虚拟网络。要将此虚拟网络设为您的零信任组织的默认设置,请使用 -d 标志。
cloudflared tunnel vnet delete <NAME or UUID> 删除具有给定名称或 UUID 的虚拟网络。在您可以删除虚拟网络之前,您必须首先删除分配给虚拟网络的所有 IP 路由。
cloudflared tunnel vnet list 显示所有活动虚拟网络、默认虚拟网络及其创建时间。
cloudflared tail <UUID> 开始会话,以从特定隧道实时直播日志。有关详细信息,请参阅 隧道日志

管理 cloudflared

Command Description
cloudflared update 在官方下载服务器上查找新版本。如果存在新版本,它将更新代理二进制文件并退出。否则,不执行任何操作。此命令仅在 cloudflared 从 GitHub 二进制文件或源代码安装时有效。有关更多信息,请参阅 更新说明
cloudflared version 打印 cloudflared 版本号和构建日期。
cloudflared help 显示命令列表或 cloudflared 的帮助。

参考资料