ZeroTier
ZeroTier 是 MikroTik RouterOS 的网络虚拟化引擎,通过以太网虚拟化和加密的点对点网络实现安全的跨网络设备连接。它支持游戏、LAN 访问、NAT 穿透和远程 Pi-Hole 管理,同时需要正确的 UDP 端口配置、NAT 类型选择以及最少的 NAT 层数才能实现可靠连接。
ZeroTier
ZeroTier 网络虚拟机管理器是一个自包含的网络虚拟化引擎,它实现了一个类似于 VXLAN 的以太网虚拟化层,构建在加密安全的全球点对点网络之上。它提供与企业 SDN 交换机相当的高级网络虚拟化和管理能力,但可跨越局域网和广域网,并连接几乎任何类型的应用或设备。
MikroTik 已在 RouterOS v7.1rc2 中将 ZeroTier 作为面向 ARM/ARM64 架构的独立软件包添加。
使用场景
- 在家中托管游戏服务器(适合仅限 LAN 的游戏)或与朋友创建 LAN 聚会。
- 直接访问 NAT 后面的 LAN 设备。
- 无需向互联网开放端口即可通过 SSH 访问 LAN 设备。
- 通过互联网从任何地方使用你本地的 Pi-Hole 设置。
信息
ZeroTier 功能可能会被
device-mode阻止。在配置 ZeroTier 之前,请确保在system/device-mode中已启用它。(更多信息)
视频教程
所需的网络配置
ZeroTier 使用哪些端口?
它监听 3 个 UDP 端口:
- 9993 - 默认端口
- 一个由你的 ZeroTier 地址派生出的随机高位端口
- 一个用于 UPnP/NAT-PMP 映射的随机高位端口
这意味着你的 peers 可能监听任何端口。要直接与它们通信,你需要能够向它们的任意端口发送数据。
推荐的本地网络和互联网网关配置
这些 ZeroTier 推荐指南与绝大多数使用商用网关和接入点的典型部署一致:
- 不要限制出站 UDP 流量。
- 在网络中支持 UPnP 或 NAT-PMP 可以极大地提升性能,因为它允许 ZeroTier endpoint 映射外部端口并完全避免 NAT 穿透。
- 推荐使用 IPv6,如果直连链路两端都支持,它可以极大地提高直接连接的可靠性。如果存在 IPv6,请在不使用 NAT 的情况下实现它(IPv6 不需要 NAT,且 NAT 会增加复杂性),并使用允许双向 UDP 会话的有状态防火墙。
- 不要使用 "symmetric"(对称)NAT。请使用 "full cone" 或 "port restricted cone" NAT。对称 NAT 对点对点流量极为不利,会劣化 VoIP、视频聊天、游戏、WebRTC 以及许多其他协议,ZeroTier 也不例外。
- ZeroTier endpoint 与互联网之间不应存在超过一层的 NAT。多层 NAT 会因不同层级之间状态和行为的混乱交互而引入连接不稳定性。不要使用双重 NAT。
- NAT 设备的端口映射或连接超时不应短于 60 秒。
- 每个 NAT 管理的外部 IP 地址后面的设备不应超过 16,000 台,以确保每台设备都能映射足够数量的端口。
- 交换机和无线接入点应允许本地设备之间的直接本地流量。关闭任何 "local isolation"(本地隔离)功能。如果交换机允许更细粒度的控制,请允许与端口 9993 之间的本地 UDP 流量。
配置示例

ZeroTier 的设计目标是零配置 —— 你可以在不编写配置文件或不提供其他节点 IP 地址的情况下启动一个新节点。世界上任意两台设备几乎都能立即找到彼此并通信。以下示例在 RouterOS 设备上启用 ZeroTier,并将一部手机与 ZeroTier 应用程序连接起来。
-
在 my.zerotier.com 上注册并 Create A Network,获取 Network ID,在本例中为:1d71939404912b40。

