ZeroTier 与 Tailscale 组网

组网思路

家里没有公网 IP 时,除了反向代理这条线,还有更原生的做法:把分散在各处的设备组进同一个虚拟局域网。ZeroTier 与 Tailscale 都属于这类方案,底层技术一个是自研虚拟交换机、一个是 WireGuard,共同点是装个客户端、登录账号,设备之间就能互相访问,不用管 NAT 与端口。对个人与家庭场景,两者的免费额度都足够用。

两条路线的定位略有差别:ZeroTier 更像一张虚拟二层网络,可以跑任意协议,甚至做桥接把整个子网接进来;Tailscale 在应用层做得更现代,自带 ACL、MagicDNS 与 HTTPS 证书,客户端体验顺滑。家用选择只看一点:你的设备装哪个客户端更省事,手机、平板、NAS、软路由都要能装。剩下的都是细节。

维度 ZeroTier Tailscale
底层技术 虚拟二层网络 WireGuard 封装
免费额度 25 设备左右 100 设备、3 用户
配置入口 网页控制台 网页加命令行
穿透能力 依赖根服务器打洞 多重 NAT 中继兜底
客户端覆盖 主流平台 主流平台更全

合规使用的前提下,这类工具最适合家人远程访问家里的 NAS、看监控、管理设备,本质是把家庭网络的边界延伸到外部设备。本文所有内容都限于这个场景:自己的网络、自己的设备、合法的用途。

ZeroTier 实战

注册账号后创建一个网络,会得到一个 16 位的网络 ID。每台设备装好客户端,用这个 ID 加入网络,然后到控制台授权(auth)并勾选允许以太网桥接(如需要)。控制台里能看到每台设备的成员 ID、IP 地址与最后在线时间,管理直观。控制台上的 Access Control 一般选 Private,只有授权的设备才能进网;成员列表里的 IP 可以固定,避免重装系统后地址变化。

软路由上建议装 ZeroTier 的客户端并把整个内网通告出去:ZeroTier 界面里设置 Managed Routes,把家庭子网(如 192.168.1.0/24)指向路由器的虚拟 IP,这样外网设备加入网络后,直接用内网地址就能访问家里所有机器,不用每台设备单独装客户端。OpenWrt 上有现成的 zerotier 包,配置文件写好网络 ID 即可,加入后到控制台授权。

自己搭 Moon 服务器是 ZeroTier 的进阶操作:官方根服务器在国外,国内打洞经常绕路,延迟高。Moon 相当于自建的根服务器,帮助设备更快找到彼此。月光服务器搭在一台有公网 IP 的云主机上,生成 moon.json、启动服务、把 ID 拷回各客户端的 moon.d 目录。搭好后成员间握手会优先走 Moon,跨运营商也能有几十毫秒的延迟,体验天差地别。

ZeroTier加入流程

Tailscale 实战

Tailscale 的上手更傻瓜:各设备装客户端,用同一个账号登录就自动进网,默认无需授权(除非开了设备审批)。控制台给每台设备分配一个 100.x.y.z 的虚拟地址,配合 MagicDNS,直接用主机名互访。软路由上安装 tailscale 包后,登一次录即可常驻。

最实用的两个功能是子网路由与出口节点。子网路由把家里内网通告给整个网络:

# 软路由上开启转发并通告子网
echo net.ipv4.ip_forward = 1 > /etc/sysctl.d/99-tailscale.conf
sysctl -p /etc/sysctl.d/99-tailscale.conf
tailscale up --advertise-routes=192.168.1.0/24 --accept-routes

--advertise-routes 只是通告,真正生效还要到控制台的 Edit route settings 里勾选批准。--accept-routes 则让这台设备接受其他节点通告的子网,软路由上的客户端双标志一起用。出口节点(exit node)则是把家里路由器当成所有流量的出口,出差时用酒店 WiFi 也能从家里的出口上网,不仅安全,还能顺带用上家里的 DNS 过滤。同样 --advertise-exit-node 通告后,控制台批准,客户端勾选使用即可。

Tailscale子网路由

两者的组合与取舍

成熟的家庭方案经常是两者并用:主力用 Tailscale(ACL 好用、延迟稳定),ZeroTier 作为备用链路(不依赖同一套账号体系)。也可以只用其一,功能完全够。真正要想清楚的是控制平面:两者都依赖官方的协调服务器做密钥分发,协调服务器挂了虽然现有隧道还能用,但新设备加入会失败。对这点敏感的玩家可以自建 Tailscale 的开源控制端(如 Headscale),代价是放弃一些集成特性与手机客户端的便利。

