885 字
4 分钟
零成本内网穿透:Cloudflare Tunnel + Docker 可视化部署全攻略

零成本内网穿透:Cloudflare Tunnel + Docker 可视化部署全攻略#

前言#

在没有公网 IP 的大内网环境下,想要安全、稳定地将家里的服务(如 NAS、API、个人博客)发布到公网,Cloudflare Tunnel(前身名为 Argo Tunnel)是目前体验最好的方案。它不需要路由器打洞,不需要 DDNS,且能完美隐藏家庭真实 IP。


第一阶段:本地环境部署 (Docker Compose)#

为了管理方便,我们选择带有 WebUI 界面的 cloudflared-web 镜像。

1. 准备目录#

Bash

mkdir -p ~/docker-data/cloudflared-web && cd ~/docker-data/cloudflared-web

2. 编写 docker-compose.yml#

在该目录下创建文件,注意端口映射关系。

YAML

services:
cloudflared-web:
image: wisdomsky/cloudflared-web
container_name: cloudflared-web
restart: always
network_mode: host
volumes:
- ./config:/config
ports:
- "8080:14333" # 宿主机8080映射容器内WebUI端口14333
environment:
- TZ=Asia/Shanghai

3. 启动服务#

Bash

docker compose up -d

启动后,本地访问 http://localhost:8080 即可看到控制面板。


第二阶段:Cloudflare 远程端配置#

1. 进入 Zero Trust 控制台#

登录 Cloudflare,点击左侧菜单最下方的 Zero Trust(首次使用需选 Free 计划,无需绑卡)。

2. 创建隧道 (Tunnel)#

  1. 点击 Networks -> Connectors (部分界面翻译为“连接器”)。
  2. 点击 Create a tunnel -> 选择 Cloudflared
  3. 给隧道起名(如 my-linux-server)并保存。
  4. 获取 Token:在安装页面找到以 ey... 开头的超长字符串。

3. 激活本地客户端#

回到本地 http://localhost:8080 界面,将 Token 粘贴进输入框并点击保存。当 Cloudflare 后台显示状态为 HEALTHY 时,隧道正式打通。


第三阶段:域名映射与服务发布#

在 Cloudflare 隧道的 Public Hostname 标签页进行配置。

情况 A:发布隧道管理界面本身#

  • Subdomain: cf-web
  • Domain: yourdomain.com
  • Service: HTTP // localhost:14333坑点:容器内访问自己,必须用14333,不能用宿主机的8080)。

情况 B:发布宿主机上的其他应用#

  • Subdomain: api
  • Service: HTTP // 192.168.5.150:8317坑点:必须填宿主机局域网 IP,不能填 localhost)。

情况 C:发布局域网内其他设备 (如 Windows 或 NAS)#

  • Subdomain: nas
  • Service: HTTP // 192.168.5.20:5000(隧道会自动代理整个局域网的可达 IP)。

第四阶段:避坑指南 (必看)#

1. 访问报错 502 Bad Gateway#

  • 原因:隧道容器无法连接到目标端口。
  • 对策:检查 URL 填写。如果在同一容器内,用 localhost:内部端口;如果在宿主机或其他设备,必须用 局域网静态 IP。同时检查宿主机防火墙(如 ufw)是否放行了对应端口。

2. 运营商屏蔽风险#

  • 原理:Cloudflare Tunnel 是“由内向外”的主动连接,流量封装在 HTTPS 隧道中。
  • 优势:在运营商看来,这只是普通的上网流量,不会触发“非法架设服务器”的风险,安全性远高于传统的端口转发。

3. 报错 “Blocked request. This host is not allowed.”#

  • 场景:常见于 Vite/Webpack 开发环境或某些对 Host Header 有校验的应用。
  • 终极对策:在 Cloudflare 隧道配置的 HTTP Settings 中,找到 HTTP Host Header,手动填入 localhost。这样可以欺骗目标应用,让其以为是本地访问,从而绕过安全策略。

第五阶段:进阶安全防护 (Access 验证)#

虽然应用自带密码,但将登录页暴露在公网仍有暴破风险。建议开启 Cloudflare Access

  1. 在 Zero Trust 中进入 Access -> Applications
  2. 为你的子域名添加策略。
  3. 设置访问权限(如:必须验证指定的邮箱验证码)。
  4. 结果:他人访问时连登录页都看不到,必须先通过 Cloudflare 的身份验证,安全性达到金融级。
零成本内网穿透:Cloudflare Tunnel + Docker 可视化部署全攻略
https://blog.wlens.top/posts/零成本内网穿透cloudflare-tunnel--docker-可视化部署全攻略/
作者
Lao Wang
发布于
2026-03-30
许可协议
CC BY-NC-SA 4.0