OpenWrt 配置 Cloudflare Zero Trust (Tunnel) 实现内网穿透:告别公网 IP

在家庭宽带公网 IPv4 资源日益枯竭的今天,想要在外网访问家里的软路由、NAS 或智能家居变得越来越困难。传统的 DDNS 需要公网 IP,FRP 需要一台有公网 IP 的 VPS 中转。

之前,我们通过 部署 Lucky 配置DDNS与反向代理 的方式实现了实现了 IPV6 + HTTPS 外网访问家庭 NAS,但有些网友不想暴露自己的IPV6 公网地址。

而 Cloudflare Tunnel (Zero Trust) 则是目前的最好的解决方案:

  • 无需公网 IP:即使是大内网 IP 也能穿透。
  • 无需配置端口映射:路由器防火墙端口全关也能用,安全性极高。
  • 免费且速度尚可:依托 Cloudflare 庞大的全球 CDN 节点。

Cloudflare Tunnel 与 Lucky 全方位对比表

特性 Cloudflare Tunnel Lucky (配合 DDNS/IPv6)
公网 IP 需求 不需要 (大内网可用) 刚需 (IPv4 或 IPv6)
访问速度 (受限于 CF 节点) 极快 (取决于自家上行带宽)
流媒体播放 (Plex/Emby) ❌ 不推荐 (卡顿/违规风险) ✅ 非常推荐 (原画直出)
Web 管理页面访问 ✅ 推荐 (速度够用,安全性高) ✅ 推荐 (速度快)
安全性 隐藏 IP 暴露端口
配置难度
客户端要求 有网就能访问 访问端也需支持 IPv6(针对 IPv6 场景)

最终推荐:怎么选

  • 方案 A:“纯小白” 或 “只有大内网 IPv4”:Cloudflare Tunnel
  • 方案 B:“影音党” (NAS/Emby/Plex 用户) 且有 IPv6:Lucky
  • 方案 C:资深玩家的“最佳实践” (我强烈推荐的混合方案):Cloudflare Tunnel + Lucky 双修

将 OpenWrt 后台、NAS 管理页面、Portainer 等纯网页管理界面,通过 Cloudflare Tunnel 穿透。这些页面流量小,对延迟不敏感,但对安全性要求高。
将 Emby、Plex、Alist、大文件下载服务,通过 Lucky 进行 IPv6 DDNS 解析和反向代理。这些服务流量大,需要直连的高速度。即使暴露端口,因为不是核心管理权限,风险相对可控(配合 Lucky 的黑白名单功能)。


一、准备工作

