一、传统内网穿透与公网发布的痛点
对于热衷于折腾家庭实验室(HomeLab)、群晖/威联通/极空间 NAS,或者在本地开发机运行 Docker 容器的站长与开发者来说,如何将内网服务发布到公网随时随地访问,一直是一个绕不开的核心课题。
然而,传统的发布方案往往伴随着诸多现实限制与安全隐患:
- 运营商无公网 IPv4:绝大部分家庭宽带如今都处于大内网(CGNAT)环境下,申请公网 IPv4 门槛越来越高;
- 80 与 443 端口被封死:即使部分用户拥有动态公网 IP,工信部也早已默认封锁了民用宽带的 80 和 443 网页核心端口,外网访问不得不携带冗长难看的端口号(如
:5001、:8443); - DDNS + 路由器端口映射的巨大安全风险:通过路由器直接将内网设备端口暴露在公网,极易遭遇黑客全天候的暴力破解、端口扫描,甚至是针对 NAS 漏洞的勒索病毒攻击。
Cloudflare Tunnel(又称 cloudflared 或 Argo Tunnel) 彻底改变了这一切。它通过在内网主机与 Cloudflare 全球边缘节点之间建立一条安全的出站加密通道(Outbound Tunnel),实现了不需要公网 IP、不需要在路由器上做任何端口映射、无视 80/443 端口封锁,便能以标准域名安全访问本地服务的优雅方案!
二、Cloudflare Tunnel 的核心运作原理
与传统的 FRP、NPS 等需要公网 VPS 进行中转的工具相比,Cloudflare Tunnel 拥有显著的架构优势:
- 主动出站建连,穿透任何防火墙:运行在内网的
cloudflared守护进程只主动连接 Cloudflare 边缘服务器(仅需外出 7844 UDP 或 443 TCP 流量),家庭路由器无需开放任何入站端口,黑客根本无法通过端口扫描探测到你的真实物理机器; - 继承 Cloudflare 全球 CDN 与 WAF 防护:所有访问流量先经过 Cloudflare 的边缘网络过滤,免费享受 DDoS 攻击清洗、Web 应用防火墙(WAF)拦截与 SSL 自动续期证书;
- 深度整合 Zero Trust 零信任安全策略:可以零成本开启 OTP 邮箱验证码、Google / GitHub 单点登录(SSO)鉴权,未经验证的用户连你的内网登录界面都看不到,安全性提升数个数量级。
三、零信任后台(Zero Trust Dashboard)创建隧道
推荐采用官方的 Web 可视化管理方案(Cloudflare Zero Trust),配置直观且支持远程随时增删服务路线,无需频繁修改服务器本地文件。
1. 开通并进入 Zero Trust 控制台
- 登录 Cloudflare 控制台,将你的自选域名 DNS 托管在 Cloudflare;
- 在左侧导航栏点击 Zero Trust,首次进入需免费开通 Zero Trust 团队(选择 Free 免费计划即可,支持多达 50 个用户);
- 依次进入 Networks(网络) -> Tunnels(隧道),点击 Create a tunnel。
2. 创建并命名隧道
选择 Cloudflared 连接器类型,输入一个直观的隧道名称(例如 homelab-nas-tunnel),点击保存。
3. 获取 Token 与部署连接器
在安装页面中选择 Docker 模式,系统会自动生成一段安装命令,其中包含一段类似 eyJh... 的长字符串密钥(Tunnel Token)。将该 Token 复制下来。
四、实战部署:Docker Compose 一键启动 cloudflared
在你的 NAS 或本地 Linux 主机上,通过 Docker Compose 托管守护进程是最稳定、无感升级的方式。
1. 编写 docker-compose.yml
新建 docker-compose.yml 文件:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared-tunnel
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=你的TUNNEL_TOKEN字符串
network_mode: "host"
重点说明:采用 network_mode: "host" 能够让 cloudflared 直接通过 localhost 或 127.0.0.1 访问本机运行的所有其他 Docker 服务及宿主机端口,避免繁琐的 Docker 内部桥接网络配置。
2. 启动服务与状态检查
在终端执行:
docker compose up -d
docker compose logs -f
如果日志中输出类似 Connection ... registered with protocol quic 或 Infra ... connection registered,回到 Cloudflare 网页后台,状态就会立即从 Inactive 变为绿色的 Active(活跃),证明隧道已经顺利打通!
五、配置公网域名路由(Public Hostnames)
隧道激活后,点击页面下方的 Public Hostname(公共主机名),即可轻松将不同子域名映射到内网不同的服务上:
场景 A:发布家庭 NAS 管理面板(例如群晖 DSM)
- Subdomain(子域名):
nas - Domain(主域名):
你的主域名.com - Service Type(协议):
HTTP(若内网开启了 HTTPS 则选 HTTPS 并勾选下方 No TLS Verify) - URL(内网地址):
127.0.0.1:5000
场景 B:发布本地部署的 Docker Web 服务(如 1Panel 面板或个人博客)
- Subdomain:
panel - Domain:
你的主域名.com - Service Type:
HTTP - URL:
127.0.0.1:8888
点击 Save hostname 保存后,Cloudflare 会在几秒钟内自动在 DNS 控制台中生成对应的 CNAME 解析记录。此时,在世界任何角落访问 https://nas.你的主域名.com,就能以标准的 443 端口与 HTTPS 安全绿标直连你的内网机器!
六、安全加固:配置 Access 身份验证门禁
如果你的内网服务没有强密码或者担心管理后台暴露,强烈建议配合 Cloudflare Access 增加一层全球身份锁:
- 在 Zero Trust 左侧菜单点击 Access -> Applications,点击 Add an application;
- 选择 Self-hosted(自建应用),填入刚才绑定的子域名
nas.你的主域名.com; - 在 Policy(策略)中,设置 Action 为 Allow,在 Include 规则中设置
Emails为你自己的常用邮箱。
设置完毕后,任何人访问你的域名时,必须先在 Cloudflare 认证页面输入正确邮箱获取的一次性验证码(Pin Code),才能看到实际的内网后台,彻底杜绝被全网爬虫爆破的可能!
七、总结与相关阅读
借助 Cloudflare Tunnel,我们不仅用零成本、零公网 IP 的方式实现了真正媲美公网服务器的外网访问体验,更为自己的内网服务披上了顶级 CDN 与 WAF 的坚固护甲。
相关建站、代理与私有化运维阅读推荐:
• Docker 搭建 RustDesk 自建远程桌面中继服务器:告别向日葵/ToDesk 限速
• Docker、Nginx Proxy Manager 与哪吒监控一站式部署实战
• 1Panel 运维与网站图片 403 拦截排错排查指南
• Claude Code 接入国内大模型指南:Kimi / GLM-4 / DeepSeek 极简适配实操
• Ollama + Open WebUI 极简私有化部署:在轻量 VPS/NAS 打造专属 ChatGPT
评论