Cloudflare Tunnel 搭建指南:轻松暴露本地服务 – wiki词典

Cloudflare Tunnel 搭建指南:轻松暴露本地服务

在现代网络环境中,安全地将本地服务暴露到公共互联网是一个常见的需求,无论是为了测试开发中的应用、搭建个人博客,还是远程访问家庭网络资源。传统方法通常涉及复杂的端口转发和防火墙配置,不仅操作繁琐,还可能引入安全风险。Cloudflare Tunnel(原 Argo Tunnel)提供了一种优雅且安全的解决方案,它允许您无需开放任何入站端口,即可将本地服务安全地连接到 Cloudflare 的全球网络。

本文将详细介绍如何使用 Cloudflare Tunnel 搭建一个安全隧道,将您的本地服务暴露到互联网。

什么是 Cloudflare Tunnel?

Cloudflare Tunnel 是一种反向代理服务,它在您的本地服务器与 Cloudflare 全球网络之间建立一个安全的、出站的连接。这意味着您的本地服务不再需要直接暴露在互联网上,所有流量都通过 Cloudflare 的安全网络进行路由,从而获得 DDoS 防护、WAF(Web Application Firewall)等一系列 Cloudflare 提供的安全和性能优势。

主要优势:
* 无需端口转发: 告别复杂的路由器配置和公共 IP 地址。
* 增强安全性: 所有流量默认加密,利用 Cloudflare 的安全特性保护您的服务。
* 性能优化: 利用 Cloudflare 的全球 CDN 优化访问速度。
* 免费可用: 基本功能对个人用户免费,非常适合个人项目或小型应用。
* 自定义域名: 支持绑定您自己的域名,提供专业的访问体验。

前提条件

在开始搭建之前,请确保您已具备以下条件:

  1. Cloudflare 账户: 拥有一个活跃的 Cloudflare 账户。
  2. 已托管的域名: 您需要一个已在 Cloudflare 上托管并管理 DNS 的域名。
  3. 本地运行的服务: 您的本地机器上有一个正在运行的服务,例如一个 Web 服务器(如 localhost:8000)或 SSH 服务。

搭建指南

步骤 1: 安装 cloudflared

cloudflared 是 Cloudflare Tunnel 的命令行客户端工具,它负责在您的本地机器上建立与 Cloudflare 网络的连接。

macOS:
bash
brew install cloudflare/cloudflare/cloudflared

Linux (Debian/Ubuntu):
bash
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

Windows:
从 Cloudflare 的 GitHub Release 页面下载适用于 Windows 的 .msi 安装程序或 cloudflared-windows-amd64.exe。建议将 cloudflared-windows-amd64.exe 文件重命名为 cloudflared.exe 并将其放置在系统的 PATH 环境变量中,或者一个易于访问的目录(例如 C:\cloudflared\)。

安装完成后,您可以通过运行以下命令验证是否安装成功:
bash
cloudflared --version

步骤 2: 认证 cloudflared

您需要将本地的 cloudflared 客户端与您的 Cloudflare 账户进行认证,以便它能够管理您的隧道。

bash
cloudflared tunnel login

执行此命令后,您的默认浏览器会自动打开一个 Cloudflare 认证页面。请登录您的 Cloudflare 账户,并选择您希望用于此隧道的域名进行授权。成功认证后,Cloudflare 会在您的用户目录下创建一个 .cloudflared 文件夹,并在其中保存一个 cert.pem 证书文件。

步骤 3: 创建一个 Tunnel

接下来,为您的本地服务创建一个新的隧道。给它一个有意义的名称,例如 my-local-app-tunnel

bash
cloudflared tunnel create <YOUR_TUNNEL_NAME>

<YOUR_TUNNEL_NAME> 替换为您自定义的隧道名称。
此命令将生成一个唯一的隧道 ID,并在 ~/.cloudflared/ 目录下创建一个与隧道 ID 对应的 JSON 凭证文件(例如 a1b2c3d4-e5f6-7890-1234-567890abcdef.json)。请记下这个隧道 ID,后续配置会用到。

步骤 4: 配置 Tunnel

为了定义隧道如何将外部请求路由到您的本地服务,您需要创建一个配置文件。在 ~/.cloudflared/ 目录下创建一个名为 config.yml 的文件(如果不存在)。

配置文件的内容示例如下:

“`yaml
tunnel:
credentials-file: /root/.cloudflared/.json

ingress:
– hostname: .yourdomain.com
service: http://localhost:
# 也可以配置其他本地服务
# – hostname: ssh.yourdomain.com
# service: ssh://localhost:22
– service: http_status:404 # 如果以上规则都不匹配,返回404错误
``
请替换以下占位符:
*
: 您在步骤 3 中创建隧道时获得的隧道 ID。
*
.yourdomain.com: 您希望用于访问本地服务的公共子域名(例如dev.example.comblog.yourdomain.com)。
*
: 您的本地服务正在监听的端口(例如3000808080`)。

ingress 部分定义了路由规则。它是一个有序列表,cloudflared 会按顺序匹配规则。当一个请求的 hostname 匹配规则时,cloudflared 会将请求代理到对应的 servicehttp_status:404 是一个通用的回退规则,用于处理所有不匹配前面规则的请求。

步骤 5: 创建 DNS 记录

为了让 Cloudflare 知道如何将流量路由到您的隧道,您需要为您的子域名创建 DNS CNAME 记录。

方法一:使用 cloudflared 命令自动创建 (推荐)
bash
cloudflared tunnel route dns <YOUR_TUNNEL_NAME> <YOUR_SUBDOMAIN>.yourdomain.com

<YOUR_TUNNEL_NAME> 替换为您隧道的名称,将 <YOUR_SUBDOMAIN>.yourdomain.com 替换为您在配置文件中使用的子域名。

方法二:手动在 Cloudflare 仪表盘中添加
1. 登录您的 Cloudflare 仪表盘。
2. 选择您的域名,导航到“DNS”选项卡。
3. 添加一个新的 CNAME 记录:
* 类型 (Type): CNAME
* 名称 (Name): 您的子域名(例如,如果您的完整域名是 dev.example.com,则输入 dev
* 目标 (Target): <TUNNEL_ID>.cfargotunnel.com (这个值可以在您创建隧道后,在 Cloudflare Zero Trust 仪表盘的隧道详情中找到,或者通过 cloudflared tunnel list 命令查看)。
* 代理状态 (Proxy status): 确保是“已代理”(橙色云朵图标),这样才能享受 Cloudflare 的安全和性能优势。

步骤 6: 运行 Tunnel

现在,您可以启动隧道,将您的本地服务通过 Cloudflare 网络暴露到互联网。

bash
cloudflared tunnel run <YOUR_TUNNEL_NAME>

<YOUR_TUNNEL_NAME> 替换为您隧道的名称。

如果一切配置正确,cloudflared 将建立与 Cloudflare 网络的连接,并在命令行界面显示连接状态。此时,您的本地服务已经可以通过您配置的公共子域名访问了。

步骤 7: 验证

打开您的 Web 浏览器,访问您在步骤 5 中配置的子域名(例如 https://dev.yourdomain.com)。您应该能够看到您的本地服务的内容。

额外提示和进阶用法

  • 开机自启: 为了确保隧道在系统重启后自动运行,您可以将 cloudflared 配置为系统服务。具体方法因操作系统而异,通常涉及 systemd (Linux) 或 NSSM (Windows)。
  • 多服务和多域名: 一个隧道可以配置多个 ingress 规则,以暴露不同的本地服务到不同的子域名或路径。
  • 与 Cloudflare Access 结合: Cloudflare Tunnel 可以与 Cloudflare Access 配合使用,为您的隧道添加额外的身份验证和访问控制层,进一步增强安全性。
  • Zero Trust 仪表盘: 登录 Cloudflare Zero Trust 仪表盘,您可以在“Access” -> “Tunnels”下管理您的所有隧道,查看其运行状态、日志和配置。
  • 性能考量: 免费版的 Cloudflare Tunnel 流量限制为 50GB/月。如果流量超出,可能需要升级到付费计划。

总结

Cloudflare Tunnel 提供了一个强大、灵活且安全的解决方案,让您能够轻松地将本地服务暴露到公共互联网。通过遵循上述步骤,您可以快速设置并运行您的隧道,享受 Cloudflare 带来的安全和性能优势,而无需担心复杂的网络配置。无论是个人开发者、小型团队还是希望简化远程访问的用户,Cloudflare Tunnel 都是一个值得探索的工具。

希望这篇指南能帮助您成功搭建 Cloudflare Tunnel!

滚动至顶部