收起左侧

一个 Tunnel 暴露多个服务:域名转发规则 Ingress 详解

0
回复
20
查看
[ 复制链接 ]

3

主题

5

回帖

0

牛值

社区鸿蒙内测组

NAS 上通常不只跑一个服务。你可能有 fnOS 面板、Home Assistant、个人网站、AI 控制台,甚至还有几个临时开发服务。如果每个服务都单独折腾一套远程访问方案,很快就会乱——多个端口要记、多个 DDNS 要配、多个证书要管。

Cloudflare Tunnel 的 Ingress 规则,就是为"一个 Tunnel 转发多个服务"准备的。

解决方案概览

Ingress 规则可以理解为一张映射表:

  • 访问 nas.example.com,转发到内网 NAS 面板(http://127.0.0.1:5666)。
  • 访问 ha.example.com,转发到 Home Assistant(http://192.168.1.20:8123)。
  • 访问 ai.example.com,转发到 AI 控制台(http://127.0.0.1:3000)。

所有服务共享同一个 Tunnel 通道,无需为每个服务单独配置。

什么是 Ingress 规则

Ingress 规则用于把公网 域名映射到内网服务地址。它通常包含两个核心信息:

  1. 域名(Hostname):外部访问时使用的域名,例如 nas.example.com
  2. 服务地址(Service):内网服务的实际地址,例如 http://127.0.0.1:5666

当 Cloudflare 边缘节点收到发往 nas.example.com 的请求后,它会检查 Tunnel 关联的 Ingress 规则,找到匹配的域名,然后将请求转发到对应的内网服务地址。

域名和服务地址怎么填

域名填写

使用清晰的子域名,示例:

  • nas.example.com → NAS 管理面板
  • ha.example.com → Home Assistant 智能家居
  • ai.example.com → AI 控制台(如 Open WebUI)
  • blog.example.com → 个人博客
  • dev.example.com → 开发环境

注意事项:

  • 不要把多个服务混在同一个域名下(例如通过不同路径区分)。每个服务使用独立的子域名,这样更清晰、更易管理。
  • 子域名使用小写字母和连字符,不要使用下划线。

服务地址填写

服务地址要写 NAS 能访问到的内网地址:

  • 本机服务http://127.0.0.1:端口http://localhost:端口。例如 fnOS 面板通常是 http://127.0.0.1:5666
  • 局域网其他设备http://192.168.1.x:端口。例如 Home Assistant 在局域网另一台设备上,IP 为 192.168.1.20,端口为 8123
  • Docker 容器:如果服务运行在 Docker 中,最好将端口映射到主机上,例如 http://127.0.0.1:3000,而不是 http://container-name:3000

验证内网服务可达性:
在 NAS 上执行以下命令,确认服务地址可访问:

curl -I http://127.0.0.1:5666

如果返回 HTTP 状态码(如 200),说明服务地址正确。

配置 Ingress 规则的详细步骤

步骤 1:进入 Tunnel 详情页

  1. 打开 Cloudflare Tunnel fnOS 应用。
  2. 进入「Tunnel 列表」页面。
  3. 确保要配置的 Tunnel 处于「健康」连接状态。

步骤 2:添加 Ingress 规则

  1. 在找到指定的 Tunnel 后,点击「路由」按钮。

    1.png

  2. 在右侧抽屉中,点击右下角的「添加路由」按钮。

    2.png

  3. 在弹窗中填写以下信息:

    • 域名:输入你要使用的子域名,例如 nas.example.com

    • 服务地址:输入内网服务的完整 URL,例如 http://192.168.10.100:5666

    • 不验证内网 HTTPS 证书:如果服务地址是 HTTPS 协议,请勾选此选项。

      3.png

  4. 点击「添加」。

    4.png

步骤 3:配置 DNS 自动创建

  1. 添加规则后,应用会自动尝试创建 CNAME DNS 记录,将子域名指向 Tunnel。

  2. CNAME 记录的目标是 [tunnel-id].cfargotunnel.com

  3. 如果自动创建成功,你会在Cloudflare 控制台中看到 DNS 记录已经创建成功。

    5.png

步骤 4:验证规则是否生效

  1. 确认 Tunnel 状态为「健康」。

  2. 打开浏览器,访问你配置的域名(例如 https://nas.example.com)。

    6.png

  3. 如果页面正常加载,说明规则配置成功。

  4. 如果返回 404 或其他错误,参考下面的排查步骤。

多条规则示例

以下是一个典型的多服务配置:

域名 内网服务地址 用途
nas.example.com http://127.0.0.1:5666 NAS 面板
ha.example.com http://192.168.1.20:8123 Home Assistant
ai.example.com http://127.0.0.1:3000 AI 控制台
blog.example.com http://127.0.0.1:8081 个人博客

DNS CNAME 记录如何处理

Cloudflare Tunnel fnOS 应用可以根据规则自动创建 CNAME DNS 记录。

自动创建的前提条件:

  1. 域名已经接入 Cloudflare(DNS 托管在 Cloudflare)。
  2. API Token 具备 DNS Zone 读取+编辑权限。
  3. 域名归属和 Account ID 对应同一个账号。

自动创建失败时怎么办:

  1. 检查域名是否托管到 Cloudflare:在 Cloudflare 控制台中,确认域名的 DNS 记录页面可以正常显示。
  2. 检查 API Token 权限:确认 Token 包含 DNS Zone 的「读取」和「编辑」权限。
  3. 检查子域名是否属于该 Zone:确认你填写的子域名(如 nas.example.com)确实属于 example.com 这个 Zone。
  4. 查看运行日志:在应用的「运行日志」页面中,查找 DNS 相关的错误信息。
  5. 手动添加 CNAME 记录:如果自动创建始终失败,可以到 Cloudflare 控制台手动添加:
    • 记录类型:CNAME

    • 名称:nas(子域名前缀)

    • 目标:[tunnel-id].cfargotunnel.com

    • 代理状态:开启(橙色云朵图标)

      7.png

如何验证规则是否生效

按以下顺序逐层验证:

  1. 看 Tunnel 是否已连接:在「Tunnel 列表」页面确认状态为「健康」。

  2. 看 DNS 是否生效:在终端执行 dig nas.example.comnslookup nas.example.com,确认解析结果指向 Cloudflare 的边缘 IP。

  3. 看内网服务是否可达:在 NAS 上执行 curl -I http://127.0.0.1:5666,确认返回正常状态码。

  4. 看运行日志:在应用的「运行日志」页面中,查看是否有转发失败或服务不可达的记录。

    8.png

常见问题

1. 一个 Tunnel 可以配置多个域名吗?

可以。Ingress 规则就是用来把多个域名映射到多个内网服务的。一个 Tunnel 可以配置多条规则。

2. 域名能不能直接写根域名?

新手更推荐使用子域名,避免影响主站。根域名(如 example.com)通常已有其他用途,使用子域名更安全、更灵活。

3. 服务地址可以写公网地址吗?

不可以。服务地址必须是内网地址,不要写公网地址。Tunnel 的作用是把公网流量转发到内网,写公网地址没有意义,反而可能导致请求绕路或失败。

4. `127.0.0.1` 和 `localhost` 有什么坑?

如果你的多台内网设备都连接到了同一个 Tunnel,尽量避免使用 127.0.0.1localhost 作为服务地址。因为它们指向的是本机——如果 Tunnel 运行在 NAS 上,127.0.0.1:8123 去的是 NAS 的 8123 端口,但 Home Assistant 可能跑在另一台设备上,根本访问不到。

正确做法:服务在哪台设备上,就用那台设备的局域网 IP(如 192.168.1.x)。

5. 服务地址可以写 HTTPS 吗?

不推荐。内网服务使用 HTTPS 可能会因为证书问题(自签名证书、证书不匹配等)导致 Tunnel 无法正常工作。如果内网服务确实只提供 HTTPS,请在添加路由规则时勾选「不验证内网 HTTPS 证书」。

绝大多数内网服务使用 HTTP 即可,因为内网环境相对安全,Cloudflare 会在边缘节点自动为你的域名提供 HTTPS 加密。

6. Docker 容器服务地址怎么写?

如果服务运行在 Docker 中,建议将容器端口映射到主机上,然后使用 http://宿主机局域网IP:端口号 的形式。同时确保容器处于运行状态且已绑定到正确的端口上。

7. 为什么配置后返回 404?

常见原因包括:访问域名和 Ingress 规则中的域名不一致、DNS 记录还没生效(通常需要 1-5 分钟)、内网服务本身返回 404、服务地址写成了 127.0.0.1 但服务不在本机上。

8. 删除规则会自动删除 DNS 吗?

是否自动清理以应用页面实际行为为准。建议在删除规则后,到 Cloudflare 控制台确认 DNS 记录是否还需要保留。

总结

Ingress 是 Cloudflare Tunnel 的核心能力之一。它让你可以用一个 Tunnel 承载多个内网 Web 服务,用不同子域名访问不同应用。配置时注意:域名写清晰、服务地址写正确、DNS 自动创建失败时手动补上、逐层验证是否生效。

下一期预告

下一篇:Cloudflare API Token 最小权限配置指南 — 了解为什么不用全局 Key,如何创建专用 Token,让 Tunnel 配置更安全。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则