一、传统内网穿透与公网发布的痛点

对于热衷于折腾家庭实验室(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 拥有显著的架构优势:

  1. 主动出站建连,穿透任何防火墙:运行在内网的 cloudflared 守护进程只主动连接 Cloudflare 边缘服务器(仅需外出 7844 UDP 或 443 TCP 流量),家庭路由器无需开放任何入站端口,黑客根本无法通过端口扫描探测到你的真实物理机器;
  2. 继承 Cloudflare 全球 CDN 与 WAF 防护:所有访问流量先经过 Cloudflare 的边缘网络过滤,免费享受 DDoS 攻击清洗、Web 应用防火墙(WAF)拦截与 SSL 自动续期证书;
  3. 深度整合 Zero Trust 零信任安全策略:可以零成本开启 OTP 邮箱验证码、Google / GitHub 单点登录(SSO)鉴权,未经验证的用户连你的内网登录界面都看不到,安全性提升数个数量级。

三、零信任后台(Zero Trust Dashboard)创建隧道

推荐采用官方的 Web 可视化管理方案(Cloudflare Zero Trust),配置直观且支持远程随时增删服务路线,无需频繁修改服务器本地文件。

1. 开通并进入 Zero Trust 控制台

  1. 登录 Cloudflare 控制台,将你的自选域名 DNS 托管在 Cloudflare;
  2. 在左侧导航栏点击 Zero Trust,首次进入需免费开通 Zero Trust 团队(选择 Free 免费计划即可,支持多达 50 个用户);
  3. 依次进入 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 增加一层全球身份锁:

  1. 在 Zero Trust 左侧菜单点击 Access -> Applications,点击 Add an application;
  2. 选择 Self-hosted(自建应用),填入刚才绑定的子域名 nas.你的主域名.com;
  3. 在 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