Skip to content

Cloudflare Tunnel 配置指南

本文档描述了如何配置和管理 Cloudflare Tunnel 来代理本地开发服务。

概述

我们使用一个 Cloudflare Tunnel (hugo-dev) 来管理多个本地开发服务的外网访问,包括:

  • Hugo 开发服务器 (dev.jimmysong.iolocalhost:1313)
  • n8n 工作流平台 (n8n.jimmysong.iolocalhost:5678)

隧道配置

隧道信息

  • 隧道名称: hugo-dev (历史原因保留,实际用作多服务隧道)
  • 隧道 ID: YOUR_TUNNEL_ID
  • 配置文件: ~/.cloudflared/dev-services-config.yml
  • 凭证文件: ~/.cloudflared/YOUR_TUNNEL_ID.json

配置文件结构

# Cloudflare Tunnel: 开发环境多服务隧道
# 隧道名称:hugo-dev (历史原因保留此名称,实际用作多服务隧道)
tunnel: hugo-dev
credentials-file: ~/.cloudflared/YOUR_TUNNEL_ID.json

ingress:
  # Hugo 开发服务器
  - hostname: dev.jimmysong.io
    service: http://localhost:1313
  # n8n 工作流自动化平台
  - hostname: n8n.jimmysong.io
    service: http://localhost:5678
  # 可以在这里添加更多开发服务
  # - hostname: app.jimmysong.io
  #   service: http://localhost:3000
  # Catch-all rule, this should be last!
  - service: http_status:404

管理命令

启动隧道

# 启动隧道 (需要取消代理环境变量)
nohup env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY \
  cloudflared tunnel --config ~/.cloudflared/dev-services-config.yml \
  run hugo-dev > /tmp/dev-services-tunnel.log 2>&1 &

查看状态

# 查看所有隧道状态
cloudflared tunnel list

# 查看隧道详细信息
cloudflared tunnel info hugo-dev

# 查看运行进程
ps aux | grep cloudflared | grep -v grep

# 查看日志
tail -f /tmp/dev-services-tunnel.log

停止隧道

# 停止所有 cloudflared 进程
pkill cloudflared

DNS 配置

以下域名已配置 CNAME 记录指向隧道:

域名 本地服务 用途
dev.jimmysong.io localhost:1313 Hugo 开发服务器
n8n.jimmysong.io localhost:5678 n8n 工作流平台

添加新服务

要添加新的本地服务到隧道:

  1. 停止隧道:
pkill cloudflared
  1. 编辑配置文件:
vim ~/.cloudflared/dev-services-config.yml

ingress 段添加新的服务路由:

- hostname: new-service.jimmysong.io
  service: http://localhost:PORT
  1. 配置 DNS 记录:
cloudflared tunnel route dns hugo-dev new-service.jimmysong.io
  1. 重启隧道:
nohup env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY \
  cloudflared tunnel --config ~/.cloudflared/dev-services-config.yml \
  run hugo-dev > /tmp/dev-services-tunnel.log 2>&1 &

故障排除

常见问题

  1. 多个隧道进程冲突
# 问题:同时运行多个 cloudflared 进程
ps aux | grep cloudflared | grep -v grep

# 解决方案:使用清理命令
make tunnel ACTION=clean
# 或
./tools/tunnel-manager.sh clean
  1. 配置文件冲突
# 问题:项目本地配置与全局配置冲突
# 检查是否存在冲突配置
ls -la .cloudflared/config.yaml
ls -la ~/.cloudflared/dev-services-config.yml

# 解决方案:移除项目本地配置(推荐使用全局配置)
mv .cloudflared/config.yaml .cloudflared/config.yaml.backup
  1. Error 1033: 隧道无法连接
  2. 检查隧道是否正在运行:cloudflared tunnel list
  3. 查看日志:tail -f /tmp/dev-services-tunnel.log
  4. 确认本地服务是否启动:curl http://localhost:PORT

  5. 连接超时: 可能是代理导致

  6. 确保启动时使用了 env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY
  7. 检查防火墙设置

  8. DNS 解析问题:

  9. 等待 DNS 传播 (通常几分钟)
  10. 使用 dignslookup 验证 DNS 记录

日志位置

  • 隧道日志: /tmp/dev-services-tunnel.log
  • Cloudflare 配置目录: ~/.cloudflared/

安全注意事项

  • 凭证文件 (*.json) 包含敏感信息,不应提交到版本控制
  • 本地服务只通过隧道暴露,不直接暴露在公网
  • 隧道连接使用 TLS 加密

参考链接