Blog.wlens.top
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-web2. 编写 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/Shanghai3. 启动服务
Bash
docker compose up -d启动后,本地访问 http://localhost:8080 即可看到控制面板。
第二阶段:Cloudflare 远程端配置
1. 进入 Zero Trust 控制台
登录 Cloudflare,点击左侧菜单最下方的 Zero Trust(首次使用需选 Free 计划,无需绑卡)。
2. 创建隧道 (Tunnel)
- 点击 Networks -> Connectors (部分界面翻译为“连接器”)。
- 点击 Create a tunnel -> 选择 Cloudflared。
- 给隧道起名(如
my-linux-server)并保存。 - 获取 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:
- 在 Zero Trust 中进入 Access -> Applications。
- 为你的子域名添加策略。
- 设置访问权限(如:必须验证指定的邮箱验证码)。
- 结果:他人访问时连登录页都看不到,必须先通过 Cloudflare 的身份验证,安全性达到金融级。
零成本内网穿透:Cloudflare Tunnel + Docker 可视化部署全攻略
https://blog.wlens.top/posts/零成本内网穿透cloudflare-tunnel--docker-可视化部署全攻略/