关键词:Cloudflare Tunnel教程, OpenWrt内网穿透, NAS外网访问, Cloudflare Zero Trust, 内网穿透, 免费内网穿透, 家庭实验室, Homelab, 软路由设置, DDNS替代方案, 端口转发替代, 能够防御DDoS攻击的内网穿透, 解决CGNAT问题, 极客DIY
在家庭宽带公网 IPv4 资源日益枯竭的今天,如何优雅、安全地从外网访问家里的 NAS、软路由(OpenWrt)以及各种 Docker 服务,是每一位折腾党(Homelab 爱好者)必须面对的终极课题。
传统的端口转发(Port Forwarding)方案不仅需要你有公网 IP(这在目前的大运营商环境下越来越难申请),还直接将你家里的设备裸露在复杂的互联网环境中,极易遭受扫描和攻击。而类似 Frp 的方案虽然灵活,但需要一台带有公网 IP 的 VPS 进行中转,不仅有成本,速度还受限于 VPS 的带宽。
今天,我们要介绍的是目前的“版本答案”——Cloudflare Tunnel(原名 Argo Tunnel)。它不仅完全免费,不需要公网 IP,不需要 VPS 中转,还能利用 Cloudflare 全球庞大的 CDN 网络加速你的访问,最重要的是,它自带企业级的 Zero Trust(零信任)安全防护,能把攻击者死死挡在门外。
本教程将基于 OpenWrt 软路由环境,手把手教你部署 Cloudflare Tunnel,实现外网无公网 IP 直连家中 OpenWrt 后台(192.168.1.1)和 NAS 服务(192.168.1.162:5000)。哪怕你是零基础小白,只要跟着做,也能轻松搞定。
为什么选择 Cloudflare Tunnel?(痛点分析与技术优势)
在开始实操之前,我们先聊聊为什么要折腾这个。很多新手可能会问:“我用 QuickConnect 或者买个花生壳不也行吗?”
1. 彻底解决无公网 IP 的痛点(CGNAT)
国内运营商(移动、联通、电信)现在普遍使用 CGNAT 技术,分给家庭宽带的 IP 往往是内网 IP(10.x.x.x 或 100.x.x.x 开头)。这意味着你无论怎么在路由器上做端口转发,外网都无法访问。Cloudflare Tunnel 采用的是主动出站的模式,路由器主动连接 Cloudflare 的边缘节点,建立一条加密隧道。只要你的路由器能上网,这条隧道就能通,彻底无视公网 IP 的限制。
2. 安全性吊打端口映射
传统的端口映射相当于把你家的防盗门(防火墙)开了个洞,黑客扫描到你的 IP 和端口后,可以直接尝试爆破你的 NAS 登录页。 而 Cloudflare Tunnel 根本不需要你在路由器上开任何端口。外部访问流量是先到达 Cloudflare 的服务器,经过清洗(WAF 防火墙、DDoS 防护)后,才通过隧道传回你家。你甚至可以在 Cloudflare 上设置“Access 策略”,比如“只有通过谷歌邮箱验证的人才能访问”,这相当于给你的 NAS 加了一道隐形的防盗门。
3. 免费且强大的 HTTPS 支持
以前做内网穿透,配置 SSL 证书(HTTPS)是一场噩梦,需要申请证书、续期、配置 Nginx。Cloudflare Tunnel 自带 SSL 证书管理,你只需要在后台点几下,分配一个域名,Cloudflare 会自动为你通过隧道传输的流量加上 HTTPS 锁,浏览器再也不会提示“不安全”。
准备工作
在开始之前,请确保你准备好了以下几样东西:
一个域名:必须托管在 Cloudflare 上。如果你还没有,去 Namecheap 或腾讯云买一个便宜的(几块钱一年),然后修改 DNS 服务器(Nameservers)指向 Cloudflare。
Cloudflare 账号:去 cloudflare.com 注册一个免费账号。
OpenWrt 软路由:作为家庭网络的网关(假设 IP 为 192.168.1.1),并且已经联网。
内网服务:比如你的 NAS(假设 IP 为 192.168.1.162,端口 5000)。
详细部署步骤
第一阶段:在 Cloudflare Dashboard 创建隧道
在这个阶段,我们要在 Cloudflare 的控制台上“云端”建立一条隧道,并获取连接所需的密钥(Token)。
步骤 1:进入 Zero Trust 面板 登录 Cloudflare 后,在左侧侧边栏找到并点击 Zero Trust。首次进入可能需要你填一些团队名称信息,随便填即可(选择 Free 免费计划)。
(参考下图:点击左侧边栏的 Zero Trust,注意:不要进入你托管域名的界面)

