// Engineering Log
Mesh VPN: Часть 4 — Headscale или WireGuard: свой сервер вместо Tailscale
Опубликовано 22.09.2026
// Быстрый маршрут
Эта статья относится к теме Сети и маршрутизация.
Tailscale, облачный NetBird и ZeroTier удобны, но управление сетью в них остаётся у сторонней компании: она проверяет пользователей, раздаёт ключи и правила доступа. Если это неприемлемо — по требованиям безопасности, из-за хранения данных в России или просто из принципа, — есть два пути: собственный сервер управления Headscale или WireGuard, настроенный вручную.
Headscale: свой сервер для клиентов Tailscale
Headscale — открытая реализация сервера координации Tailscale для размещения на своём сервере. Устройства используют обычные официальные клиенты Tailscale, но подключаются не к облаку компании, а к вашему серверу.
Важные оговорки из описания проекта:
- Headscale не связан с Tailscale Inc. Это независимый открытый проект. Один из его сопровождающих работает в Tailscale и может участвовать в проекте в рабочее время, но его изменения проверяют остальные сопровождающие.
- Узкая задача: Headscale обслуживает одну сеть (tailnet) и рассчитан на личное использование или небольшую организацию, а не на крупную компанию с сотнями команд.
На сентябрь 2026 года последняя стабильная версия — v0.29.3, минимальная поддерживаемая версия клиента Tailscale — v1.80.0 (по примечаниям к выпуску). При обновлении Headscale стоит проверять это требование: старые клиенты на роутерах и NAS могут перестать подключаться.
Что поддерживается
По документации Headscale, реализована большая часть возможностей Tailscale:
- MagicDNS и раздельный DNS;
- политики доступа (ACL и grants), Tailscale SSH;
- маршрутизаторы подсетей и выходные узлы, автоматическое одобрение маршрутов;
- встроенный сервер DERP для ретрансляции;
- регистрация через веб, ключи предварительной авторизации и вход через OpenID Connect (например, через Keycloak);
- Taildrop, временные (ephemeral) узлы, теги.
Пока не реализованы, в частности, группы OIDC в правилах доступа, функции Funnel и Serve, журналы сетевых потоков.
Как подключить устройство
# на сервере: создать пользователя
headscale users create office
# на клиенте: подключиться к своему серверу вместо облака Tailscale
tailscale up --login-server https://headscale.example.ru
# на сервере: подтвердить устройство по идентификатору из ссылки
headscale auth register --user office --auth-id <AUTH_ID>Для серверов удобнее ключи предварительной авторизации:
headscale preauthkeys create --user <USER_ID>
tailscale up --login-server https://headscale.example.ru --authkey <КЛЮЧ>Синтаксис команд менялся между версиями, поэтому сверяйтесь с документацией той версии, которую устанавливаете.
Что понадобится
- сервер с постоянным адресом и доменным именем;
- сертификат TLS — клиенты подключаются по HTTPS;
- резервное копирование базы и конфигурации Headscale: без них при потере сервера придётся заново регистрировать все устройства;
- наблюдение за доступностью и регулярные обновления.
WireGuard вручную
Второй путь — отказаться от сервера координации и настроить WireGuard самостоятельно. Каждое устройство получает пару ключей, а в его конфигурации перечислены соседи: их открытые ключи, адреса и какие сети доступны через каждого.
По официальному руководству WireGuard ключи создаются так:
wg genkey | tee privatekey | wg pubkey > publickeyМинимальная конфигурация сервера /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = <закрытый ключ сервера>
Address = 10.10.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <открытый ключ ноутбука>
AllowedIPs = 10.10.0.2/32И клиента:
[Interface]
PrivateKey = <закрытый ключ ноутбука>
Address = 10.10.0.2/24
[Peer]
PublicKey = <открытый ключ сервера>
Endpoint = vpn.example.ru:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25Интерфейс поднимается командой wg-quick up wg0. PersistentKeepalive поддерживает соединение за NAT, а AllowedIPs задаёт, какие адреса доступны через этого соседа.
Честно о ручном варианте: полноценную mesh-сеть так строить трудно. Каждое новое устройство нужно прописать у всех остальных, а прохождения через NAT нет — одна из сторон должна иметь доступный снаружи адрес. Поэтому вручную обычно собирают «звезду» с центральным сервером или соединяют несколько площадок с постоянными адресами. Для десятков устройств на разных площадках удобнее Headscale или NetBird.
MikroTik
WireGuard поддерживается в RouterOS 7 штатно, поэтому роутер MikroTik может быть и сервером, и узлом ручной сети. Настройка по документации MikroTik:
/interface/wireguard
add listen-port=13231 name=wireguard1
/ip/address
add address=10.10.0.1/24 interface=wireguard1
/interface/wireguard/peers
add allowed-address=10.10.0.2/32 interface=wireguard1 public-key="<ключ>"Не забудьте разрешить входящий UDP-порт в межсетевом экране роутера. Подробнее о возможностях роутеров — в статье «MikroTik: что это за роутер и чем он удобен малому бизнесу».
Клиента Tailscale для RouterOS нет: на странице загрузок Tailscale перечислены только Windows, macOS, Linux, iOS и Android. RouterOS начиная с версии 7.4 умеет запускать контейнеры (нужны пакет container и включение режима контейнеров), и технически в нём можно запустить Linux-клиент, но официально ни MikroTik, ни Tailscale такой вариант не поддерживают. Надёжнее подключить офисную сеть к Headscale или Tailscale через Linux-сервер или виртуальную машину за роутером в роли маршрутизатора подсети.
Что выбрать
| Ситуация | Решение |
|---|---|
| Нужна mesh-сеть на своём сервере, клиенты Tailscale устраивают | Headscale |
| Нужна веб-панель и штатный собственный сервер от разработчика | NetBird (self-hosted) |
| Соединить 2–3 площадки с постоянными адресами | WireGuard вручную, в том числе на MikroTik |
| Удалённый доступ сотрудников к одному офису | WireGuard-сервер на роутере или сервере |
Типичные ошибки
- Headscale без резервных копий. Сервер управления становится центральным элементом сети.
- Обновление Headscale без проверки версий клиентов. Старые клиенты ниже минимальной версии перестают подключаться.
- Одинаковые подсети на площадках — маршрутизация становится неоднозначной.
- Закрытые ключи в репозитории или общих папках. Закрытый ключ WireGuard должен оставаться только на своём устройстве.
- Ручной WireGuard на десятки устройств. Сопровождение превращается в постоянную правку конфигураций — в таком масштабе нужен сервер координации.
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Сети и маршрутизация
MikroTik, VPN, маршрутизация, DNS, BGP, доступ и проблемы связности.
Часто с этим приходят
- Поднять VPN и безопасный доступ в офис или облако
- Починить маршрутизацию, DNS или нестабильный канал
- Настроить MikroTik, firewall и внешние подключения
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related