Share

外观
风格

cloudflare-tunnel-multi-service

2026年2月7日 · 技术

Cloudflare Tunnel(多服务入口)

用途:把本机多个服务(如 mt serve)统一暴露到公网,并可通过 Cloudflare Access 做登录保护。

当前状态(2026-02-07)

  • 域名:138000.xyz
  • Tunnel 名称:mom-os
  • Tunnel ID:<REDACTED_TOKEN>
  • cloudflared 版本:2026.2.0
  • MT 公网地址:https://mt.138000.xyz

本机配置位置

  • Tunnel 配置:~/.cloudflared/config.yml
  • Tunnel 凭据:~/.cloudflared/<REDACTED_TOKEN>.json
  • Origin 证书:~/.cloudflared/cert.pem
  • LaunchAgent:~/Library/LaunchAgents/<REDACTED_FILENAME>
  • 运行日志:~/Library/Logs/<REDACTED_FILENAME>

当前 ingress 配置

tunnel: <TUNNEL_ID>
credentials-file: <REDACTED_PATH><TUNNEL_ID>.json

ingress:
  - hostname: mt.138000.xyz
    service: http://127.0.0.1:5700

  - service: http_status:404

运维命令

# 查看 tunnel 列表
cloudflared tunnel list

# 查看 mom-os 状态(连接边缘节点)
cloudflared tunnel info mom-os

# 查看 launchd 状态
launchctl list | grep cloudflared

# 重启 cloudflared(用户级)
launchctl kickstart -k <REDACTED_LAUNCHCTL_PATH>

# 查看运行日志
tail -f ~/Library/Logs/<REDACTED_FILENAME>

新增一个服务(标准流程)

api.138000.xyz -> http://127.0.0.1:8787 为例:

  1. ~/.cloudflared/config.yml 添加 ingress:
- hostname: api.138000.xyz
  service: http://127.0.0.1:8787
  1. 添加 DNS 路由到 tunnel:
cloudflared tunnel route dns mom-os api.138000.xyz
  1. 重启 cloudflared:
launchctl kickstart -k <REDACTED_LAUNCHCTL_PATH>
  1. 连通性验证:
curl -I https://api.138000.xyz

登录保护(Cloudflare Access)

说明:Tunnel 只负责网络连通;登录验证由 Cloudflare Zero Trust 的 Access 负责。

建议:

  • 为每个公开服务创建一个 Self-hosted Application
  • 访问策略先允许 <REDACTED_USERNAME> 自己的邮箱
  • 可叠加 MFA、会话时长等策略

最小策略:

  • Include: 指定邮箱(或邮箱域)
  • Exclude: 无
  • Require: 可选 MFA

迁移与回滚

  • 临时停止公网访问:
    • config.yml 去掉对应 hostname,重启 cloudflared
    • 或在 Cloudflare Dashboard 删除对应 DNS 路由
  • 回滚 tunnel:
    • cloudflared tunnel delete mom-os(谨慎,会移除 tunnel)

备注

  • cloudflared service install 默认只启动 cloudflared 可执行文件,不会自动 tunnel run 指定 tunnel。
  • 需要在 LaunchAgent 里明确写入:
    • --config ~/.cloudflared/config.yml tunnel run mom-os