步骤 2:找到 Tunnels 设置项 进入 Zero Trust 面板后,点击左侧菜单的 Networks(网络),然后点击 Connectors(连接器)。在这里你会看到 Tunnels(隧道)的选项。点击中间蓝色的 Create Tunnel(创建隧道)按钮。
(参考下图:点击 Create Tunnel)


步骤 3:选择隧道类型 系统会让你选择连接器类型。这里一定要选择左边的 Cloudflared(推荐),不要选右边的 WARP Connector。Cloudflared 是专门用于服务器和网络设备穿透的守护进程。选好后点击下一步。
(参考下图:选择 Cloudflared)

步骤 4:命名隧道 给你的隧道起个名字,比如 Home-Router 或 My-OpenWrt,方便以后识别。点击 Save tunnel。
(参考下图:输入隧道名称)

步骤 5:获取关键的 Token 这是最关键的一步!系统会显示在不同操作系统下的安装命令(Windows, Mac, Debian, Docker 等)。 虽然我们的 OpenWrt 是基于 Linux 的,但我们使用插件安装,不需要复制整段命令。 请注意看“安装并运行连接器”区域下方的代码块。 找到代码中 --token 后面的一长串字符(以 eyJh 开头的那串乱码)。 复制这串 Token,保存到你的记事本里,稍后在 OpenWrt 上要用。
(提示:虽然截图中未直接展示 Token 复制动作,但请务必在此步骤仔细复制)
第二阶段:在 OpenWrt 上安装并配置 Cloudflared
现在回到你的软路由 OpenWrt 后台。我们需要安装 Cloudflare 的客户端插件。
步骤 1:安装软件包
登录 OpenWrt 后台,点击菜单栏的 系统 (System) -> 软件包 (Software)。
点击 更新列表 (Update lists),等待刷新完成。
在“过滤器”输入框中输入
cloudflared。你需要安装以下三个包(通常安装
luci-app-cloudflared会自动安装依赖):cloudflared(核心程序)luci-app-cloudflared(图形化界面)luci-i18n-cloudflared-zh-cn(中文语言包,方便小白操作)
(参考下图:在软件包管理器中搜索并安装)

步骤 2:配置插件 安装完成后,刷新页面。
点击菜单栏的 服务 (Services)(或者 VPN,取决于固件版本,截图显示在 VPN 菜单下)。
找到 Cloudflare 零信任隧道 (Cloudflare Zero Trust Tunnel) 并点击进入。
(参考下图:进入插件配置界面)

步骤 3:填入 Token 并启动
勾选 启用 (Enable)。
在 令牌 (Token) 输入框中,粘贴你刚才在 Cloudflare 网页上复制的那串
eyJh...开头的字符。点击页面底部的 保存并应用 (Save & Apply)。
步骤 4:验证连接状态 配置保存后,等待约 10-30 秒。 回到 Cloudflare Zero Trust 的网页控制台。在刚才获取 Token 的页面底部点击 Next,或者直接去 Tunnels 列表页面。 如果你看到你的隧道状态(Status)变成了绿色的 Healthy(健康)或 Active(活动),说明 OpenWrt 已经成功打通了去往 Cloudflare 的隧道!
(参考下图:隧道列表中显示 Active)
第三阶段:配置外网访问(Public Hostnames)
隧道打通了,但这只是一条路。现在我们要告诉 Cloudflare,当用户访问某个域名时,要把流量送到内网的哪个 IP 上。
步骤 1:添加 Public Hostname 在 Cloudflare Zero Trust 面板的 Tunnels 列表中,点击你刚才创建的隧道右侧的三个点(Configure),进入配置页面。 点击上方的 Public Hostname(已发布应用程序路由)标签页。 点击蓝色的 Add a public hostname(添加已发布应用程序路由)按钮。
(参考下图:点击添加路由)

步骤 2:配置 OpenWrt 后台访问 假设你想用 router.xxx.com 访问 OpenWrt 后台。
Subdomain (子域):输入
router。Domain (域):在下拉菜单中选择你的域名
xxx.com。Service (服务):
Type (类型):选择
HTTP。URL:输入 OpenWrt 的内网地址
192.168.1.1。
点击右下角的 Save hostname。
(参考下图:填写详细路由信息)