-
下载并安装 ZeroTier NPK 软件包。你可以在 "Extra packages" 下找到它。将软件包上传到设备并重启。
-
启用默认(官方)ZeroTier 实例:
[admin@MikroTik] > /zerotier/enable zt1 -
添加一个新网络,指定你在 ZeroTier 云控制台中创建的网络 ID:
[admin@mikrotik] /zerotier/interface/add network=1d71939404912b40 instance=zt1 -
验证 ZeroTier 配置:
[admin@MikroTik] > /zerotier/interface/print Flags: R - RUNNING Columns: NAME, MAC-ADDRESS, NETWORK, NETWORK-NAME, STATUS # NAME MAC-ADDRESS NETWORK NETWORK-NAME STATUS 0 R zerotier1 42:AC:0D:0F:C6:F6 1d71939404912b40 modest_metcalfe OK -
你可能需要允许从 ZeroTier 接口到你的路由器,以及可选的到其他 LAN 接口的连接:
/ip/firewall/filter/add action=accept chain=forward in-interface=zerotier1 place-before=0 /ip/firewall/filter/add action=accept chain=input in-interface=zerotier1 place-before=0 -
在你的智能手机或计算机上安装 ZeroTier 客户端。按照 ZeroTier 手册连接到同一网络。
-
如果 "Access Control" 设置为 "Private",你必须在节点成为成员之前对其进行授权:

-
[admin@MikroTik] > `/ip/address/print` where interface~"zero" Flags: D - DYNAMIC Columns: ADDRESS, NETWORK, INTERFACE # ADDRESS NETWORK INTERFACE 3 D 192.168.192.105/24 192.168.192.0 zerotier1 [admin@MikroTik] > ping 192.168.192.252 count=3 SEQ HOST SIZE TTL TIME STATUS 0 192.168.192.252 56 64 407us 1 192.168.192.252 56 64 452us 2 192.168.192.252 56 64 451us sent=3 received=3 packet-loss=0% min-rtt=407us avg-rtt=436us max-rtt=452us
提示
你应该在 ZeroTier 云控制台中指定到特定内部子网的路由,以确保你从其他设备连接时能够访问这些网络。
Controller
RouterOS 以实现节点的角色提供 ZeroTier 功能,其中大部分网络配置必须在 ZeroTier 网页仪表板上完成。但是,如果你希望在自己的设备上完成所有配置,RouterOS 也支持托管你自己的 controller。
一个常见的误解是把网络 controller 与 root servers(planet 和 moons)混为一谈。Root servers 是在 VL1 层 运行的连接促进者。网络 controller 是属于 VL2 层 的配置管理者和证书颁发机构。通常,root servers 不加入或控制虚拟网络,而网络 controller 不是 root servers,不过一个节点也有可能同时承担两者。
每个 ZeroTier 实例都有一个自托管的网络 controller,可用于托管虚拟网络。controller 负责接纳成员加入网络,并颁发包括证书在内的默认配置信息。理论上 controller 可以托管多达 2^24 个网络并服务数百万台设备,但你应该将大量网络分散到多个 controller 上,以实现负载均衡和容错。
Controller 在 /zerotier/controller 菜单中配置。
配置示例
本示例使用 RouterOS 内置的 ZeroTier controller 向新网络主机发送合适的证书、凭据和配置信息。controller 在 "RouterOS Home" 设备上运行,并将 3 个单元加入网络:一部手机、一台笔记本电脑和一个 RouterOS Office 设备。你可以在一个网络中最多加入 100 台设备。

