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 的黑白名单功能)。
一、准备工作
在开始之前,请确保你拥有以下条件:
- 一个域名:必须托管在 Cloudflare 上。(免费域名 / 购买域名)
- OpenWrt 软路由:本教程使用OpenWrt 的 Cloudflare 零信任隧道 插件实现。
- 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 的登录界面了!