在开始之前,请确保你拥有以下条件:

  1. 一个域名:必须托管在 Cloudflare 上。(免费域名 / 购买域名
  2. OpenWrt 软路由:本教程使用OpenWrt 的 Cloudflare 零信任隧道 插件实现。
  3. Cloudflare 账号Cloudflare 开通 Zero Trust 免费版。

二、Cloudflare 端配置

1. 开启 Zero Trust

登录 Cloudflare 仪表盘,点击左侧菜单的「Zero Trust」点击右侧的「Get started」。

选择您的团队名称,这里随便填写,后期可修改。

选择免费计划

这里会提示「添加付款方式」,不用担心,直接点击添加付款方式:

在浏览器的地址栏,我们会看到很长的一个URL地址,我们只保留前面的 https://one.dash.cloudflare.com/,后面的全部删除,然后回车

回车后会直接跳转到选择账户这个界面,我们直接选择么的账户即可进入 Zero Trust 面板。


2. 创建隧道 (Tunnel)

进入 Zero Trust 面板后,点击左侧导航栏的「网络」 -> 「连接器」。 点击页面中间的蓝色按钮「添加隧道」。

选择隧道类型:点击「选择 Cloudflare

命名隧道:给你的隧道起个名字,比如 zoio-Home,然后点击「保存隧道


3. 获取 Token (关键步骤)

页面会跳转到 "安装并运行连接器"。这里我们不需要在电脑上运行命令,我们只需要那个 Token。在安装并运行连接器这里的第 4 条,你会看到一串代码。请找到代码中后面的那长串字符(通常是 ey 开头的一长串乱码),或者直接点击代码框右上角的复制按钮,先粘贴到记事本里备用。


4. 添加应用程序路由

这里是内网穿透的核心:

  • 主机名
    • 子域:输入你想使用的前缀,例如 op
    • :选择你的主域名,例如 wwwzoionet.indevs.in
  • 服务
    • 类型:选择 HTTP (OpenWrt 后台通常是 HTTP)
    • URL:填入内网 IP 和端口。例如 10.10.10.1:80
  • 点击 完成设置

5. 创建完成,记录 隧道ID

点击完成设置后我们的隧道就创建完成了,这里需要我们记录一下 隧道ID 先粘贴到记事本里备用。


6. 添加新的程序路由

我们我们创建隧道右边的三个点,下拉选择「配置」就可以看到我们刚才创建的应用路由信息,如果我们还有其他内网设备需要添加,点击「添加已发布应用程序路由

  • 主机名
    • 子域:输入你想使用的前缀,例如 op
    • :选择你的主域名,例如 wwwzoionet.indevs.in
  • 服务:我们这次添加HTTPS
    • 类型:选择 HTTPS (如 NAS 等需要 HTTPS 链接的内网设备)
    • URL:填入内网 IP 和端口。例如 10.10.10.2:5666

如果添加的服务类型为 HTTPS ,我们还需要额外配置一下 TLS 。

在「其他应用程序设置」这里选择「TLS」,开启「无TLS验证」。

就是告诉 Cloudflare:“我知道这个内网设备的证书是自签名的,不要检查它的合法性,直接连过去就行。”


三、OpenWrt 端配置

现在回到你的 OpenWrt。目前 OpenWrt 配置 Tunnel 主要有两种方式:命令行和 LuCI 界面。为了方便管理,我推荐使用 LuCI 插件 方式。

1. 安装 Cloudflared 插件

登录 OpenWrt 后台,进入「系统」 -> 「软件包」。 点击 「更新列表」。

过滤器中输入 cloudflared。依次安装:

  • cloudflared:主程序
  • luci-app-cloudflared:安装界面
  • luci-app-cloudflared-zh-cn:中文语言包

如果更新列表失败,可以替换为国内源:OpenWrt / ImmoralWRT 常用软件源地址列表及软件源更换教程


2. 配置 Cloudflared 插件

配置令牌:

安装完成后,刷新页面。在「服务」或「VPN」菜单下找到 Cloudflare 零信任隧道

  • 勾选启用 (Enable)
  • Token/令牌 处填入:将第二阶段第 3 步获取的 Token 完整粘贴进去

配置文件:

新建一个文本文件,复制下面代码,命名为:config.yml,保存:(根据自己配置修改)

tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef                                        # 修改为自己的 隧道ID
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json      # 修改为自己的 隧道ID
ingress:
  # 将主机名流量映射到本地服务:例如我们添加的 OpenWrt
  - hostname: op.wwwzoionet.indevs.in
    service: http://10.10.10.1:80
  # 将主机名流量映射到本地服务:例如我们添加的 NAS
  - hostname: fn.wwwzoionet.indevs.in
    service: https://10.10.10.2:5666
  # 如果你有多条规则,依次添加
  - service: http_status:404

源站证书:

源站证书,用于授权客户端充当该区域的源站,按照提示点击 在 https://dash.cloudflare.com/argotunnel 获取证书。

打开 授权 Cloudflare Tunnel 页面,点击 你的域名。

在弹出的界面点击「授权」,即可下载到一个名为 cert.pem 的证书文件。


上传 配置文件 / 源站证书

将我们自己编写 config.yml 文件 和下载的 cert.pem 源站证书 分别上传。

最后点击「保存并应用」,配置完成。


四、验证连接

回到 Cloudflare Zero Trust 的网页。如果在 连接器 列表中,你的隧道状态从 “停用” 变成了绿色的 “正常”,恭喜你,隧道已经打通!

访问测试

现在,拿起手机断开 WiFi,使用 4G/5G 网络,在浏览器输入 http://op.wwwzoionet.indevs.in。你应该能直接看到 OpenWrt 的登录界面了!