
家里跑了 NAS、个人博客、小游戏,想在外网访问却没公网 IP?
以前搞内网穿透,要么花钱买 frp 服务器(几十块一个月),要么折腾花生壳、NPS,要么就干脆放弃。
今天教你一个完全免费、不用花钱、不用开防火墙端口的方案——Cloudflare Tunnel。
一条 docker run 命令,3 分钟搞定,比泡面还快。
注意:Cloudflare 账号、Docker 环境需要你有。没有的先去注册/安装,过程不超过 5 分钟。
什么是内网穿透?简单比喻
你家电脑在内网(192.168.x.x),就像一个在深山里的小村庄,外人找不到路进来。
公网 IP 就是一条直达的高速公路。但大多数人没有公网 IP——运营商不给你,你连路都没有。
Cloudflare Tunnel 的作用就是在 Cloudflare 的服务器和你家电脑之间,挖一条专用隧道。外面的人通过 Cloudflare 的域名访问你,流量顺着隧道进来,完全不需要你开放任何端口。
听起来很高级,但实际操作比想象中简单得多。
准备工作
- • Cloudflare 账号:免费注册[1],把域名托管到 Cloudflare(NS 记录改一下就行)
- • 一台能跑 Docker 的机器:可以是家里的小 NAS、闲置电脑、树莓派,VPS 也行
- • 一个域名:你托管在 Cloudflare 上的域名(没有的话先注册一个 .cf 域名,免费)
Step 1:进入 Cloudflare Zero Trust 后台
登录 Cloudflare Dashboard[2],左侧菜单找到 「Zero Trust」 并点击:

第一次进入 Zero Trust 会让你注册一个团队(Team Name),随便填个名字就行,不影响功能。
Step 2:创建隧道
进入 Zero Trust 后,左侧导航栏依次点击:网络 → 隧道:

然后点击下方蓝色的 「创建隧道」 按钮:

Step 3:给隧道起个名字
名字随便起,自己认识就行。我填了 winter_tunnel_project:

Step 4:选择安装方式(选 Docker)
这一步最关键,选择你跑隧道的机器用什么方式安装。Cloudflare 支持 Windows、Mac、Debian、Red Hat、Docker 五种方式:

我们选 Docker(推荐,最省事):

页面上会显示一段 docker run 命令,复制它,保存好里面的 token。这个 token 是你的隧道密钥,不能泄露。
Step 5:在服务器上启动隧道
SSH 登录到你的服务器,粘贴刚才复制的命令。注意,我稍微改了一下加了 –restart=always 和 -d 让它后台运行且开机自启:
docker run -d --restart=always \ cloudflare/cloudflared:latest \ tunnel --no-autoupdate run --token 你的token
如果你本地没这个镜像,Docker 会自动拉取:

拉取完成后,验证一下容器是否跑起来了:
docker ps | grep cloudflare

Up 31 seconds——稳了。
Step 6:回到 Cloudflare 后台确认连接
回到浏览器,Cloudflare 后台已经显示 「已连接」:

点击右下角 「下一步」,进入路由配置。
Step 7:配置路由规则
这是最后一步。假设你本地跑了一个 Web 应用,端口是 3000(比如一个在线小游戏),你想通过 fly.你的域名.com 来访问它:

配置项说明:
- • 主机名 → 子域名:填 fly(你想用的前缀)
- • 域名:选择你在 Cloudflare 托管的域名
- • 服务类型:选 HTTP
- • URL:填 127.0.0.1:3000(你本地服务的端口)
保存后,Cloudflare 会自动在你的 DNS 里创建一条 CNAME 记录:

搞定!现在访问 fly.你的域名.com,流量就会通过 Cloudflare 的隧道直达你内网的 3000 端口。
一个隧道容器,服务无数个应用
上面的例子只配置了一个子域名 fly。但 Cloudflare Tunnel 的精髓在于:一个隧道容器可以服务无限个子域名。
你不需要为每个服务新建一个隧道容器,只需要在 Cloudflare 后台的 Tunnel 配置里添加新的 Ingress Rule:
| Hostname | Service |
|---|---|
| fly.summers.eu.cc | http://127.0.0.1:8081 |
| winter.summers.eu.cc | http://127.0.0.1:3001 |
| new.summers.eu.cc | http://127.0.0.1:3002 |
| blog.summers.eu.cc | http://127.0.0.1:3000 |
每加一个新服务,只需要:
配置实时生效,后台改完路由后,隧道会自动拉取新配置(通常几秒内),不需要重启 Docker 容器。
这就是为什么你只需要维护一个容器,其他所有服务都通过它暴露到外网,既安全(不用开防火墙端口)又方便管理。
为什么强烈推荐 Cloudflare Tunnel?
① 完全免费
Cloudflare 免费版就够用,不限制带宽、不限制子域名数量。对比 frp 服务器一个月二三十块的费用,省下的钱够买多少杯奶茶了。
② 不用开防火墙端口
传统方案需要在路由器上做端口映射,暴露给公网一堆端口,安全风险高。Cloudflare Tunnel 只发一条出站连接到 Cloudflare,你的机器不需要开放任何入站端口。
③ 自带 HTTPS
Cloudflare 自动帮你处理 SSL 证书,访问域名就是 HTTPS,不用自己折腾 certbot、Let’s Encrypt。
④ 一个隧道,无限子域名
一个容器搞定所有服务的暴露,管理起来非常清爽。
⑤ 配置实时生效
改路由规则不需要重启,Cloudflare 自动推送新配置。
⑥ 全球 CDN 加速
你的服务通过 Cloudflare 的全球节点分发,海外访问速度也有保障。
我是冬天。折腾了很久的内网穿透,最后发现 Cloudflare Tunnel 才是最省心、最免费的方案。如果你正在找零成本的内网穿透方案,这条教程应该能帮你省下一笔不小的开销。
引用链接
[1] 免费注册: https://dash.cloudflare.com/sign-up[2] Cloudflare Dashboard: https://dash.cloudflare.com
文章来源:https://mp.weixin.qq.com/s/2WVcptePit91Mwi2x0o3tg






