ZeroTier на MikroTik — P2P VPN без сервера
ZeroTier на MikroTik — P2P VPN-сеть без сервера
ZeroTier — технология SD-WAN и P2P VPN, позволяющая объединить устройства в единую виртуальную сеть без выделенного VPN-сервера. В отличие от классических VPN (WireGuard, IPsec), где нужен сервер с публичным IP и ручная настройка маршрутов, ZeroTier автоматически решает проблемы NAT traversal и устанавливает прямые соединения между узлами. Начиная с RouterOS 7.1, MikroTik включает встроенную поддержку ZeroTier — не нужно устанавливать дополнительные пакеты.
Описание
Как работает ZeroTier
ZeroTier создаёт виртуальную Ethernet-сеть (Layer 2) поверх интернета. Архитектура состоит из трёх компонентов:
- ZeroTier Central (my.zerotier.com) — облачный контроллер, управляющий сетями и авторизацией устройств. Не передаёт трафик — только управляющую информацию.
- Root Servers (Planets) — серверы, помогающие узлам найти друг друга (discovery). После установки прямого соединения трафик идёт напрямую.
- ZeroTier Client — агент на каждом устройстве (включая MikroTik), создающий виртуальный сетевой интерфейс.
Процесс подключения:
- Клиент регистрируется на Root Server и сообщает свой публичный IP
- При обращении к другому узлу Root Server выполняет NAT traversal (hole punching)
- Между узлами устанавливается прямое P2P-соединение (UDP)
- Если прямое соединение невозможно (симметричный NAT) — трафик идёт через relay
ZeroTier vs WireGuard
| Критерий | ZeroTier | WireGuard |
|---|---|---|
| Топология | Mesh (P2P, каждый с каждым) | Point-to-Point или Hub-and-Spoke |
| NAT traversal | Автоматический | Требует публичный IP на одной стороне |
| Настройка | Минимальная (ID сети) | Обмен ключами, маршруты, firewall |
| Управление | Веб-панель (my.zerotier.com) | CLI или конфигурационные файлы |
| Шифрование | ChaCha20-Poly1305 (Salsa20) | ChaCha20-Poly1305 |
| Производительность | ~300-500 Mbps на MikroTik | ~500-900 Mbps на MikroTik |
| Уровень OSI | L2 (Ethernet) | L3 (IP) |
| Зависимость от облака | Да (ZeroTier Central) | Нет |
Вывод: ZeroTier проще в настройке и лучше работает за NAT. WireGuard быстрее и не зависит от внешних сервисов. Для связки 2-5 офисов через NAT ZeroTier часто удобнее. Для высоконагруженных site-to-site — WireGuard.
ZeroTier vs Tailscale
| Критерий | ZeroTier | Tailscale |
|---|---|---|
| Поддержка MikroTik | Встроенная (RouterOS 7.1+) | Нет (только Linux/Windows/Mac) |
| Протокол | Собственный | WireGuard |
| Уровень OSI | L2 (можно bridge) | L3 |
| Self-hosted контроллер | Да (ZeroTier Controller) | Headscale (сторонний) |
| Бесплатный тариф | 25 устройств | 100 устройств |
Для MikroTik выбор очевиден — ZeroTier имеет нативную поддержку, Tailscale — нет.
Ограничения ZeroTier на MikroTik
- Только один ZeroTier-интерфейс (одна сеть) на RouterOS
- Производительность ниже, чем у WireGuard (дополнительный overhead протокола)
- Зависимость от облака ZeroTier Central для авторизации
- Bridge mode потребляет больше ресурсов (L2 broadcast трафик через интернет)
- На некоторых младших моделях (hAP lite) CPU может быть узким местом
Настройка
Предварительные требования
- RouterOS 7.20+ (ZeroTier доступен с 7.1, но в ранних версиях были баги)
- Аккаунт на my.zerotier.com
- Созданная ZeroTier-сеть (Network ID — 16-символьный hex-идентификатор)
- Доступ в интернет с MikroTik
Шаг 1: Создание сети в ZeroTier Central
- Зайдите на my.zerotier.com и войдите в аккаунт
- Нажмите "Create A Network"
- Запишите Network ID (например,
a09acf0233e4b070) - В настройках сети:
- Выберите подсеть (например, 10.147.17.0/24)
- Включите "Auto-Assign" для автоматической раздачи IP
- Оставьте "Access Control" в режиме "Private" (устройства требуют авторизации)
Шаг 2: Включение ZeroTier на MikroTik
По умолчанию ZeroTier отключён. Сначала включите его:
[admin@MikroTik] >/zerotier enable
После включения ZeroTier сгенерирует уникальный 10-символьный Node ID для вашего MikroTik.
Шаг 3: Подключение к сети
[admin@MikroTik] >/zerotier/interface add network=a09acf0233e4b070 allow-default=no allow-global=no allow-managed=yes
Параметры:
network— Network ID из ZeroTier Centralallow-default=no— не принимать default route через ZeroTier (важно! иначе весь трафик пойдёт через ZeroTier)allow-global=no— не принимать маршруты в глобальные подсетиallow-managed=yes— принимать управляемые маршруты (подсети ZeroTier-сети)
Шаг 4: Авторизация устройства
После выполнения команды MikroTik отправит запрос на подключение. В ZeroTier Central:
- Перейдите в вашу сеть
- В разделе "Members" появится новое устройство с Node ID вашего MikroTik
- Поставьте галочку "Auth" для авторизации
- (Опционально) Задайте описание и фиксированный IP
После авторизации MikroTik получит IP-адрес из ZeroTier-сети и создаст интерфейс zerotier1.
Шаг 5: Проверка подключения
[admin@MikroTik] >/zerotier/interface print detail
Ожидаемый вывод:
code0 name="zerotier1" mac-address=... network=a09acf0233e4b070 network-name="My Network" status=OK type=PRIVATE zt-address=a1b2c3d4e5
Статус OK означает успешное подключение. Проверьте назначенный IP:
[admin@MikroTik] >/ip/address print where interface=zerotier1
Шаг 6: Маршрутизация LAN через ZeroTier
Чтобы удалённые устройства ZeroTier-сети видели вашу локальную сеть, нужно:
- Добавить маршрут в ZeroTier Central (Managed Routes)
- Включить маршрутизацию на MikroTik
В ZeroTier Central, в настройках сети, раздел "Managed Routes", добавьте:
code192.168.88.0/24 via 10.147.17.1
Где 10.147.17.1 — ZeroTier IP вашего MikroTik.
На MikroTik разрешите forward между ZeroTier и LAN:
[admin@MikroTik] >/ip/firewall/filter add chain=forward in-interface=zerotier1 \ out-interface=bridge1 action=accept \ comment="Allow ZeroTier to LAN" /ip/firewall/filter add chain=forward in-interface=bridge1 \ out-interface=zerotier1 action=accept \ comment="Allow LAN to ZeroTier"
Важно: разместите эти правила перед drop-правилами в цепочке forward.
Bridge Mode: прозрачный L2
ZeroTier может работать на уровне L2, объединяя удалённые сети в один broadcast-домен. Это полезно для:
- DHCP от одного сервера на обе площадки
- Протоколы, работающие только в L2 (NetBIOS, некоторые legacy-приложения)
- Миграция виртуальных машин между площадками
Настройка bridge mode на MikroTik:
[admin@MikroTik] ># Добавляем zerotier1 в существующий bridge /interface/bridge/port add bridge=bridge1 interface=zerotier1 # Убираем IP с zerotier1 (IP будет на bridge) /ip/address remove [find interface=zerotier1]
Внимание: bridge mode создаёт единый broadcast-домен через интернет. Весь broadcast-трафик (ARP, DHCP, mDNS) будет проходить через ZeroTier-туннель. Это серьёзно нагружает канал и CPU. Используйте bridge mode только если действительно нужна L2-связность.
Firewall для ZeroTier
Базовые правила firewall для безопасной работы ZeroTier:
[admin@MikroTik] ># Разрешить трафик ZeroTier (UDP 9993) /ip/firewall/filter add chain=input protocol=udp dst-port=9993 \ action=accept comment="Allow ZeroTier" place-before=0 # Разрешить input на zerotier1 интерфейс (для управления) /ip/firewall/filter add chain=input in-interface=zerotier1 \ action=accept comment="Allow ZeroTier management" place-before=1 # Ограничить доступ из ZeroTier — разрешить только определённые подсети /ip/firewall/filter add chain=forward in-interface=zerotier1 \ dst-address=192.168.88.0/24 action=accept \ comment="ZeroTier to LAN" place-before=0 /ip/firewall/filter add chain=forward in-interface=zerotier1 \ action=drop comment="Drop other ZeroTier traffic"
Проверка
Статус ZeroTier-интерфейса
[admin@MikroTik] >/zerotier/interface print detail
Ключевые поля:
status=OK— успешное подключениеstatus=REQUESTING_CONFIGURATION— ожидание авторизации в ZeroTier Centralstatus=NOT_FOUND— неверный Network IDstatus=ACCESS_DENIED— устройство не авторизовано
Проверка связности
Пинг другого ZeroTier-узла:
[admin@MikroTik] >/ping 10.147.17.2 count=5
Проверка маршрутов:
[admin@MikroTik] >/ip/route print where routing-table=main dst-address~"10.147.17"
Мониторинг трафика
[admin@MikroTik] >/interface/monitor-traffic zerotier1 once
Просмотр ZeroTier Node ID
[admin@MikroTik] >/zerotier print
Node ID нужен для идентификации устройства в ZeroTier Central.
Продвинутые сценарии
Объединение двух офисов
Схема:
codeОфис A: LAN 192.168.10.0/24 ← MikroTik A (ZT: 10.147.17.1) ── ZeroTier ── MikroTik B (ZT: 10.147.17.2) → LAN 192.168.20.0/24 :Офис B
На MikroTik A:
[admin@MikroTik] >/zerotier enable /zerotier/interface add network=a09acf0233e4b070 allow-default=no allow-global=no allow-managed=yes # После авторизации: /ip/route add dst-address=192.168.20.0/24 gateway=10.147.17.2 /ip/firewall/filter add chain=forward in-interface=zerotier1 action=accept place-before=0 /ip/firewall/filter add chain=forward out-interface=zerotier1 action=accept place-before=0
На MikroTik B — аналогично, но маршрут в 192.168.10.0/24 через 10.147.17.1.
В ZeroTier Central, Managed Routes:
code192.168.10.0/24 via 10.147.17.1 192.168.20.0/24 via 10.147.17.2
Self-hosted контроллер
Для независимости от облака ZeroTier можно развернуть собственный контроллер:
- Установите
zerotier-oneна Linux-сервер - Включите встроенный контроллер
- Управляйте через API вместо my.zerotier.com
Это полезно для организаций, которые не могут использовать внешние облачные сервисы.
Типичные ошибки
1. Статус REQUESTING_CONFIGURATION — устройство не авторизовано
Причина: устройство отправило запрос, но администратор не авторизовал его в ZeroTier Central.
Решение: зайдите в ZeroTier Central → ваша сеть → Members → поставьте галочку "Auth" напротив Node ID вашего MikroTik.
[admin@MikroTik] ># Проверьте Node ID /zerotier print # Сравните с тем, что видите в ZeroTier Central
2. Нет связности после авторизации
Причина: firewall блокирует трафик на интерфейсе zerotier1 или UDP 9993.
Решение:
[admin@MikroTik] ># Проверьте, что UDP 9993 не блокируется /ip/firewall/filter print where chain=input action=drop # Добавьте разрешающее правило перед drop /ip/firewall/filter add chain=input protocol=udp dst-port=9993 \ action=accept comment="Allow ZeroTier" place-before=0
3. Низкая скорость через ZeroTier
Причины:
- Трафик идёт через relay (нет прямого P2P-соединения из-за симметричного NAT)
- Слабый CPU на MikroTik (ZeroTier нагружает процессор)
- MTU не оптимизирован
Решение:
[admin@MikroTik] ># Проверьте тип соединения в ZeroTier Central (Members → Peers) # Если "RELAY" — попробуйте открыть UDP 9993 на NAT перед MikroTik # Уменьшите MTU для снижения фрагментации /ip/address set [find interface=zerotier1] \ comment="ZeroTier address"
На стороне NAT (если MikroTik за другим NAT):
[admin@MikroTik] ># На внешнем роутере: проброс UDP 9993 /ip/firewall/nat add chain=dstnat protocol=udp dst-port=9993 \ action=dst-nat to-addresses=<IP_MikroTik> to-ports=9993
4. ZeroTier не запускается — ошибка "ZeroTier is not enabled"
Причина: ZeroTier не включён на уровне системы.
Решение:
[admin@MikroTik] >/zerotier enable
На некоторых моделях требуется перезагрузка после первого включения ZeroTier.
5. allow-default=yes перехватил весь трафик
Причина: при allow-default=yes ZeroTier может установить default route через себя, и весь интернет-трафик пойдёт через ZeroTier-сеть.
Решение:
[admin@MikroTik] ># Всегда используйте allow-default=no /zerotier/interface set 0 allow-default=no allow-global=no
Если доступ к роутеру потерян — подключитесь через serial console или MAC Winbox и отключите ZeroTier:
[admin@MikroTik] >/zerotier disable
6. Конфликт адресов ZeroTier и локальной сети
Причина: подсеть ZeroTier совпадает с локальной подсетью (например, обе 10.0.0.0/24).
Решение: в ZeroTier Central измените подсеть сети на уникальную (например, 10.147.17.0/24). Или измените локальную подсеть на MikroTik.
Итоги
ZeroTier на MikroTik — отличное решение для быстрого объединения удалённых площадок без выделенного VPN-сервера и публичных IP. Настройка занимает минуты: включить ZeroTier, указать Network ID, авторизовать в веб-панели. NAT traversal работает автоматически, что критично для площадок за провайдерским NAT.
Однако ZeroTier зависит от облачного контроллера, уступает WireGuard в производительности и поддерживает только одну сеть на MikroTik. Для критичных высоконагруженных site-to-site соединений WireGuard остаётся лучшим выбором. ZeroTier идеален для быстрого развёртывания, подключения удалённых сотрудников и сценариев, где оба конца находятся за NAT.
/zerotier enable
/zerotier/interface add network=a09acf0233e4b070 allow-default=no allow-global=no allow-managed=yes
/zerotier/interface print detail
0 name="zerotier1" mac-address=... network=a09acf0233e4b070
network-name="My Network" status=OK type=PRIVATE
zt-address=a1b2c3d4e5
/ip/address print where interface=zerotier1
192.168.88.0/24 via 10.147.17.1
/ip/firewall/filter add chain=forward in-interface=zerotier1 \
out-interface=bridge1 action=accept \
comment="Allow ZeroTier to LAN"
/ip/firewall/filter add chain=forward in-interface=bridge1 \
out-interface=zerotier1 action=accept \
comment="Allow LAN to ZeroTier"
# Добавляем zerotier1 в существующий bridge
/interface/bridge/port add bridge=bridge1 interface=zerotier1
# Убираем IP с zerotier1 (IP будет на bridge)
/ip/address remove [find interface=zerotier1]
# Разрешить трафик ZeroTier (UDP 9993)
/ip/firewall/filter add chain=input protocol=udp dst-port=9993 \
action=accept comment="Allow ZeroTier" place-before=0
# Разрешить input на zerotier1 интерфейс (для управления)
/ip/firewall/filter add chain=input in-interface=zerotier1 \
action=accept comment="Allow ZeroTier management" place-before=1
# Ограничить доступ из ZeroTier — разрешить только определённые подсети
/ip/firewall/filter add chain=forward in-interface=zerotier1 \
dst-address=192.168.88.0/24 action=accept \
comment="ZeroTier to LAN" place-before=0
/ip/firewall/filter add chain=forward in-interface=zerotier1 \
action=drop comment="Drop other ZeroTier traffic"
/zerotier/interface print detail
/ping 10.147.17.2 count=5
/ip/route print where routing-table=main dst-address~"10.147.17"
/interface/monitor-traffic zerotier1 once
/zerotier print
Офис A: LAN 192.168.10.0/24 ← MikroTik A (ZT: 10.147.17.1) ── ZeroTier ── MikroTik B (ZT: 10.147.17.2) → LAN 192.168.20.0/24 :Офис B
/zerotier enable
/zerotier/interface add network=a09acf0233e4b070 allow-default=no allow-global=no allow-managed=yes
# После авторизации:
/ip/route add dst-address=192.168.20.0/24 gateway=10.147.17.2
/ip/firewall/filter add chain=forward in-interface=zerotier1 action=accept place-before=0
/ip/firewall/filter add chain=forward out-interface=zerotier1 action=accept place-before=0
192.168.10.0/24 via 10.147.17.1
192.168.20.0/24 via 10.147.17.2
# Проверьте Node ID
/zerotier print
# Сравните с тем, что видите в ZeroTier Central
# Проверьте, что UDP 9993 не блокируется
/ip/firewall/filter print where chain=input action=drop
# Добавьте разрешающее правило перед drop
/ip/firewall/filter add chain=input protocol=udp dst-port=9993 \
action=accept comment="Allow ZeroTier" place-before=0
# Проверьте тип соединения в ZeroTier Central (Members → Peers)
# Если "RELAY" — попробуйте открыть UDP 9993 на NAT перед MikroTik
# Уменьшите MTU для снижения фрагментации
/ip/address set [find interface=zerotier1] \
comment="ZeroTier address"
# На внешнем роутере: проброс UDP 9993
/ip/firewall/nat add chain=dstnat protocol=udp dst-port=9993 \
action=dst-nat to-addresses=<IP_MikroTik> to-ports=9993
/zerotier enable
# Всегда используйте allow-default=no
/zerotier/interface set 0 allow-default=no allow-global=no
/zerotier disable