异地组网全攻略:ZeroTier / Tailscale / Cloudflare 三大方案对比与实操教程

异地组网全攻略:ZeroTier / Tailscale / Cloudflare 三大方案

前言

你有没有遇到过这些问题?

  • 人在公司或出差,想访问家里 NAS 里的文件、看监控,却要先折腾路由器端口映射;
  • 想远程连接家里的电脑、内网里的打印机、摄像头,被公网 IP 和 NAT 卡住;
  • 买了 VPS / 云服务器,想和家里的设备组成一个”局域网”,互相随意访问。

异地组网(也叫虚拟局域网、Mesh 组网 / VPN overlay)就是解决这些问题的钥匙:它把分散在不同地区、不同运营商网络里的设备,通过加密隧道”拉”进同一个虚拟局域网。之后你用家里的 IP(如 192.168.2.8)就能直接访问,不用再记一串公网 IP,也不用开放端口。

目前最主流的是三大方案:

方案 技术 适合人群
ZeroTier 自研 VL2 二层虚拟以太网 想自建网络、设备跨平台、免费额度大
Tailscale 基于 WireGuard 的现代组网 个人/小团队、追求简单零配置、免费设备不限
Cloudflare 企业级零信任 + Tunnel 内网穿透 已有 Cloudflare 账号、想把内网服务发布到公网

下面分别介绍原理、免费额度、以及最详细的实操步骤。


方案一:ZeroTier(全球可达的虚拟以太网)

简介与原理