RouterOS Home
首先,启用运行在 VL1 层的默认实例:
[admin@Home] /zerotier> print
Columns: NAME, PORT, IDENTITY.PUBLIC
# NAME PORT IDENTITY.PUBLIC
;;; ZeroTier Central controller - https://my.zerotier.com/
0 zt1 9993 879c0b5265:0:d5fd2d17805e011d9b93ce8779385e427c8f405e520eea9284809d8444de0335a817xxb21aa4ba153bfbc229ca34d94e08de96d925a4aaa19b252da546693a28
现在,通过运行在 VL2 层的 controller 部分创建一个新网络。每个网络都有自己的 controller,每个网络 ID 由 controller 地址和 controller ID 的组合生成。
使用 private=yes 选项可获得更安全的网络:
[admin@Home] /zerotier> controller/add name=ZT-private instance=zt1 ip-range=172.27.27.10-172.27.27.20 private=yes routes=172.27.27.0/24
[admin@Home] /zerotier> controller/print
Columns: INSTANCE, NAME, NETWORK, PRIVATE
# INSTANCE NAME NETWORK PRIVATE
0 zt1 ZT-private 879c0b5265a99e4b yes
在 interface 部分下添加新网络:
[admin@Home] /zerotier> interface/add network=879c0b5265a99e4b name=myZeroTier instance=zt1
[admin@Home] /zerotier> interface/print interval=1
Columns: NAME, MAC-ADDRESS, NETWORK, STATUS
# NAME MAC-ADDRESS NETWORK STATUS
0 myZeroTier 4A:19:35:6E:00:6E 879c0b5265a99e4b ACCESS_DENIED
每个新 peer 都会请求 controller 加入网络。在这种情况下,状态为 ACCESS_DENIED,并且必须对 peer 进行授权,因为使用了 private=yes 选项。
授权后,网络中的每个成员都会从 controller 收到有关新 peer 的信息以及与它们交换数据包的批准:
[admin@Home] /zerotier> controller/member/print
Columns: NETWORK, ZT-ADDRESS
# NETWORK ZT-ADDRESS
0 ZT-private 879a0b5265
[admin@Home] /zerotier> controller/member/set 0 authorized=yes
验证新配置的 IP 地址和路由
[admin@Home] /zerotier> `/ip/address/print` where interface~"Zero"
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
# ADDRESS NETWORK INTERFACE
4 D 172.27.27.15/24 172.27.27.0 myZeroTier
[admin@Home] /zerotier> `/ip/route/pr` where gateway~"Zero"
Flags: D - DYNAMIC; A - ACTIVE; c, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
DST-ADDRESS GATEWAY DISTANCE
DAc 172.27.27.0/24 myZeroTier 0
RouterOS Office
Office 设备上的配置。启用默认实例并请求 controller 加入 879c0b5265a99e4b 网络:
[admin@office] /zerotier> interface/add network=879c0b5265a99e4b instance=zt1 name=ZT-interface
[admin@office] /zerotier> interface/print interval=1
Columns: NAME, MAC-ADDRESS, NETWORK, STATUS
# NAME MAC-ADDRESS NETWORK STATUS
0 ZT-interface 4A:40:1C:38:97:BA 879c0b5265a99e4b ACCESS_DENIED
和之前一样,由于网络是私有的,必须在 "RouterOS Home" 设备上对新 peer 进行授权。之后,验证从 controller 收到的 IP 地址和路由:
[admin@Home] /zerotier> controller/member/print
Flags: A - AUTHORIZED
Columns: NETWORK, ZT-ADDRESS, IP-ADDRESS, LAST-SEEN
# NETWORK ZT-ADDRESS IP-ADDRESS LAST-SEEN
0 A ZT-private 879a0b5265 172.27.27.15
1 A ZT-private 554a914c7f 172.27.27.17
2 A ZT-private a83ac6032a 172.27.27.10
3 ZT-private deba5dc5b1 172.27.27.13 3s348ms
[admin@Home] /zerotier> controller/member/set 3 authorized=yes
[admin@Home] /zerotier> controller/member/print
Flags: A - AUTHORIZED
Columns: NETWORK, ZT-ADDRESS, IP-ADDRESS, LAST-SEEN
# NETWORK ZT-ADDRESS IP-ADDRESS LAST-SEEN
0 A ZT-private 879a0b5265 172.27.27.15
1 A ZT-private 554a914c7f 172.27.27.17
2 A ZT-private a83ac6032a 172.27.27.10
3 A ZT-private deba5dc5b1 172.27.27.13 4s55ms
验证通过 ZeroTier 获取的 IP 地址和路由:
[admin@office] /zerotier> `/ip/address/print` where interface~"ZT"
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
# ADDRESS NETWORK INTERFACE
0 D 172.27.27.13/24 172.27.27.0 ZT-interface
[admin@office] /zerotier> `/ip/route/print` where gateway~"ZT"
Flags: D - DYNAMIC; A - ACTIVE; c, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
DST-ADDRESS GATEWAY DISTANCE
DAc 172.27.27.0/24 ZT-interface 0
其他设备
为你的手机或计算机下载 ZeroTier 应用并加入你新创建的网络:
- 从笔记本电脑的 ZeroTier 应用程序加入 879c0b5265a99e4b 网络。
- 使用 ZeroTier 移动应用加入 879c0b5265a99e4b 网络。
警告
所有其他新主机也必须在
/zerotier/controller/member/部分中进行授权。

