cloudflared穿透网络,暴漏服务到公网

cloudflared 是 Cloudflare提供的一款命令行工具,主要用于连接你的本地服务与 Cloudflare 的边缘网络,实现 安全、可靠、免暴露公网 IP 的访问方式。它的核心功能是通过创建一个 Cloudflare Tunnel(原名 Argo Tunnel),将本地服务暴露到互联网上,同时仍享受 Cloudflare 的防护和加速。


d357571df4895e1de2d57837ec1a3b02.png

核心用途

功能 说明
Cloudflare Tunnel(Argo Tunnel) 将本地服务安全地暴露在公网而不需开放端口或使用反向代理
访问控制 可结合 Cloudflare Access 做 Zero Trust 访问管理
负载均衡与高可用 支持配置多个 Tunnel 实现多节点负载均衡
自定义域名接入 本地服务可映射到你在 Cloudflare 上的域名 (login)
无需公网 IP / 防火墙穿透 利用 Cloudflare 网络中转,无需暴露服务器 IP

常见场景

  • 内网 Web 服务暴露(如开发环境、内网管理面板)
  • 将本地机器作为 webhook 或 API 的 endpoint
  • 避免服务器暴露公网 IP 的安全风险
  • 安全部署无公网的 IoT 设备
  • Zero Trust 架构中的关键组件

安装示例

linux

1
2
3
4
5
6
7
8
# 下载 cloudflared
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared

# 添加执行权限
chmod +x cloudflared

# 移动到系统路径
sudo mv cloudflared /usr/local/bin/

macos

brew install cloudflared

快速开始(临时暴漏服务)

假设你有一个运行在本地 localhost:8000 的 Web 服务:

1
cloudflared tunnel --url http://localhost:8000

运行后,它会给出一个 .trycloudflare.com 的临时域名用于访问该服务。


生产环境部署

  1. 登录 Cloudflare 并注册 Tunnel

    1
    cloudflared login

    会打开浏览器,让你登录 Cloudflare 并选择一个域名授权。

  2. 创建 Tunnel

    1
    cloudflared tunnel create my-tunnel
  3. 配置本地服务与域名
    编辑 ~/.cloudflared/config.yml

    1
    2
    3
    4
    5
    6
    7
    tunnel: my-tunnel
    credentials-file: /root/.cloudflared/my-tunnel.json

    ingress:
    - hostname: dev.example.com
    service: http://localhost:8000
    - service: http_status:404
  4. 运行 Tunnel

    1
    cloudflared tunnel run my-tunnel

配置文件路径和格式(Linux)

默认路径:

1
2
3
/etc/cloudflared/config.yml
# 或
~/.cloudflared/config.yml

示例配置:

1
2
3
4
5
6
7
tunnel: my-tunnel
credentials-file: /root/.cloudflared/my-tunnel.json

ingress:
- hostname: service.example.com
service: http://localhost:8000
- service: http_status:404