安全方面两条建议:所有客户端开启密钥不过期(服务器类设备尤其),同时定期清理控制台里不再使用的设备。ACL 用最小权限原则:只放行确实需要的端口,不要图方便全开。

家用场景的网络拓扑还有一处常见分歧:组网客户端装在软路由上,还是装在单独的容器里。装软路由上的好处是全家设备零配置,连上家里 WiFi 就自动进入虚拟网络;坏处是虚拟网络的路由表与家庭网络的路由表混在一起,排错时要同时看两张表。装容器里则反过来:隔离清晰,但只对容器所在主机生效,其他设备想进网还得各自装客户端。折中方案是软路由上只通告子网路由(让外部能访问家里),日常出门的设备各自装客户端加入同一网络,两边的边界清楚。

移动设备上组网客户端常驻还有一些细节:iOS 与 Android 客户端在后台运行时,系统省电策略可能把 VPN 通道挂起,回到前台才恢复,表现为打开 App 后才连上。对于需要持续接收推送的智能家居场景,设备端保持常亮不现实,所以这类场景一定要让流量经过家里的路由(装在路由上的方案),而不是指望手机客户端保持长连接。手机客户端更适合临时使用:查个监控、传个文件,不要按永久在线来规划。

远程到内网后大量操作通过 SSH 完成,密钥管理与登录加固见 SSH 远程登录与加固。理解组网背后的路由原理,可以参考 计算机网络入门。

延迟与性能调优

组网方案的口碑差距主要来自延迟。打洞成功时设备间直连,延迟约等于物理距离;打洞失败走中继,延迟可能高一个数量级。判断有没有走直连:两边都看客户端连接状态里的对端地址类型,或者直接测 RTT——10 毫秒级别大概率直连,100 毫秒以上基本是中继。ZeroTier 搭 Moon 之后重测,Tailscale 的多级中继也会自动选最快的路径,但物理距离远的成员就是没办法靠软件克服光速。

提升组网体验的实用手段有几个:把支持固件升级的客户端全部升级(新版本通常有更好的 NAT 穿透)、开启以太网桥接让两层流量通、以及用 IPv6 直连的家庭服务器充当稳定节点。如果家里有公网 IPv6,组网客户端会优先直接互通,几乎不再依赖中继——这也是 IPv6 章节推荐的 DDNS 方案的又一收益。

带宽方面家用组网通常能跑满上行(外出方向),反向(从家里访问外部设备)受对端网络限制。把常驻服务都留在家里让大家远程访问,是链路利用效率最高的设计;反向的大吞吐需求则老老实实走 frp 或 IPv6 直连。所有这些调优动作都与“家人远程看家庭照片”这类典型场景完全够用。

组网客户端的家常使用还有几个细节:手机客户端别装路由之外的节点(用流量时整个手机都走家里出口反而更耗电);电脑客户端可以设置按需连接而不是常驻;不常用的设备登出释放名额。组网是工具不是信仰,用最舒服的姿势用它。

组网延迟对照

组网工具装在 NAS 上还有个隐形好处:NAS 本身就是家庭数据中心,手机连上虚拟网络后访问照片与文件一气呵成,不需要再把服务逐个映射出来。家里的 NAS 上只要装一个客户端,整个家庭数据资产就多了一个随时可达的入口。

反过来这也意味着 NAS 的网络边界扩大了:客户端账号丢失或设备遗失会拖累整个虚拟网络。对应的安全动作是 NAS 上的组网客户端用独立认证(预共享密钥而非扫码登录),并且在 NAS 服务端对敏感目录加二次认证。入口扩大了多少倍,门口的锁就要重多少倍。

组网与家庭生活

组网方案落地后最有意思的变化是“距离感消失”:出差途中在高铁上就能把家里 NAS 的电费账翻出来、监控调出来看一眼、给家里人开个门锁。家不再是物理上回不去的地方,而是网络里永远在线的一个站点。但也要给这种随时在线设边界:家庭服务不该总是随叫随到地占用注意力,需要专注工作时把组网客户端断开一会儿,技术服务的应该是生活而非相反。

延伸阅读