原始需求

现在有3个常用办公地点:家,宿舍,实验室。每个办公地点都有若干设备,也都有自己的局域网,也都没有固定的对外ipv4地址。 我现在想要实现各个设备跨域自由访问,类似虚拟局域网。 使用CloudFlare Mesh是否合适?如果合适?请详细具体知道我如何搭建和使用?

方案

Cloudflare Mesh 非常适合这样的场景。 它就是为"无公网 IP 的多地点设备互联"设计的,所有流量经 Cloudflare 全球网络加密转发(后量子加密),支持 TCP/UDP/ICMP,相当于一个跨地域的虚拟局域网。


两种组网模式

模式适用场景是否需要服务器
A. 纯客户端互联每台设备都装客户端,设备间用 Mesh IP 互访❌ 不需要
B. 站点到站点(Site-to-Site)每个地点部署一台 Linux 做 Mesh 节点,该地点整段子网互通✅ 每地点一台

推荐方案

  • 如果你每台设备都能装客户端(Windows/macOS/Linux/iOS/Android)→ 方案 A,最简单,零基础设施
  • 如果某些设备不能装客户端(如打印机、NAS、IoT)→ 方案 B,让整段子网可达
  • 两者可以混合使用:既部署节点打通子网,又在常用设备上装客户端

方案 A:纯客户端互联(最简方案)

每个地点的每台设备安装 Cloudflare One Client 并注册,即可获得一个 100.96.0.0/12 范围内的 Mesh IP,任意两台设备直接用 Mesh IP 互访。

步骤 1:运行 Mesh 设置向导

  1. 打开 Mesh 页面
  2. 首次使用会弹出 Setup Wizard,按向导完成账户配置
  3. 当向导问到是否部署 Mesh 节点时,选 “I’ll connect later”(方案 A 不需要节点)

步骤 2:配置 Split Tunnel(关键)

客户端必须让 Mesh IP 范围走 Cloudflare 隧道,否则设备间无法互通。

  1. 进入 Zero Trust → Team & Resources → Devices → Device profiles → General profiles
  2. 找到客户端使用的设备配置文件,点 Configure
  3. Split Tunnels 中:
    • 如果是 Exclude 模式(默认):确保排除列表中没有 100.64.0.0/10(它包含 100.96.0.0/12)。如果有,删除它
    • 如果是 Include 模式:在 Include 列表中添加 100.96.0.0/12

步骤 3:在每台设备上安装并注册客户端

Windows / macOS / Linux:

  1. 下载 并安装 Cloudflare One Client
  2. 启动客户端 → 选择 Zero Trust security
  3. 输入你的 team name(在 Zero Trust 设置中可看到)
  4. 完成认证(可用邮箱 OTP 等简单方式)

iOS / Android:

  1. 安装 Cloudflare One Agent app
  2. 输入 team name → 认证 → 安装 VPN Profile

步骤 4:验证连通性

每台设备注册后在 Mesh 页面 可看到其 Mesh IP。在任一设备上:

1
ping <对端设备的 Mesh IP>

方案 B:站点到站点(打通整段子网)

适合需要让子网内未装客户端的设备(NAS、打印机等)也能被跨地点访问。

架构示意

家 (192.168.1.0/24)          宿舍 (192.168.2.0/24)       实验室 (192.168.3.0/24)
  ┌─────────────┐              ┌─────────────┐             ┌─────────────┐
  │ 各设备       │              │ 各设备       │             │ 各设备       │
  │ 192.168.1.x │              │ 192.168.2.x │             │ 192.168.3.x │
  └──────┬──────┘              └──────┬──────┘             └──────┬──────┘
         │                            │                           │
    Mesh 节点                    Mesh 节点                    Mesh 节点
  (Linux, 常驻)                 (Linux, 常驻)               (Linux, 常驻)
         │                            │                           │
         └──────────── Cloudflare 全球网络 ────────────────────────┘

前提:三个地点的局域网网段不能重叠。如果都用的 192.168.1.0/24,需要先改路由器把不同地点设成不同网段。

步骤 1:运行 Mesh 设置向导

同方案 A 步骤 1,打开 Mesh 页面 完成向导。

步骤 2:在每个地点创建一个 Mesh 节点

  1. Mesh 页面Add → 创建节点
  2. 重复 3 次,分别命名为如 mesh-homemesh-dormmesh-lab
  3. 每个节点会生成一个 Token

步骤 3:在每个地点的 Linux 服务器上安装并注册

在每个地点选一台常开的 Linux 机器(可以是树莓派、小主机、NAS 上的虚拟机等),依次执行:

Debian/Ubuntu:

1
2
3
4
5
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(. /etc/os-release && echo $VERSION_CODENAME) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list && \
sudo apt-get update -qq && sudo apt-get install -y -qq cloudflare-warp && \
printf 'net.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1\nnet.ipv6.conf.all.accept_ra = 2\n' | sudo tee /etc/sysctl.d/99-zzz-cloudflare-warp-connector.conf && \
sudo sysctl --system

RHEL/CentOS 9+:

1
2
3
4
5
sudo dnf install -y epel-release && \
curl -fsSl https://pkg.cloudflareclient.com/cloudflare-warp-ascii.repo | sudo tee /etc/yum.repos.d/cloudflare-warp.repo && \
sudo yum install -y cloudflare-warp && \
printf 'net.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1\nnet.ipv6.conf.all.accept_ra = 2\n' | sudo tee /etc/sysctl.d/99-zzz-cloudflare-warp-connector.conf && \
sudo sysctl --system

注册节点(用对应节点的 Token):

1
sudo warp-cli connector new <TOKEN> && sudo warp-cli connect

回到 Mesh 页面,节点应显示为 Online 并分配了 Mesh IP。

步骤 4:为每个节点添加 CIDR 路由

让 Cloudflare 知道哪个节点负责哪个子网:

  1. 进入 Networking → Mesh → 选中节点 → Routes 标签
  2. Add route
  3. 输入该地点的子网 CIDR,例如:
    • mesh-home192.168.1.0/24
    • mesh-dorm192.168.2.0/24
    • mesh-lab192.168.3.0/24
  4. 保存

步骤 5:配置 Split Tunnel(确保流量走 Cloudflare)

在节点的设备配置文件和客户端的设备配置文件中,确保远程子网 CIDR 走 Cloudflare:

  • Include 模式(推荐):在 Include 列表中加入:
    • 100.96.0.0/12(Mesh IP 范围)
    • 192.168.1.0/24192.168.2.0/24192.168.3.0/24(三个子网)
  • Exclude 模式:确保这些 CIDR 不在排除列表中

路径:Zero Trust → Team & Resources → Devices → Device profiles → General profiles → Configure → Split Tunnels → Manage

步骤 6:配置本地路由器(让子网设备回包走 Mesh 节点)

子网内的设备收到来自远端的请求后,回包需要能路由到 Mesh 节点。有两种方式:

方式 1:Mesh 节点就是默认网关(如在路由器上跑)→ 无需额外配置

方式 2:Mesh 节点是子网内普通主机(更常见)→ 在路由器上加静态路由:

地点目的地下一跳
192.168.2.0/24家的 Mesh 节点 IP(如 192.168.1.10
192.168.3.0/24家的 Mesh 节点 IP
100.96.0.0/12家的 Mesh 节点 IP
宿舍192.168.1.0/24宿舍的 Mesh 节点 IP
宿舍192.168.3.0/24宿舍的 Mesh 节点 IP
宿舍100.96.0.0/12宿舍的 Mesh 节点 IP
实验室192.168.1.0/24实验室的 Mesh 节点 IP
实验室192.168.2.0/24实验室的 Mesh 节点 IP
实验室100.96.0.0/12实验室的 Mesh 节点 IP

如果觉得静态路由麻烦,Mesh 节点默认开启了 Source NAT(SNAT),远端设备看到的源 IP 是 Mesh 节点的本地 IP,回包自然回到节点,不需要静态路由。只有当你关闭了 SNAT 时才需要配静态路由。

步骤 7:验证

在家的设备上 ping 实验室的设备:

1
ping 192.168.3.50

在装了客户端的笔记本上 ping 任何地点的 Mesh 节点:

1
ping <mesh-lab 的 Mesh IP>

方案 A + B 混合(推荐)

最灵活的做法:

  1. 每个地点部署一台 Mesh 节点(方案 B),打通整段子网
  2. 常用设备(笔记本、手机)再装 Cloudflare One Client(方案 A),出门也能直接用 Mesh IP 访问任意地点的设备

注意事项

  • 网段不能重叠:三个地点的 LAN 网段必须不同,否则需要用 Virtual Networks 功能隔离
  • Mesh 节点需常开:方案 B 中节点关机则该地点不可达
  • 协议要求:Mesh 节点的设备配置文件需使用 MASQUE 协议(默认即是),不要改成 WireGuard
  • 节点上限:每账户最多 50 个 Mesh 节点
  • 免费计划:Cloudflare Zero Trust Free 计划支持最多 50 个用户,足够个人使用