完全免费、免备案!用 Cloudflare Tunnel 零成本实现内网穿透(保姆级教程)
发布于 2026-11-10 · Cloudflare教程

完全免费、免备案!用 Cloudflare Tunnel 零成本实现内网穿透(保姆级教程)
本地做好的项目,发一个网址就能让朋友打开。Cloudflare Tunnel 可以把内网网页接到公网域名上,省去公网 IP 和路由器端口映射,适合项目演示、开发联调和分享自建网页。
接入域名、启动连接器、绑定服务,完成这几步就能用自己的域名访问本地项目。Tunnel 可使用免费方案,自有域名的注册和续费单独计算。
目录
01|准备好域名和本地服务
开始前准备三样东西:Cloudflare 账号、一个能修改 DNS 的域名,以及已经安装并启动 Docker 的电脑或 NAS。
先启动要分享的网页服务,在同一局域网里的另一台设备上确认能打开。本文使用的示例地址是:
http://192.168.1.100:8080
后续把这个 IP 和端口换成自己的实际地址。
Cloudflare Tunnel 的连接器叫 cloudflared。它从内网主动建立连接,再把公网请求转到你的网页服务。使用期间,让网页服务和连接器持续运行即可。
02|把域名接入 Cloudflare
登录 Cloudflare 控制台,选择添加域名,输入自己的根域名,再选择 Free 计划。已有域名且状态为 Active 的,可以直接进入下一步。
检查扫描出来的 DNS 记录,保留现有网站和邮箱使用的 A、CNAME、MX、TXT 等记录。
页面会分配两条 Nameservers。回到购买域名的平台,找到“DNS 服务器”或“Nameservers”,替换成 Cloudflare 分配的地址。
这里修改的是域名的 DNS 服务器。等待 Cloudflare 显示 Active,域名接入就完成了。
03|创建隧道,取得安装命令
在主控制台进入 Networking → Tunnels → Create Tunnel。使用 Zero Trust 控制台时,从 Networks → Connectors 进入 Cloudflare Tunnels,点击创建。
下面的步骤图展示 Zero Trust 界面。进入类型选择页后,点击 Select Cloudflared。

图 1|创建隧道时选择 Cloudflared
填写隧道名称,例如 home-web,点击 Save tunnel。这个名字用于后台管理,可以按设备或项目命名。

图 2|填写用于管理的隧道名称
进入安装页面,选择 Docker,复制页面生成的安装命令。其中 --token 后面的长字符串,就是启动这条隧道需要的 Token,留在自己的设备上使用。

图 3|在安装环境中选择 Docker
04|用 Docker 启动连接器
在电脑或 NAS 上打开终端,确认 Docker 服务已启动:
docker info
能看到 Client 和 Server 信息,就可以继续。把下面的 TUNNEL_TOKEN 换成刚才复制的真实 Token,执行这一整行命令:
docker run -d --name cf-tunnel --restart unless-stopped cloudflare/cloudflared:latest tunnel --no-autoupdate run --token "TUNNEL_TOKEN"
容器会在后台运行,并在 Docker 启动后自动恢复,手动停止的容器除外。
查看运行情况和最近的日志:
docker ps --filter name=cf-tunnel
docker logs --tail 50 cf-tunnel
回到 Cloudflare 后台,Connectors 区域显示 Connected,说明连接器已经上线。

图 4|连接器上线后显示 Connected
05|把公网域名指向内网服务
在隧道详情中选择 Routes → Add route → Published application。Zero Trust 界面中,对应的是 Published applications 或 Published application routes。
公网域名按下面填写:
Subdomain:填 web,也可以换成自己喜欢的前缀。Domain:选择已经接入的根域名。 Path:留空,让整个域名都指向这个应用。
例如,组合后的公网域名是 web.example.com。

图 5|在 Hostname 区域填写子域名并选择根域名
接着配置 Service。本文的网页服务使用 HTTP,按界面填写:
分为 Type、URL 两个框时:Type 选 HTTP,URL 填192.168.1.100:8080。只有 Service URL 一个框时:填 http://192.168.1.100:8080。
这一处最关键:Docker 里的 localhost 指向连接器容器自身。 访问宿主机上的网页,应填写容器能访问到的局域网地址,应用监听该网卡或 0.0.0.0。
其他部署方式可以这样对应:
Windows、macOS 的 Docker Desktop:宿主机服务使用 host.docker.internal:8080。Linux Docker Engine:创建连接器容器时加入 --add-host host.docker.internal:host-gateway,再使用上述主机名,应用监听和防火墙需允许连接。应用和连接器处于同一个自定义 Docker 网络:使用服务名和容器内部端口,例如 my-web:8080。
填好后点击 Add route、Save 或 Complete setup。控制台会为这个公网域名配置相应的 DNS 记录。
隧道列表中可以查看 Healthy 状态:

图 6|隧道列表中的 Healthy 状态
在域名的 DNS 页面,可以找到对应的隧道记录:

图 7|DNS 页面中由隧道配置生成的记录
06|用手机验证公网访问
手机关闭 Wi-Fi,切换到蜂窝网络,在浏览器输入自己的公网地址,例如 https://web.example.com。
能打开原来的网页,就完成了内网到公网的访问。 公网地址使用 HTTPS,本地服务可以继续使用 HTTP。
若没有打开,按现象检查:
502:核对 Service URL、协议和端口,确认连接器能访问应用。 1033:查看连接器是否在线,以及容器和设备的网络状态。 域名无法解析:检查域名是否 Active,以及对应 DNS 记录是否存在或有同名冲突。
需要限制访问对象时,可以为应用设置 Cloudflare Access 或登录验证。
平时可用下面的命令暂停分享:
docker stop cf-tunnel
重新启用时执行 docker start cf-tunnel。
07|总结
Cloudflare Tunnel 把本地网页变成了可以直接分享的网址。域名接入后,用 Docker 运行连接器,再把公网域名映射到应用地址,朋友就能通过浏览器访问你的项目。
配置时重点看 域名 Active、连接器 Connected、Service 地址正确,最后用手机网络打开页面验证。以后再分享同一个项目,就可以继续使用这个域名。
