跳转到内容
搜索文档

通过 Cloudflare Tunnel 连接

最后更新 查看 MarkdownAgent 设置

Cloudflare Tunnel 是一个仅出站的守护程序服务,几乎可以在任何主机上运行,并在从 Cloudflare 网络验证后代理本地流量。从 Cloudflare One Client 发起的用户流量接入到 Cloudflare,穿过你的 Cloudflare Tunnel 连接,并在你的本地网络中自动终止。到达内部应用程序或服务的流量将携带运行 cloudflared 守护进程的主机的本地源 IP 地址。

创建隧道

要连接你的私有网络:

  1. 登录 Cloudflare 仪表板,转到 Networking(网络) > Tunnels(隧道)

    Go to Tunnels ↗
  2. 选择 Create a tunnel(创建隧道)

  3. 为您的隧道输入名称。我们建议选择能够反映您希望通过此隧道连接的资源类型的名称(例如,enterprise-VPC-01)。

  4. 选择 Create Tunnel(创建隧道)

  5. 选择您的操作系统,然后复制安装命令并在您的源服务器的终端上运行。

  6. 等待隧道连接。连接建立后,选择 Continue(继续)

  1. CIDR 选项卡中,输入你的私有网络的 CIDR(例如 10.0.0.0/8)。

  2. 选择 Save tunnel(保存隧道)

  1. 为你的 cloudflare_api_token 添加以下权限:

    • Cloudflare Tunnel Write
  2. 使用 cloudflare_zero_trust_tunnel_cloudflare 资源创建隧道:

    resource "cloudflare_zero_trust_tunnel_cloudflared" "example_tunnel" {
    	account_id = var.cloudflare_account_id
    	name       = "Example tunnel"
    	config_src = "cloudflare"
    }
  3. 使用 cloudflare_zero_trust_tunnel_cloudflared_route 资源将私有网络的 CIDR 路由穿过隧道:

    resource "cloudflare_zero_trust_tunnel_cloudflared_route" "example_tunnel_route" {
    	account_id         = var.cloudflare_account_id
    	tunnel_id          = cloudflare_zero_trust_tunnel_cloudflared.example_tunnel.id
    	network            = "10.0.0.0/8"
    	comment            = "Example tunnel route"
    }
  4. 获取用于运行隧道的 token

    data "cloudflare_zero_trust_tunnel_cloudflared_token" "tunnel_token" {
    	account_id = var.cloudflare_account_id
    	tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.example_tunnel.id
    }

    如果您的主机不是在 Terraform 中管理的,或者您想手动安装该隧道,您可以将令牌值输出到 CLI。

    示例:输出到 CLI

    1. 将隧道令牌输出到 Terraform 状态文件:
      output "tunnel_token" {
      	value       = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token
      	sensitive   = true
      }
    2. 应用该配置:
      terraform apply
    3. 读取隧道令牌:
      terraform output -raw tunnel_token
      eyJhIj...

    或者,直接将 data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token 传递到您主机的 Terraform 配置中,或将该令牌存储在您的机密管理工具中。

    示例:存储在 HashiCorp Vault 中

    resource "vault_generic_secret" "tunnel_token" {
    	path         = "kv/cloudflare/tunnel_token"
    
    	data_json = jsonencode({
    		"TUNNEL_TOKEN" = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token
    	})
    }
  5. 在私有网络的主机上安装 cloudflared 并运行隧道:

    1. 下载并安装 cloudflared

    2. 运行以下命令:

      sudo cloudflared service install <TUNNEL_TOKEN>
    1. 下载并安装 cloudflared

    2. 以管理员身份打开命令提示符。

    3. 运行以下命令:

      cloudflared.exe service install <TUNNEL_TOKEN>
    1. 下载并安装 cloudflared

    2. 打开终端窗口并运行以下命令:

      sudo cloudflared service install <TUNNEL_TOKEN>
    1. 打开终端窗口。

    2. 运行以下命令:

      docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <TUNNEL_TOKEN>

该 IP 范围内的所有内部应用程序和服务现在都已连接到 Cloudflare。

最佳实践

  • 在不同的 Cloudflare 隧道之间隔离生产与预发布流量。
  • 在另一台主机上添加 cloudflared 副本 (Replica),以获得额外的可用性节点。
  • 将关键服务(例如私有 DNS、Active Directory 和其他关键系统)的访问分散在不同的隧道上,以便在服务器侧发生故障时减小爆炸半径。
  • 在 Cloudflare 仪表板中启用通知以监控隧道健康状况。
  • 监控性能指标以识别潜在瓶颈。
  • 定期更新 cloudflared

这篇文档对您有帮助吗?