如果家里没有公网 IP,也不想在路由器上开端口,Cloudflare Tunnel 是很省心的方案。它通过 cloudflared 主动连接 Cloudflare,把公网请求安全转发到内网服务。

Cloudflare Tunnel

版本提示: 本文截图和界面来自 2025 年 8 月。Cloudflare Zero Trust 控制台入口和功能名称可能变化,请以当前控制台和官方文档为准。

一、适用场景

Cloudflare Tunnel 适合:

  • 无公网 IP 的家庭宽带;
  • 不想暴露路由器端口的场景;
  • 需要域名和 HTTPS 的 NAS、管理面板或个人网站;
  • 想利用 Cloudflare 安全防护的个人项目。

二、为什么它更安全

传统端口映射会把端口暴露给公网扫描。Cloudflare Tunnel 的思路相反:

  1. 内网设备运行 cloudflared;
  2. cloudflared 主动向 Cloudflare 建立加密出站连接;
  3. 外网请求先进入 Cloudflare;
  4. Cloudflare 通过已有隧道转发到内网服务;
  5. 路由器无需开放入站端口。

这样能减少端口暴露,并额外获得 Cloudflare 的防护能力。

三、准备工作

  • Cloudflare 账号;
  • 已托管在 Cloudflare 的域名;
  • 一台能访问外网的内网设备;
  • 内网服务的 IP 和端口。

四、创建 Tunnel

进入 Cloudflare 控制台,找到 Zero Trust,然后进入网络相关页面。

进入 Zero Trust

选择 Tunnels:

进入 Tunnels

点击添加隧道,选择 Cloudflared:

创建 Cloudflared Tunnel

为 Tunnel 命名,例如 home-services:

设置 Tunnel 名称

五、安装 cloudflared

本文使用 Docker 部署。复制控制台给出的命令后,建议补充容器名、后台运行和重启策略:

1
2
3
4
5
6
docker run \
--name cloudflared \
-d \
--restart unless-stopped \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token 你的隧道令牌

启动成功后,控制台会显示连接器已上线。

cloudflared 连接成功

六、配置公共主机名

进入 Tunnel 的公共主机名配置页:

  • Subdomain:填写子域名前缀;
  • Domain:选择 Cloudflare 托管域名;
  • Type:内网服务为 HTTP 时通常选择 HTTP;
  • URL:填写内网服务地址和端口,例如 192.168.3.17:5700。

配置公共主机名

填写内网服务地址

一个 Tunnel 可以添加多个公共主机名,分别转发到不同内网服务。

添加多个公共主机名

七、验证访问

在浏览器访问配置的域名:

1
https://nas.example.com

访问内网服务

八、安全建议

  1. 只把需要的服务加入 Tunnel;
  2. 管理后台启用 Cloudflare Access、登录验证或 IP 白名单;
  3. 不要用 Tunnel 暴露未升级、弱密码的服务;
  4. 定期检查 Tunnel 连接器和公共主机名;
  5. 隧道令牌不要提交到代码仓库。

总结

Cloudflare Tunnel 适合不想开端口、没有公网 IP 的用户。它把域名、HTTPS 和安全防护整合在一起,比传统端口映射更省心。代价是流量会经过 Cloudflare,且控制台和策略需要按官方最新文档维护。