步骤 3:配置 NAS 访问 再次点击 Add a public hostname,我们要添加 NAS 的映射。 假设你想用 nas.xxx.com 访问 NAS。
Subdomain (子域):输入
nas。Domain (域):选择
xxx.com。Service (服务):
Type (类型):通常 NAS 的 Web 界面是
HTTP(如果是群晖且开了强制 HTTPS,这里选 HTTPS,并在 Additional Settings 里把 No TLS Verify 打开)。这里我们按标准 HTTP 填写。URL:输入 NAS 的内网地址加端口,例如
192.168.1.162:5000。
点击 Save hostname。
进阶与优化(重要!)
做完以上步骤,你已经在全球任何地方都能通过 https://router.xxx.com 和 https://nas.xxx.com 访问家里的设备了。但为了安全和稳定,建议阅读以下进阶内容。
1. 开启 Zero Trust 身份验证(给你的 NAS 加把锁)
虽然你的 NAS 暴露到了公网,但我们不希望任何人都能看到登录界面。我们可以利用 Cloudflare Access 添加一层 Google 邮箱验证。
在 Zero Trust 面板左侧,点击 Access -> Applications。
点击 Add an application -> Self-hosted。
输入 Application Name(如 My NAS),设置 Session Duration(会话有效期,如 24小时)。
在域名处填入
nas.xxx.com。下一步 Policy(策略):
Rule name:
Allow EmailAction:
AllowConfigure rules: 选择
Emails,在 Value 里填入你自己的邮箱地址。
保存。 这样配置后,任何人访问
nas.xxx.com,都会先弹出一个 Cloudflare 的拦截页面,要求输入邮箱验证码。只有你邮箱收到验证码并填入后,才会跳转到 NAS 的真实登录界面。这是极高的安全保障。

2. 故障排查(Troubleshooting)
502 Bad Gateway:这通常意味着 Cloudflare 连接到了你的 OpenWrt,但 OpenWrt 无法连接到目标 IP(192.168.1.162)。请检查 OpenWrt 能否 Ping 通 NAS,或者检查刚才在 Public Hostname 里端口是否填错。
隧道状态 Degraded:通常是网络波动。如果一直这样,尝试重启 OpenWrt 上的 Cloudflared 插件。
HTTP vs HTTPS:在配置 Service URL 时,如果你的内网服务(如群晖)强制开启了 HTTPS,那么 Type 必须选 HTTPS,并且在 Additional application settings -> TLS 中,勾选 No TLS Verify(不验证 TLS),否则因为内网证书自签名的问题,Cloudflare 会拒绝连接。
3. 性能提示
Cloudflare Tunnel 走的是 Cloudflare 的全球网络。在国内,访问速度受限于 Cloudflare 与国内运营商的连接质量。通常来说,移动宽带体验较好,电信联通可能在晚高峰有延迟。但这对于管理后台、Web 浏览来说完全足够。如果你需要传输大文件(如看 NAS 里的 4K 电影),速度可能会让你失望,这种场景建议还是结合 IPv6 或其他点对点方案。
4. (进阶)手动获取证书与配置文件上传
注意:此步骤仅适用于不想使用 Token 一键连接,或者需要手动管理特定隧道的高级用户。对于大多数用户,前文的 Token 方法已经足够。但如果你在 OpenWrt 界面看到了 “上传文件” 的红框并想知道如何使用,请按照以下步骤操作:
你截图中红框标注的“上传文件”功能,是允许你将电脑上生成的授权证书(cert.pem)直接传给路由器,用于建立更底层的连接。
1. 在电脑上生成证书 (cert.pem)
你需要先在电脑(Windows/Mac/Linux)上运行 Cloudflare 工具来获取授权文件。
下载工具:访问 Cloudflare 官网下载对应你电脑系统的
cloudflared命令行工具。登录授权:
打开电脑的终端(CMD 或 Terminal),连接你的 openwrt。
输入命令:
cloudflared tunnel login并回车。终端会显示一个 URL 网址,复制它并在浏览器打开。
登录你的 Cloudflare 账号,选择你的域名(如
oool.cc),点击 Authorize(授权)。


获取文件:
授权成功后,网页会提示证书已生成,会自动下载证书。
文件位置:
Windows:
%USERPROFILE%\.cloudflared\cert.pemMac/Linux:
~/.cloudflared/cert.pem
2. 上传至 OpenWrt
回到你的 OpenWrt 截图界面:
点击
/etc/cloudflared/cert.pem下方的 “上传文件...” 按钮。选择你刚才在电脑上生成的
cert.pem文件。上传成功后,界面会显示该文件的大小和修改时间。
(可选)如果你有手动编写的
config.yml,也可以通过同样的方式上传到下方的位置。

这样做的好处是,你的路由器拥有了完整的域名管理权限,可以直接通过命令行创建和删除隧道,而不仅仅是被动连接。
最终的样子

总结
通过本文的教程,你利用闲置的域名和强大的 Cloudflare Zero Trust 平台,免费搭建了一套企业级的内网穿透系统。它不需要你通过复杂的技术去维护服务器,不需要担心公网 IP 的变化,更不需要担心端口扫描带来的安全隐患。
对于 Homelab 玩家来说,OpenWrt + Cloudflare Tunnel 简直是天作之合。希望这篇万字长文级别的详细教程能帮你彻底打通内外网的隔阂,随时随地掌控家中的数字资产。
本文首发于E路领航 (blog.oool.cc),转载请注明出处