没有公网 IP,又想在公网访问家里的服务器,以前只有两个选择:要么买 VPS 备案,要么用 FRP、Ngrok 之类的穿透工具。前者要花钱还得备案,后者要么收费要么不稳定。
最近发现 Cloudflare 官方有个大善人功能——Cloudflare Tunnel,免费、自带 HTTPS、不用备案,直接把内网服务穿透到公网。亲测可用,速度居然还行。
为什么公网 IP 这么难搞
先说背景。
国内的家庭宽带,IPv4 公网 IP 早就成了稀缺资源。运营商基本默认分配大内网地址,想申请公网 IP?有的地区直接说没有,有的需要打客服磨嘴皮子,还有可能过一段时间被收回。
IPv6 倒是普及了,地址多到用不完。但问题是——很多网络环境对 IPv6 的支持并不完整,访问端如果没有 IPv6,照样连不上。
所以如果想搭建一个公网可访问的服务,传统路子就两条:
- 买 VPS:阿里云、腾讯云、华为云……便宜的一年几十块到几百块不等。但国内服务器必须备案,虽然流程不复杂,但确实繁琐,要等个几天到一两周。
- 用内网穿透工具:FRP 自建服务端、Ngrok、花生壳……要么需要自己有一台有公网 IP 的服务器做中转,要么用第三方收费服务,免费版限制多。
Cloudflare Tunnel 的出现,直接把这条路子给免费了。
Cloudflare Tunnel 是什么
简单说,Cloudflare Tunnel 是 Cloudflare 官方推出的一款反向隧道工具。它会在你的内网服务器上运行一个轻量级客户端(叫 cloudflared),这个客户端主动向外连接到 Cloudflare 的边缘网络,建立一个加密隧道。
外面用户访问时,请求先走到 Cloudflare 的边缘节点,再通过这条隧道转发到你的内网服务器。你的服务器不需要公网 IP,不需要开放防火墙端口,甚至连路由器都不用配置。
更妙的是,Cloudflare 会自动给你分配一个二级域名(比如你绑定的域名下的子域名),并且自带 HTTPS 证书。也就是说,你只需要在 Cloudflare 上有一个域名(哪怕是在 Cloudflare 上免费注册的 .workers.dev 或者用你自己的域名),配置好 Tunnel,外界就能通过 https://xxx.yourdomain.com 访问到你内网的 HTTP 服务。
实操步骤
以下是我实际操作的流程,跟着做就行。
前置条件
- 一个 Cloudflare 账号
- 一个托管在 Cloudflare 上的域名(没有的可以注册一个便宜的,或者把现有域名的 NS 改到 Cloudflare)
- 一台内网服务器(我这里就是前面搭 Hugo 博客的那台 Ubuntu 22.04)
第一步:创建 Tunnel
登录 Cloudflare 控制面板 → 左侧菜单找到**「Zero Trust」(以前叫 Teams)→ 进入后点击「网络」→「连接器(Tunnels)」→ 点击「创建隧道」**。
选择 Cloudflared 类型,给隧道起个名字,比如 home-server。
第二步:安装 cloudflared
创建完成后,页面会提示你在服务器上安装 cloudflared 并运行一条命令。系统会根据你的环境自动推荐安装方式,Ubuntu/Debian 一般是:
| |
运行后,cloudflared 会作为系统服务在后台运行,自动连接 Cloudflare。
回到控制面板,你会看到隧道状态变成**「已连接(Healthy)」**,还有在线时间显示。
第三步:配置路由
隧道通了,但还需要告诉 Cloudflare:把哪个域名指向哪个内网服务。
在隧道详情页,点击**「已发布程序路由(Public Hostname)」→「添加路由」**:
- 子域名:比如
blog(最终访问地址就是blog.yourdomain.com) - 域名:选择你在 Cloudflare 上的域名
- 类型:HTTP
- URL:
http://localhost:80(指向本机的 Nginx,也就是我们的 Hugo 博客)
保存。等几秒钟,打开 https://blog.yourdomain.com,应该就能看到你的内网博客了。
亲测体验
我用家里的宽带(电信 300M,无公网 IPv4)测试了几天,体验如下:
| 项目 | 体验 |
|---|---|
| 访问速度 | 首屏 2-4 秒,静态资源加载正常,能流畅打开 |
| 稳定性 | 连续运行 48 小时未掉线,cloudflared 服务自动保活 |
| HTTPS | 自动证书,无需手动配置,满分 |
| 延迟 | 取决于 Cloudflare 边缘节点,国内一般走香港或新加坡节点,150-300ms |
| 带宽 | Cloudflare 免费版不限流量(公平使用政策),个人博客完全够用 |
总结:对于个人博客、小型服务展示、远程调试这类场景,完全够用。 如果是高并发或视频流,免费版可能扛不住,但那是另一个话题了。
一些局限和注意事项
- 域名必须在 Cloudflare:要么在 Cloudflare 注册,要么把 DNS 托管到 Cloudflare。这是硬性要求。
- 免费版功能有限:例如自定义端口、更精细的访问控制需要升级到付费版。
- 速度不如直连:毕竟走了 Cloudflare 中转,比直接访问公网 IP 要慢一些,但胜在免费和稳定。
- HTTP 转发限制:目标 URL 如果是
localhost,那 cloudflared 必须运行在同一台机器上。如果是局域网其他设备,写内网 IP 即可,比如http://192.168.1.100:80。
总结
Cloudflare Tunnel 是一个非常实用的免费内网穿透方案,特别适合:
- 没有公网 IP 的家庭宽带用户
- 不想备案、不想买 VPS 的轻量需求
- 想快速把内网服务暴露到公网做测试或展示
配置简单,自带 HTTPS,不限流量,还不要钱。Cloudflare 真是大善人,哈哈哈。
如果你也有内网服务想挂到公网,不妨试试。有问题欢迎交流。