ZeroTier 内网穿透教程:异地组网与远程访问
ZeroTier 是什么
ZeroTier 是一个二层虚拟局域网工具。安装客户端并加入同一个网络后,设备会获得一个虚拟网卡和 10.x.x.x 之类的地址,彼此之间像插在同一台交换机上,可以直接用内网 IP 互相访问,不依赖公网 IP 和端口映射。
它的连接优先走点对点直连,打洞失败时才通过官方的根节点中转。相比传统内网穿透工具逐个映射端口,ZeroTier 更像是把整台机器接进一个私有网络,远程桌面、SMB、SSH、数据库、摄像头管理页面都能直接使用。
适合的场景包括:家里电脑和公司电脑互访、在外访问 NAS、给没有公网 IP 的服务器做远程运维、多地点设备统一管理。免费版有设备和网络数量限制,具体额度以官网定价页为准。
注册与创建网络
打开 ZeroTier 官网注册账号,登录后进入 Central 控制台,点击 Create A Network。创建完成后会得到一个 16 位十六进制字符串,这就是 Network ID,例如 8056c2e21c000001。
网络类型选择 Private,意思是新设备加入后必须由管理员在后台授权,未授权的设备拿不到 IP 也无法通信。除非只是临时测试,否则不要用 Public。
创建后可以先不急着改配置,等设备加入后再统一处理。控制台里每个成员都能看到名称、虚拟 IP、延迟和授权状态,排错时很有用。
安装客户端
各个平台的安装方式都比较直接。
Windows 与 macOS
从官网下载对应安装包,按提示安装。Windows 安装后会在服务里注册 ZeroTier One,任务栏出现图标;macOS 安装后可以在菜单栏看到。
Linux
官方提供了一键安装脚本,适用于常见发行版:
curl -s https://install.zerotier.com | sudo bash
sudo systemctl enable --now zerotier-one
安装完成后加入网络:
sudo zerotier-cli join <NETWORK_ID>
sudo zerotier-cli listnetworks
输出里如果出现 OK PRIVATE,说明已经加入成功,但还需要在后台授权才能拿到 IP。
手机与平板
iOS 和 Android 都有官方客户端,安装后输入 Network ID,打开开关即可。移动网络下也能用,适合临时访问家里的设备。
加入网络并授权设备
Windows 和 macOS 的图形界面可以直接输入 Network ID 并点击 Join。命令行方式在 Windows 上需要管理员权限:
zerotier-cli join <NETWORK_ID>
加入后回到 Central 控制台,在 Members 列表里会看到新设备。勾选 Auth 一栏的复选框完成授权。授权后稍等几秒,设备就会获得一个 Managed IP,例如 10.147.17.5。
如果列表里没有出现设备,先确认客户端服务在运行,再看本机是否能访问 ZeroTier 的根节点。可以用 zerotier-cli info 查看节点 ID 和在线状态,用 zerotier-cli peers 查看与根节点的连接。
分配固定 IP
默认情况下 Managed IP 由控制器自动分配,重装客户端或删除设备后重新加入,地址可能变化。远程桌面、挂载 SMB 这类用法希望地址固定下来,可以在控制台的成员详情里手动添加 Managed IP。
做法是给每台设备规划一个不冲突的地址,例如路由器 10.147.17.1、NAS 10.147.17.10、台式机 10.147.17.20,在成员详情里添加对应 IP 并保存。不同版本控制台的入口名称可能略有差异,以官方文档为准。
也可以直接在网络设置里配置 IPv4 自动分配范围,把常用设备的地址预留在范围之外,避免和 DHCP 池冲突。
常见用途
远程桌面
Windows 开启远程桌面后,在另一台设备上运行 mstsc,地址填 ZeroTier 分配的 IP,例如 10.147.17.20,输入系统账号密码即可。不需要路由器端口映射,也不需要公网 IP。
如果想用更轻量的方案,可以试试 Remote Control 远程控制软件,它支持通过 ZeroTier 跨网络连接,提供屏幕传输、鼠标和虚拟键盘控制。
访问 NAS
群晖、威联通、TrueNAS 都可以安装 ZeroTier。加入网络后,直接用浏览器访问 http://10.147.17.10:5000 之类的管理地址,或者用 SMB 挂载 \\10.147.17.10\share。
前提是 NAS 的防火墙允许虚拟网卡所在网段访问对应端口,并且客户端设置里开启了 Allow Managed 和 Allow Global,否则路由不会被接受。
远程开发
服务器上装好 ZeroTier 后,本地可以直接 ssh user@10.147.17.30,VS Code 的 Remote SSH 也能用这个地址连接。数据库、Redis、调试端口都只监听内网地址,比暴露到公网安全得多。
Moon 节点思路
ZeroTier 的官方根节点分布在海外,国内设备首次握手或打洞失败时,走中转可能延迟较高。Moon 节点相当于自建的私有根节点,部署在有公网 IP 的服务器上,可以缩短发现路径、提升连接成功率。
大致流程如下:
# 在具有公网 IP 的 Linux 服务器上执行
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
# 编辑 moon.json,在 stableEndpoints 中填入公网 IP 和 9993 端口
# 例如 "1.2.3.4/9993"
sudo zerotier-idtool genmoon moon.json
sudo mkdir -p moons.d
sudo cp 000000*.moon moons.d/
sudo systemctl restart zerotier-one
其他设备加入这个 Moon:
sudo zerotier-cli orbit <MOON_ID> <MOON_ID>
MOON_ID 是生成 Moon 时输出的节点 ID。服务器安全组或防火墙要放行 UDP 9993,并且公网 IP 最好固定。Moon 不是必须的,普通使用先直连官方根节点即可,遇到延迟高或经常掉线再考虑。
安全建议
- Network ID 相当于入网凭证,不要发在公开群聊、截图或博客里。泄露后虽然还需要管理员授权,但会多出被探测的风险。
- 坚持 Private 网络,逐台授权设备,定期清理不再使用的成员。
- 远程桌面、SSH、数据库等服务的防火墙规则只允许 ZeroTier 网段访问,不要图省事对
0.0.0.0开放。 - 系统账号使用强密码,SSH 尽量用密钥登录,关闭密码认证。
- 如果要给多人使用,可以在网络设置里配置 Flow Rules 限制成员之间的互访,避免一台设备失陷后横向移动。
- 客户端升级要及时,旧版本可能存在已知问题,具体修复情况以官方发布说明为准。
排错思路
先在本机执行 zerotier-cli listnetworks,确认状态是 OK。如果显示 ACCESS_DENIED,说明后台没有授权;显示 REQUESTING_CONFIGURATION,通常是无法连到根节点或网络 ID 输错。
能拿到 IP 但 ping 不通,按顺序检查:两端是否都在线、防火墙是否放行 ICMP 和业务端口、客户端是否允许 Managed 路由、目标服务是否只监听了 127.0.0.1。最后一项经常被忽略,比如数据库默认只监听本地回环,需要改成监听虚拟网卡地址或 0.0.0.0。
常见问题
ZeroTier 需要公网 IP 吗?
普通成员不需要。只有自建 Moon 节点时才需要一台有公网 IP 的服务器,用来做私有根节点中转。
免费版够用吗?
个人和小团队通常够用,但免费版对网络数量、成员数量和高级功能有限制,具体额度以官网定价页为准。
为什么设备显示在线却分配不到 IP?
常见原因是网络为 Private 且未授权,或者控制台的 IP 分配范围已耗尽。先检查成员是否勾选授权,再确认 Managed IP 配置。
ZeroTier 和 frp 这类工具有什么区别?
frp 是端口映射,需要一台公网服务器做中转,按端口逐个暴露;ZeroTier 组建的是虚拟局域网,设备之间可以直接互访,配置更接近真实内网,但需要每台设备安装客户端。
手机上能用吗?
可以,官方提供 iOS 和 Android 客户端。安装后加入同一个网络并由管理员授权,就能访问网内其他设备。