所有文章
发布于 2026 年 5 月 4 日· 10 分钟阅读

免费内网穿透:Cloudflare Tunnel 把本地服务暴露到公网

Cloudflare内网穿透反向代理HTTPS自托管

这东西解决什么问题

你在本地跑了一个服务——也许是家里 NAS 的 Web 界面、树莓派上的 Home Assistant、或者自己写的小项目——想从外面访问,但:

  • 家庭宽带没有公网 IP(运营商 NAT)
  • 有公网 IP,但路由器配端口转发很麻烦
  • 不想在防火墙开洞,安全风险大

Cloudflare Tunnel 解决这个问题:在你的机器上跑一个叫 cloudflared 的客户端,它主动连接到 Cloudflare 的服务器,所有对你域名的请求都通过这条连接转发过来。你不需要任何入站端口。

关键词(可以展开学习): 反向代理、NAT 穿透、零信任网络(Zero Trust)


需要什么

  • 一个域名,并托管在 Cloudflare(免费)
  • 本地有一个跑着的 HTTP 服务(比如 localhost:3000
  • 一台能上网的机器(Linux / Mac / Windows / 树莓派)

没有域名? 可以先用 Quick Tunnels 试水:cloudflared tunnel --url http://localhost:3000,会生成一个临时的 *.trycloudflare.com 域名,无需账号,但每次重启地址会变。


第一步:把域名托管到 Cloudflare

如果你的域名已经在 Cloudflare 管理,跳过这步。

  1. 注册 cloudflare.com,添加你的域名,选择免费套餐
  2. 按提示把 Nameserver 改成 Cloudflare 提供的地址(在域名注册商后台操作)
  3. 等待生效,通常 30 分钟内完成

第二步:创建 Tunnel

推荐用控制台向导,比命令行简单得多。

打开 Cloudflare Zero Trust 控制台Networks → Tunnels → Create a tunnel

  1. 类型选 Cloudflared
  2. 给 Tunnel 起个名字,例如 homelab
  3. 控制台会生成一条安装命令,包含你专属的 token,类似:
# Linux(Debian / Ubuntu)
curl -L --output cloudflared.deb \
  https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
sudo cloudflared service install eyJh...(你的 token,不要分享给别人)

在你的机器上运行这条命令,cloudflared 就会安装并注册为系统服务,开机自启。

Mac:

brew install cloudflare/cloudflare/cloudflared
sudo cloudflared service install eyJh...

第三步:配置公开域名

继续刚才的向导:

  • Subdomain:填子域名,例如 nas
  • Domain:选你的域名,例如 example.com(组合成 nas.example.com
  • Type:HTTP
  • URLlocalhost:8080(你本地服务监听的端口)

Cloudflare Tunnel 创建和公开域名配置指引

保存后,Cloudflare 自动为 nas.example.com 签发 TLS 证书并配好 DNS 记录。

打开浏览器访问 https://nas.example.com,看到你的本地服务则成功。


验证 Tunnel 状态

# 查看服务状态
sudo systemctl status cloudflared

# 实时日志
sudo journalctl -u cloudflared -f

在 Cloudflare 控制台的 Tunnels 列表里,状态变成 HEALTHY 即正常。


进阶:加访问控制

默认情况下 URL 是公开的,任何人都能访问。如果是私人用途,加 Cloudflare Access:

Zero Trust → Access → Applications → Add an application → Self-hosted

填入你的域名,设置允许访问的邮箱或 GitHub 账号。访问时需要先通过 Cloudflare 的登录验证。最多 50 个用户完全免费。


和自己的 VPS 比有什么不同

Cloudflare Tunnel 自己的 VPS
费用 免费 $6–12/月
计算资源 在你自己的机器上 在云上
适合 家庭服务器、开发调试 需要持续运行的生产服务
稳定性 依赖本地机器在线 VPS 宕机概率低

两者也可以配合用:VPS 上跑服务,用 Tunnel 代替 Nginx 做 HTTPS 终止,省去证书配置。→ 如果你还没有 VPS,见《用 $6 VPS 搭建你的第一个服务器

另一个思路是用 Tailscale 把所有设备组成私有网络,只有你的设备能互访,不暴露到公网。→ 见《Tailscale:五分钟组建私有局域网


常见问题

服务偶尔断连怎么办?
cloudflared 内置重连逻辑,通常会自动恢复。反复断连一般是本地服务挂了,检查 localhost:端口 是否还在响应。

延迟变高了?
流量经过 Cloudflare 节点中转,比直连多一跳。国内访问延迟会比直连 VPS 高一些,但 HTTPS 和安全性是免费得到的。

能传大文件吗?
Cloudflare 免费版单次请求限制 100MB。如果需要传大文件(比如 NAS 视频),考虑只用 Tailscale 在私有网络内传输。