这两年折腾内网穿透,基本把市面方案试了个遍:​

  • FRP 反向代理:靠学生优惠白嫖的腾讯云服务器(4 核 4G+6M 带宽)确实香,但三年到期后续费直接翻倍。新买的 2 核 2G 云服务器做中继,转发网页服务勉强够用,但每年上千的续费账单实在肉疼。​

  • 虚拟局域网:Zerotier 打洞成功率确实高,但每次知道服务器位于北美就心慌,生怕哪天断联;换成国人开发的 Easytier 后虽然数据走 P2P 更安全,但穿透率又掉回解放前 —— 现在直接两条腿走路,两套方案互为备份。​

  • Cloudflare Tunnel:最近发现的宝藏方案,用托管在 CF 的域名就能把内网服务甩到公网。虽然节点在国外偶尔抽风,但胜在零成本 + 免备案 + 银行级加密,配个域名 10 分钟搞定,比 FRP 改配置重启服务省心十倍。这次重点讲 Cloudflare Tunnel,就是看中它能把 NAS 低频访问的内网服务,用最低成本稳定暴露到外网。关键数据全程 SSL 加密,比自建 FRP 省了服务器钱还不用操心 DDoS 防护。​

一、前置准备​

域名与账号配置​

  1. 注册 Cloudflare 账号并完成邮箱验证:建议使用 Gmail 等国际邮箱。访问Cloudflare 官,点击右上角 “Sign Up” 进行注册。注册过程中会要求输入邮箱地址并设置密码,注册完成后需前往邮箱完成验证。​

  1. 将已有域名托管至 Cloudflare:进入域名注册商后台(如阿里云、华为云),将 DNS 服务器替换为 Cloudflare 提供的地址(例如mike.ns.cloudflare.com)。以阿里云为例,登录阿里云域名管理控制台,找到对应的域名,点击 “解析”。在 DNS 服务器设置处,将原有的 DNS 服务器地址替换为 Cloudflare 提供的两个名称服务器地址。​

  1. 绑定付款方式:支持国际信用卡、借记卡或 PayPal,仅用于身份验证(支付金额为 0 元,服务免费)。确认是 0 元免费就可以继续支付了,不添加付款方式不让下一步,登录 Cloudflare 控制台后,点击右上角头像,选择 “Account settings”。在 “Billing” 选项卡中,点击 “Add payment method”,按提示输入信用卡或 PayPal 信息完成绑定。​

内网环境要求​

  1. 确保被穿透设备支持:如 NAS、Web 服务器支持 Docker 或本地客户端运行(推荐 Linux 系统或群晖 DSM)。​

  1. 开放设备互联网访问权限:检查防火墙是否放行 Cloudflare 客户端通信端口(如 HTTP/80、HTTPS/443)。若使用群晖 NAS,进入群晖的 “控制面板” - “防火墙”,在 “允许的服务” 中确保 HTTP(端口 80)和 HTTPS(端口 443)已勾选允许访问。​

二、创建 Cloudflare Tunnel 隧道​

进入 Zero Trust 控制台​

登录 Cloudflare 控制台 → 左侧菜单点击 Zero Trust → 进入 Networks > Tunnels 。首次使用需选择免费计划(Free Plan)。登录 Cloudflare 控制台后,在左侧导航栏中找到并点击 “Zero Trust”。在 Zero Trust 页面中,点击 “Networks”,然后选择 “Tunnels”。​

新建隧道​

点击 Create a tunnel → 输入隧道名称(如home - nas)→ 保存。在 “Tunnels” 页面中,点击 “Create a tunnel” 按钮。在弹出的窗口中,输入隧道名称,例如 “home - nas”,然后点击 “Save tunnel”。​

客户端安装​

根据设备系统选择安装方式(推荐 Docker),群晖可以通过矿神源第三方应用进行安装,本质上也是 docker。​

# 拉取官方镜像
docker pull cloudflare/cloudflared:latest
# 运行隧道(替换YOUR_TOKEN为实际令牌)
docker run -d cloudflare/cloudflared tunnel --no - autoupdate run --token YOUR_TOKEN​

若在群晖中通过矿神源第三方应用安装:打开群晖的 “套件中心”,在设置中添加矿神源仓库地址。然后在套件中心搜索 “Cloudflare Tunnel”,找到对应的套件后点击 “安装”。安装过程中,会要求输入隧道令牌(Token)。回到 Cloudflare 的隧道详情页面,复制 “Your tunnel token” 处的令牌并粘贴到群晖安装界面中。安装完成后,在群晖的已安装套件列表中可以看到 “Cloudflare Tunnel”,且状态显示为运行。同时,回到 Cloudflare 的 “Tunnels” 页面,可看到该隧道已连接。

