Cloudflare Tunnel 零公网 IP 内网穿透实战指南
导读:许多开发者、折腾党手中都拥有一两台性能极其强劲的闲置家庭旧电脑、软路由、低功耗工控机或多盘位 NAS。它们拥有数十 TB 的廉价海量存储和强劲的 CPU 算力,非常适合用来部署个人博客、代码仓库、媒体服务器、智能家居(Home Assistant)或测试环境。然而,想要在公司、出差甚至手机移动网络下随时随地安全访问它们,却横亘着一道道难以跨越的技术天堑:
绝大多数家庭宽带处于运营商的“大内网”(NAT44/CGNAT),根本没有公网 IPv4;动态 IPv6 虽然普及,但大量公司局域网、酒店 Wi-Fi 根本没有分配 IPv6 单播地址,跨网直接失联;更严重的是,运营商对家庭宽带全面封禁了 80 和 443 端口,如果折腾光猫改桥接、在路由器搞端口映射(Port Forwarding),不仅容易因违规搭建 Web 站点被运营商阻断查封,更是直接将整个家庭局域网的所有设备毫无防备地暴露给全网僵尸网络的端口扫描器!而传统的 FRP、花生壳方案,又必须额外购买一台带公网带宽的云服务器做流量中转,国内服务器动辄几十块一个月却只给 1~3Mbps 的“小水管”,传个大文件慢如蜗牛。
Cloudflare Tunnel(原名 Argo Tunnel,核心组件为 cloudflared)正是降维打击这一痛点的终极神兵!
它的工作哲学极其优雅:只在本地向外发起单向加密出站连接(Outbound Connection),全天候安全锚定在 Cloudflare 遍布全球的 Anycast 边缘网络上。无需公网 IP、无需改光猫路由、无需在防火墙开任何入站端口,即可白嫖全球顶级 CDN 加速、全自动托管的泛域名 HTTPS 证书与军工级防 DDoS 保护。
本文将带你深入掌握 Cloudflare Tunnel 的全套工业级实战:从云端 Zero Trust 控制台快速托管、本地极客级config.yml多服务 Ingress 聚合、SSH 与 RDP 远程桌面原生穿透,到突破国内访问延迟的“Cloudflare 优选 IP 秘籍”与 Cloudflare Access 零信任身份防盗门,手把手将你家里的闲置设备打造成安全坚固的公网服务器!
🎯 核心架构与传统方案降维对比
┌────────────────────────────────────────────────────────┐
│ 外部公网访客 (全球任意网络/手机) │
└───────────────────────────┬────────────────────────────┘
│
1. 访问自定义域名 (https://nas.0000996.xyz)
▼
┌───────────────────────────┐
│ Cloudflare 全球边缘网络 │
│ (WAF 防护 + 免费 SSL 证书) │
└─────────────┬─────────────┘
│
2. 走预先建立的加密长连接双向隧道 (QUIC/HTTP2)
▼
┌────────────────────────────────────────────────────────┐
│ 家庭局域网 (光猫 / 路由器 / 软路由 / 多层内网 NAT) │
│ │
│ ┌─────────────────────────┐ │
│ │ cloudflared (守护进程) │ │
│ └────────────┬────────────┘ │
│ │ │
│ │ 3. 本地回环无阻分发 (localhost / 局域网)
│ ▼ │
│ ┌────────────────────────────────────┐ │
│ │ 家庭内部各项私有业务服务 │ │
│ │ • NAS 网页后台 (8080) │ │
│ │ • 远程桌面 RDP (3389) │ │
│ │ • 终端 SSH (22) │ │
│ │ • Home Assistant (8123) │ │
│ └────────────────────────────────────┘ │
└────────────────────────────────────────────────────────┘
| 维度 | 传统光猫端口映射 (DDNS) ❌ | 传统 FRP / 节点中转 ❌ | Cloudflare Tunnel 方案 🟢 |
|---|---|---|---|
| 公网 IP 门槛 | 必须拥有动态公网 IPv4 或 IPv6 | 需要公网 VPS 搭建服务端 | 完全不需要公网 IP(多层 NAT/5G 热点均可) |
| 路由器安全性 | 必须开放入站端口,家庭内网暴露 | 暴露 VPS 端口,易被扫爆破 | 零入站端口暴露,仅单向出站握手 |
| 80 / 443 端口 | 家宽 100% 封锁,必须挂奇葩高位端口 | 取决于 VPS,国内机需备案 | 完美使用标准 80/443,全球直出无需端口号 |
| HTTPS 证书 | 每 3 个月折腾申请续期,需配置 Web 验证 | 需在 VPS 或本地配置 Certbot | 全自动无感签发,Cloudflare 边缘托管泛域名 SSL |
| 带宽与流量 | 受限于家宽上行(通常 30~50Mbps) | 受限于 VPS 购买带宽(通常 1~5Mbps) | 完全免费、无限流量,享受 Cloudflare CDN 边缘缓存 |
🖥️ 基础环境与全局变量定义
在敲击命令前,先在终端统一定义参数变量:
# ================= 全局参数定义 =================
PRIMARY_DOMAIN="0000996.xyz" # 你的主域名 (已托管在 Cloudflare)
TUNNEL_NAME="homelab-cluster" # 自定义的隧道集群名称
LOCAL_WEB_PORT="8080" # 本地需要穿透的 Web 服务端口
LOCAL_SSH_PORT="22" # 本地需要穿透的 SSH 端口
# ================================================
💻 第一步:快速云端创建 Tunnel 凭据(Zero Trust 控制台)
Cloudflare 目前支持两种管理模式:
1. Remotely-managed(云端托管模式):新手最友好,在网页上点选即可完成子域名和服务的路由绑定;
2. Locally-managed(本地文件配置模式):极客与多服务玩家的最爱,通过单个 config.yml 集中编排所有子域。
我们先从创建连接器令牌(Token)开始:
- 登录 Cloudflare 控制台 ➔ 进入左侧 「Zero Trust」;
- 首次进入选择免费套餐(Free Plan),无需绑定信用卡即可开通专属团队(Team);
- 进入仪表盘后,点击左侧菜单 「Networks(网络)」 ➔ 「Tunnels(隧道)」;
- 点击蓝色按钮 「Create a tunnel(创建隧道)」;
- 选择连接器类型为
Cloudflared➔ 点击 「Next」; - 给你的隧道起个名字(例如
homelab-cluster) ➔ 点击 「Save tunnel」; - 页面会展示一段专属于该隧道的 Token 字符串(一串长 Base64 文本,以
eyJhIjoi...开头)。复制这段 Token 备用。
💻 第二步:部署 cloudflared 本地客户端(Docker 生产级编排)
在家庭电脑、NAS 或软路由上,推荐使用 Docker Compose 进行容器化常驻,结合 network_mode: "host" 可以直接丝滑访问宿主机上的所有局域网端口。
1. 编写生产级 docker-compose.yml
🖥️ 【家庭电脑 / 服务器终端】
sudo mkdir -p /opt/cloudflared
cd /opt/cloudflared
sudo tee /opt/cloudflared/docker-compose.yml << 'EOF'
version: '3.8'
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
# 核心:使用 host 网络模式,方便直接穿透宿主机的 localhost 和内网端口
network_mode: "host"
environment:
- TUNNEL_TOKEN=YOUR_TUNNEL_TOKEN
command: tunnel --no-autoupdate run
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "3"
EOF
提示:将 YOUR_TUNNEL_TOKEN 替换为第一步中获取的真实长串 Base64 令牌。
2. 点火启动服务
🖥️ 【家庭电脑 / 服务器终端】
sudo docker compose up -d
sudo docker compose logs -f cloudflared
核验标准:日志输出 Connected to HKG/NRT/SIN 等边缘数据中心,并显示 Registered tunnel connection。
此时回到 Cloudflare 网页后台,页面下方会瞬间点亮绿色的 ACTIVE 状态图标!
💻 第三步:高阶极客玩法——本地 config.yml 多服务聚合映射
很多自建服务玩家家里跑了十几个服务(NAS、软路由、Jellyfin、Gitea、Qbittorrent、Home Assistant)。如果全部在网页后台点点点,管理起来极其分散。
我们可以通过本地 config.yml 文件,使用 Ingress 规则 一网打尽!
1. 本地多服务聚合配置范例
在宿主机 /opt/cloudflared/config.yml 中写入统一规则树:
tunnel: 你的Tunnel-UUID
credentials-file: /opt/cloudflared/cert.json
# 核心:Ingress 多服务分流路由表 (从上到下按规则优先匹配)
ingress:
# 1. 映射本地 NAS 网页控制台
- hostname: nas.0000996.xyz
service: http://127.0.0.1:8080
# 2. 映射带自签 HTTPS 的软路由或 PVE 后台 (开启忽略证书校验)
- hostname: pve.0000996.xyz
service: https://192.168.1.2:8006
originRequest:
noTLSVerify: true
# 3. 映射智能家居 Home Assistant (启用 WebSocket 长连接支持)
- hostname: hass.0000996.xyz
service: http://127.0.0.1:8123
originRequest:
noChunkedEncoding: true
# 4. 映射终端 SSH 穿透
- hostname: ssh.0000996.xyz
service: ssh://127.0.0.1:22
# 5. 映射 Windows 远程桌面 (RDP)
- hostname: rdp.0000996.xyz
service: rdp://192.168.1.100:3389
# 6. 核心兜底规则:凡是未命中的子域名一律返回 404
- service: http_status:404
这种单文件聚合架构,增删服务只需加两行文本并重载容器,是专业 Homelab 玩家的终极形态!
💻 第四步:突破国内网络延迟——Cloudflare 优选 IP 秘籍
很多人刚用 Cloudflare Tunnel 时会抱怨:“为什么从家里外网或者手机移动网络访问,有时候很慢、延迟高达 300ms,甚至偶尔转圈打不开?”
1. 延迟高的根本原因
Cloudflare 官方分配给每个域名的默认 DNS 解析 IP,往往是针对全球宽带的泛播 Anycast 节点。国内的三大运营商(电信、联通、移动)经常把流量绕道美西(圣何塞/洛杉矶),晚高峰跨洋骨干网极度拥堵。
2. 优选 IP 破局方案(将延迟压至 50ms)
我们可以利用国内连接 Cloudflare 极速的优质 Anycast 节点(如香港、日本、新加坡或国内移动直连节点),让你的域名强制解析到这些极低延迟的 IP 上!
- 运行优选测速脚本:在本地电脑运行开源的
CloudflareSpeedTest工具,自动测出针对你当前宽带/手机网络延迟最低(<80ms)、丢包为 0 的优质 IP 列表; - 配置双解析体系: - 在 DNS 解析平台(如 DNSPod、华为云 DNS 或 Cloudflare 本身)中; - 将海外线路继续保持 CNAME 指向 Cloudflare Tunnel; - 将国内电信、联通、移动线路的 A 记录分别显式指向测速得出的优质 Anycast IP;
- 效果见证:国内手机和电脑访问你家里的服务时,直接经由最优跨海节点毫秒直连,网页秒开、后台操作如丝般顺滑!
💻 第五步:全平台客户端远程 SSH 与 RDP 穿透直连
不仅仅是 HTTP 网页,Cloudflare Tunnel 还能完美穿透 SSH 终端 和 Windows 远程桌面(RDP)!
1. 任意电脑原生终端直连家中 SSH
在你的笔记本(Mac / Windows / Linux)本地只需安装一个轻量 cloudflared 客户端,编辑本地电脑的 ~/.ssh/config:
💻 【你自己的笔记本电脑】
# 在 ~/.ssh/config 中追加:
Host home-server
HostName ssh.0000996.xyz
User root
ProxyCommand cloudflared access ssh --hostname %h
见证奇迹:
在世界上任何地方的终端直接敲:
ssh home-server
cloudflared 会自动在本地与云端建立一条零信任加密流,你无需记住任何端口,像在内网一样秒级敲进家里的 Linux 命令行!
💻 第六步:安全加固——给内网后台挂上 Cloudflare Access 防盗门
把家庭内部没有经过安全审计的开源面板暴露到公网,极易被黑客扫出弱密码或 0-day 漏洞直接入侵家庭内网。
使用 Cloudflare Access 给所有敏感后台加上第二道军工级防盗门!
1. 配置 Access 保护策略
- 进入 Zero Trust 控制台 ➔ 点击 「Access」 ➔ 「Applications(应用程序)」;
- 点击 「Add an application」 ➔ 选择 「Self-hosted(自托管应用)」;
- 基础设置:
- Application name:
家庭核心资产安全门- Application domain:输入nas.0000996.xyz; - 配置安全策略(Policies):
- Policy name:
仅限本人身份放行- Action:Allow- 规则配置:在Include下选择Emails,填入你的个人邮箱(如[email protected]),也可以配置 GitHub / Google OAuth 一键授权; - 点击保存!
2. 真实拦截体验
任何人从公网打开该域名,首先看到的不是你的内网登录界面,而是 Cloudflare 官方的身份核验盾牌!只有输入发送到你邮箱的 6 位临时验证码,或者点击 GitHub 授权通过后,系统才会放行真实流量。所有的公网未授权扫描器、爬虫和密码爆破脚本,在这里被 100% 物理拦截!
🔍 验证测试:阶梯核实验收
1. 5G 移动网络断网盲测
💻 【你自己的手机】
1. 关闭手机 Wi-Fi,切换为纯移动蜂窝流量(确保完全脱离家庭局域网环境);
2. 浏览器直接访问:https://nas.0000996.xyz;
3. 检查:
- 绿色数字证书是否生效;
- 是否准确弹出 Cloudflare Access 身份验证;
- 验证通过后是否秒级展示出内网 NAS 控制台。
2. 本地查看实时通信流量日志
🖥️ 【家庭电脑 / 服务器终端】
sudo docker compose logs -n 30 cloudflared
核验标准:能够看到清晰的 HTTP 请求与 WebSocket 信令日志,状态码均为标准的 200 或 101 Switching Protocols。
🚨 翻车急救站(常见避坑 FAQ)
Q1:外网打开提示 502 Bad Gateway?
- 排查要点:
1. 检查家庭设备上的目标应用是否正常监听对应端口;
2. 如果使用了 Docker 容器化部署
cloudflared,且没有配置network_mode: "host",容器内部的localhost无法访问宿主机的端口!请改用宿主机局域网 IP(如http://192.168.1.50:8080),或加上network_mode: "host"; 3. 如果本地目标是 HTTPS 服务(如 PVE 8006),必须在配置中勾选开启No TLS Verify。
Q2:Home Assistant 或特定实时网页出现不断掉线重连?
- 根因:WebSocket 握手没有正确保持,或者中间代理提前断开了空闲长连接。
- 自愈方案:在 Cloudflare 域名控制台的 「Network」 选项卡中,确认开启了 「WebSockets」 支持开关;并在 Ingress 配置中为该应用附加
originRequest: noChunkedEncoding: true。
Q3:为什么传输几百 MB 的文件时突然中断报错?
- 规范边界:Cloudflare 免费计划对单次 HTTP POST 请求体有 100MB 的硬限制。如果需要频繁在家庭电脑与外网间同步几十 GB 的巨型冷备文件,建议针对大文件使用内网穿透协议(如 Tailscale/WireGuard)或采用分块切片传输。
📋 毕业打钩自检清单
- [ ] 成功开通 Cloudflare Zero Trust 并在云端创建专属 Tunnel
- [ ] 家庭服务器通过 Docker Compose 成功启动
cloudflared并显示 ACTIVE - [ ] 掌握了本地
config.yml多服务 Ingress 路由聚合语法 - [ ] 针对本地自签 HTTPS 服务正确开启了
No TLS Verify - [ ] 理解并掌握了通过 Cloudflare 优选 IP 降低国内网络延迟的方案
- [ ] 配置了本地电脑的
~/.ssh/config,实现了跨公网免端口直连家里 SSH - [ ] 为核心敏感后台挂上了 Cloudflare Access 邮箱二次认证防盗门
- [ ] 手机纯 5G 移动网络下现场验证公网直达成功,HTTPS 绿锁点亮
0 RESPONSES
读者回应
把读完后的余温,留在这篇文章下面。