ZeroTier 通过自研协议在公网上构建一个 Layer-2 虚拟以太网(overlay network),所有节点宛如连接在同一台交换机上。它核心的 P2P 架构没有”集中式瓶颈”——控制面用平台的协调服务器(my.zerotier.com)管理网络,数据面设备之间尽量直连(打洞穿透 NAT),打洞失败时自动走中继。

  • 每个网络有一个 16 位十六进制 Network ID(如 8056c2e21c000001
  • 每个设备加入后会获得一个 V4/V6 虚拟地址,网络内可自由互ping、互访端口
  • 支持 Windows / macOS / Linux / Android / iOS / Docker / FreeBSD / OpenWRT 等几乎所有平台
  • 官网:https://www.zerotier.com

免费额度

  • 个人免费版:无限网络、每个网络最多 25 台设备,适合大多数个人家庭场景
  • 更高需求走付费计划($179/月起的商业版等)

完整操作教程

第一步:注册并在网页创建网络

  1. 打开 my.zerotier.com,用邮箱/Google/GitHub 登录
  2. 点击 Create A Network(创建一个网络)
  3. 创建成功后,页面会显示一个 16 位 Network ID,复制保存备用
  4. 记下这个网络默认的 IP 段(如 10.244.x.x),这就是你虚拟局域网段的起点

第二步:在各类设备上安装客户端并加入网络

Linux(Debian/Ubuntu/CentOS 等),一行脚本安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 加载 ZeroTier 官方源并安装(纯静态编译,装完即用)
curl -s https://install.zerotier.com | sudo bash

# 启动服务并设置开机自启
sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one

# 查看节点状态(拿到 10 位 Node ID 地址)
sudo zerotier-cli status

# 加入你的网络(换成你的 16 位 Network ID)
sudo zerotier-cli join 8056c2e21c000001

# 查看已加入的网络和分配的虚拟 IP
sudo zerotier-cli listnetworks

Windows / macOS:到 下载页面 下载安装包,装好后在系统托盘找到 ZeroTier 图标 → Join Network → 粘贴 16 位 Network ID 即可。

手机(Android/iOS):应用商店安装 ZeroTier One,打开后点右上角 +,输入 Network ID 加入。加入后记得把系统的 VPN 开关打开,让隧道真正生效。

第三步:在后台授权(关键步骤,容易漏)

  1. 回到 my.zerotier.com 你的网络
  2. Members(成员) 列表里,找到刚加入的设备
  3. 点击该成员行的 Auth 复选框(勾选变绿,即”通过认证”)
  4. 系统会自动给该设备分配一个虚拟 IP(如 10.244.x.x

⚠️ 新设备加入网络默认是未授权状态,没有授权之前无法与网络内其他节点通信。必须手动勾选 Auth。这是 ZeroTier 新手最容易踩的坑。

第四步:验证连通

在某台设备上 ping 另一台的虚拟 IP,或直接 ssh zt用户@10.244.x.x 远程登录:

1
ping 10.244.2.10        # 通说明组网成功

到这里,家里的 NAS、电脑、服务器的互相访问就打通了。

实用技巧

  • 跨网段访问:如果想在虚拟网里直接访问真实局域网(如用 192.168.2.x 访问家里所有设备),需要在某台 Linux 设备上开启 IPTables 转发 + NAT 并设置为路由设备,较复杂,家庭一般用虚拟 IP 直接访问即可。
  • 网络隔离:可以给不同成员设置流控规则(Traffic Rules),实现只允许特定节点互通,保护内网安全。

方案二:Tailscale(基于 WireGuard,简单到极致)

简介与原理

Tailscale 基于开源的 WireGuard® 协议构建,但把最难的配置都自动化了:你在网页/后台做一次授权,客户端就用 密钥管理 + NAT 打洞(TURN/STUN)+ DERP 中继 自动建立 P2P 加密连接。设备之间的连接几乎总是直连,速度快、时延低。

  • 设备就是你的”设备”(电脑、手机、服务器、NAS)
  • 默认启用 MagicDNS:加入的设备自动获得 主机名.你的tailnet.ts.net 这样的域名,不用记 IP
  • 支持 Windows / macOS / Linux / Android / iOS / 路由器(openwrt、Synology、OPNsense 等)
  • 官网:https://tailscale.com

免费额度

Personal(个人免费版,非商业用途,永久免费):

  • 设备数量无限
  • 最多 3 个网络/账号(tailnet),每个最多 6 个用户
  • 标记资源(服务器、子网路由等)50 个
  • 用 Google / GitHub / 个人自定义域名注册即可,免费开箱即用

完整操作教程

第一步:注册并创建账号

打开 tailscale.com/login,用你的 Google / GitHub / Microsoft 等账号登录。首次登录会自动创建一个 tailnet(相当于你的私有组网空间),并分配一个子域名(如 my-xxx.ts.net)。

第二步:在设备上安装并登录

Linux

1
2
3
4
5
# 安装
curl -fsSL https://tailscale.com/install.sh | sh

# 登录(会打印一个 auth URL)
sudo tailscale up

执行 tailscale up 后终端会显示一个链接,用手机或电脑浏览器打开,登录你的账号并确认授权,回终端就会提示登录成功。

Windows / macOS:到 tailscale.com/download 下载安装,运行 App 后用账号登录即可。

手机:应用商店安装 Tailscale,登录同一账号,开启 VPN 开关。

第三步:查看设备与分配 IP

再次执行:

1
tailscale status

会看到类似输出,其中就包含每台设备的 100.x.y.z IPMagicDNS 名称

1
2
3
4
5
# Health check:
# - Nickname may default to a .ts.net name from the machine hostname
100.101.102.1 nas user@ your-nas.ts.net linux -
100.101.102.2 laptop user@ your-laptop.ts.net linux -
100.101.102.3 phone user@ your-phone.ts.net ios -

网上随便找一台设备 ping 你的主机名.ts.net 域名或 100.x IP,通了就成功。

实用技巧

① 子网路由(把整个家庭内网暴露给 Tailscale 网)

在 NAS / 路由器等 Linux 设备上,把家里局域网(如 192.168.2.0/24)”广播”给整个组网,这样你在外面直接用 192.168.2.8 访问家里所有设备:

1
sudo tailscale up --advertise-routes=192.168.2.0/24

然后在后台 login.tailscale.com/adminMachines → 找到这台设备 → Edit route settings → 勾选对应网段 → Save,宣告生效。

② 出口节点(Exit Node,全流量走它翻/统一出口)

把某台设备设为出口节点,手机上所有流量都经过它出去:

1
sudo tailscale up --advertise-exit-node

然后在手机 Tailscale App 里开启 Use exit node 选择该设备即可。

③ Tailscale SSHtailscale ssh 主机名 免密登录,由 Tailscale 统一管理身份。


方案三:Cloudflare(企业级零信任 + Tunnel 内网穿透)

简介与原理

严格说,Cloudflare 和上面两个侧重点不完全一样。它提供一套 企业级零信任(Cloudflare Zero Trust) 体系,核心是 Cloudflare Tunnel(cloudflared)

  • 在你的内网设备/服务器上跑一个轻量的 cloudflared 守护进程
  • 它主动向 Cloudflare 全球网络发起 出站(outbound-only)连接,无需公网 IP、不用在路由器开端口映射、不会被 NAT/防火墙阻挡
  • Cloudflare 边缘节点再把请求”隧道”转发到你的内网服务
  • 配合 Access 策略,实现”每个请求都需要身份验证”的零信任访问
  • 官网:https://developers.cloudflare.com/cloudflare-one/

一句话对比:ZeroTier / Tailscale 偏重于”设备之间互联”(像 VPN),Cloudflare 更偏重于”把内网服务安全地发布给特定的人访问”(像内网穿透 + 访问控制)

免费额度

  • Cloudflare Zero Trust 免费版:最多 50 个用户
  • 可创建多个 Tunnel,流量走 Cloudflare 免费 CDN
  • 需要先有一个 Cloudflare 账号(可免费注册)并绑定一个域名做接入

完整操作教程(用 Tunnel 把内网服务发布出去)

第一步:注册 Cloudflare 并准备

  1. 打开 dash.cloudflare.com,注册账号
  2. 把一个域名接入 Cloudflare(在 Cloudflare 添加站点、改 NS 到 Cloudflare)
  3. 登录后左侧选你的站点,进入 Zero Trust(会引导你创建一个”团队域名”,如 myteam.cloudflareaccess.com,记住了以后访问用它)

实际上 Zero Trust 也可以不绑定域名直接开始试用,但要用 自定义域名 访问就必须先接入该域名。

第二步:安装 cloudflared 并创建隧道

在需要发布服务的内网 Linux 机器上:

1
2
3
4
5
6
7
# Linux 安装 cloudflared
# Debian/Ubuntu:
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

# 登录(会打开一个 Cloudflare 网页确认)
cloudflared tunnel login

登录成功后,自动把凭据写入到 ~/.cloudflared/cert.pem

第三步:创建隧道并配置

1
2
3
4
5
# 创建一条隧道,比如名字叫 home-elk
cloudflared tunnel create home-elk
# 会输出一条 Tunnel ID(类似 uuid)

# 为隧道写配置文件 ~/.cloudflared/config.yml

编辑 ~/.cloudflared/config.yml

1
2
3
4
5
6
7
8
9
tunnel: <你的Tunnel-ID>
credentials-file: /root/.cloudflared/<你的Tunnel-ID>.json

ingress:
- hostname: nas.你的域名.com # 你想通过哪个域名访问
service: http://localhost:3000 # 转发到本机 3000 端口的服务
- hostname: router.你的域名.com
service: http://192.168.2.1 # 也可以转发到内网其他设备
- service: http_status:404 # 兜底规则,必须存在

第四步:运行隧道并绑定 DNS

1
2
# 后台运行(生产建议用 systemd 托管开机自启)
cloudflared tunnel run home-elk

然后在 Cloudflare 后台给每个 hostname 加上一条 CNAME 记录:指向 <Tunnel-ID>.cfargotunnel.com(也可以用 cloudflared tunnel route dns home-elk nas.你的域名.com 一条命令自动添加)。

第五步:配置 Access 权限(零信任核心)

  1. 进入 Zero Trust → Access → Applications,添加一个 Self-hosted 应用
  2. 域名填 nas.你的域名.com
  3. Policies 里设置哪些身份可以访问(Gmail 邮箱、One-time PIN 邮箱、或 Allowlist 组织成员)
  4. 保存后,任何人访问 nas.你的域名.com 都要先过 Cloudflare 的登录验证,验证通过才把请求隧道到你的内网服务

至此,你在公网任何地方,用浏览器登录 Cloudflare Access 后,就能安全访问家里 NAS 的 Web 界面了。


三方案对比速览

维度 ZeroTier Tailscale Cloudflare Tunnel
定位 虚拟以太网 / Mesh VPN 现代 Mesh VPN(WireGuard) 内网穿透 + 零信任访问控制
免费额度 每网 25 设备 设备无限、6 用户 最多 50 用户
数据层协议 自研 ZeroTier 协议 WireGuard cloudflared 加密隧道
是否要公网 IP 否(打洞/中继) 否(打洞/DERP) 否(纯出站连接)
是否需要绑定域名 不需要 不需要(有 ts.net 域名) 需要(绑定后走自定义域名)
最擅长的场景 设备间互联互通 设备互联 + 子网路由 + 出口 把内网 Web 服务安全发布
上手难度 中(需后台授权) 低(最简单) 中高(多一步 DNS/域名)
平台覆盖 极广(含 OpenWRT/Docker) 广 客户端为 cloudflared + WARP

怎么选?

  • 就想把自己的多台设备连在一起互相访问:首选 Tailscale,免费、几乎零配置、体验最好。
  • 自建网络、深度控制、设备类型特别多(含路由器/NAS 老设备):用 ZeroTier
  • 想把 NAS / 建站服务 / 内网 Web 应用暴露给信任的人访问,又要安全和管控:用 Cloudflare Tunnel + Access

三者也可以混用:比如家里用 Tailscale 打通设备,再把其中的某台当作 Cloudflare 隧道入口发布给外部人员。


常见问题

Q:组网后速度慢是为什么?
A:多为 NAT 打洞失败走了中继(DERP / ZeroTier 中继)。开启 UDP 端口、减少设备前面的对称 NAT,通常能切回 P2P 直连,速度大幅提升。

Q:免费方案数据安全吗?
A:隧道都用现代加密(Tailscale 是 WireGuard,ZeroTier 是 VL2+加密),数据在传输中被加密。但要留意免费层通常是”控制面在厂商”——私网流量本身不经过厂商,只是打洞/中继的协调。

Q:在没网的环境(纯内网、无外网)能用吗?
A:不能直接用于完全离线环境;Tailscale/ZeroTier 首次握手依赖协调服务器,离线环境可用本地部署方案(Tailscale 有 self-hosted coordination 选项,Cloudflare 属云端)。普通有外网的家庭/办公场景无此问题。

Q:云服务器(VPS)也能加入组网吗?
A:完全可以。VPS 装客户端加入后,就成为虚拟局域网的一员,家里可以直接访问 VPS,反之 VPS 也能访问家里设备,方便做反向方向的服务。

Q:异地组网能代替公网 IP 吗?
A:对”设备间访问”(SSH、文件共享、远程桌面、访问 NAS Web)可以很好代替;对有严格公网入向要求的场景(比如给第三方发内网地址)则相对复杂,建议用 Cloudflare Tunnel 或纯公网。


参考资料

推荐链接