// 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, журналы сетевых потоков.

Как подключить устройство

bash
# на сервере: создать пользователя
headscale users create office

# на клиенте: подключиться к своему серверу вместо облака Tailscale
tailscale up --login-server https://headscale.example.ru

# на сервере: подтвердить устройство по идентификатору из ссылки
headscale auth register --user office --auth-id <AUTH_ID>

Для серверов удобнее ключи предварительной авторизации:

bash
headscale preauthkeys create --user <USER_ID>
tailscale up --login-server https://headscale.example.ru --authkey <КЛЮЧ>

Синтаксис команд менялся между версиями, поэтому сверяйтесь с документацией той версии, которую устанавливаете.

Что понадобится

  • сервер с постоянным адресом и доменным именем;
  • сертификат TLS — клиенты подключаются по HTTPS;
  • резервное копирование базы и конфигурации Headscale: без них при потере сервера придётся заново регистрировать все устройства;
  • наблюдение за доступностью и регулярные обновления.

WireGuard вручную

Второй путь — отказаться от сервера координации и настроить WireGuard самостоятельно. Каждое устройство получает пару ключей, а в его конфигурации перечислены соседи: их открытые ключи, адреса и какие сети доступны через каждого.

По официальному руководству WireGuard ключи создаются так:

bash
wg genkey | tee privatekey | wg pubkey > publickey

Минимальная конфигурация сервера /etc/wireguard/wg0.conf:

ini
[Interface]
PrivateKey = <закрытый ключ сервера>
Address = 10.10.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <открытый ключ ноутбука>
AllowedIPs = 10.10.0.2/32

И клиента:

ini
[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)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