三、配置公网访问规则​

域名映射与协议设置​

在隧道详情页点击 Configure Public Hostname → 选择已托管的域名和子域名(如blog.leitool.top)。设置协议(HTTP/HTTPS)及内网服务地址,比如我的内网服务部署在本地群晖的 8080 端口上,内网服务地址就填http://localhost:8080。支持路径映射(如将/jellyfin指向本地端口 8096)。一个 Tunnel 中可以添加多条三级域名来跳转到不同的内网服务,在 Tunnel 页面的 Public Hostname 中新增即可。​

在 Cloudflare 的隧道详情页面,点击 “Configure Public Hostname”。在弹出的配置窗口中:“Domain” 选择之前托管在 Cloudflare 的主域名;“Subdomain” 填写需要访问的子域名,例如 “blog”;“Type” 根据内网服务类型选择,一般网页服务选 “HTTP”(Cloudflare 会自动添加 HTTPS);“URL” 填写内网服务的 IP 地址和端口号,如 “http://192.168.1.100:8080”(假设群晖内网 IP 为 192.168.1.100,服务端口为 8080)。若要添加路径映射,例如将 “/jellyfin” 指向本地端口 8096,可在配置时,在 “URL” 处填写 “http://192.168.1.100:8096/jellyfin”。​

端口限制说明​

免费版仅支持部分 HTTP/HTTPS 端口(如 80、443、2082 等),需避免使用非常用端口。这样配置好托管的域名和群晖的 IP 和端口即可。​

四、验证与访问​

测试穿透服务​

通过浏览器访问配置的子域名(如https://blog.leitool.top),若显示内网服务页面则成功。若失败,检查客户端日志或 Cloudflare Tunnel 状态。​

打开浏览器,输入配置的子域名,例如 “https://blog.leitool.top”。如果内网服务正常,应能看到对应的网页内容。若访问失败:在群晖的 Cloudflare Tunnel 套件中查看日志,路径为:群晖 “套件中心” - “Cloudflare Tunnel” - “日志”,检查是否有报错信息;同时,回到 Cloudflare 的 “Tunnels” 页面,查看隧道状态是否为 “Connected”,以及 “Public Hostname” 的配置是否正确。​

五、为你的服务添加额外验证​

如果你觉得这种直接暴露内网服务的方式有较高的安全风险,我们还可以使用 Application 功能为服务添加额外的安全验证。​

  1. 点击 Application - Get started。在 Cloudflare 的 Zero Trust 控制台中,点击 “Applications”,然后点击 “Get started”。​

  1. 选择自托管:填写配置,注意域名和子域名需要使用刚刚创建的 Tunnel 服务相同的域名配置。在 “Add an application” 页面中,选择 “Self - hosted”。在后续的配置页面中,“Subdomain” 和 “Domain” 填写与之前 Tunnel 服务相同的子域名和主域名。​

  1. 选择验证方式:填写策略名称(任意)。在添加规则区域选择验证方式,示例中使用的是特定完整邮箱地址。你还可以选择使用指定的邮箱域名(如 @gmail.com)验证、IP 地址范围等方式。完成添加后,访问配置的子域名(如https://blog.leitool.top)会出现一个验证页面,要求输入指定邮箱地址进行验证。在 “Access policies” 部分,填写策略名称。然后在 “Include” 区域选择验证方式,例如选择 “Email address”,并输入特定的邮箱地址,如 “user@example.com”。完成配置并保存后,当访问 “https://blog.leitool.top” 时,会出现一个验证页面,要求输入指定邮箱地址进行验证。​

六、总结与适用场景​

核心优势​

免费、无需公网 IP、集成 DDoS 防护和 HTTPS 加密。​

典型用途​

  1. 家庭 NAS 远程访问:如 Jellyfin 影音服务。​

  1. 自建 GitLab、Nextcloud 等 Web 服务公网暴露。​

  1. 通过 SSH/RDP 隧道安全访问内网设备:需配置 TCP 协议映射。​

群晖搭建 Cloudflare 免费隧道穿透,无公网 IP 也能搞定!无需公网 IP!cloudflare tunnel。