VPSРейтинг
Сеть5 февраля 2026 · обновлено 7 мая · 12 мин чтения

Headscale на VPS: self-hosted Tailscale для своих серверов

Tailscale соединяет несколько серверов в приватную сеть без открытых портов и сложных конфигов WireGuard. Headscale — это self-hosted контрол-сервер, который работает с официальными клиентами Tailscale. Полный контроль над сетью, без лимитов и без отправки данных третьим сторонам.

⚠️ Если вы из России — два важных нюанса

1. Tailscale.com geo-blocked для РФ с октября 2024. Это значит:

  • Команда curl -fsSL https://tailscale.com/install.sh | sh с РФ-IP не сработает — ставьте клиент с VPS вне РФ или через apt: пакеты есть в Debian/Ubuntu стандартных репозиториях, либо скачайте .deb с GitHub-mirror
  • Публичные DERP-серверы Tailscale (controlplane.tailscale.com/derpmap/default) тоже geo-blocked — нужно поднять свой DERP на VPS вне РФ (см. раздел 10 ниже)

2. WireGuard блокируется ТСПУ с февраля 2026. Headscale построена на WireGuard, поэтому прямые соединения между узлами РФ↔зарубежный VPS могут срываться. Спасает свой DERP-relay на 443/TCP (трафик идёт через HTTPS-обёртку и не детектится по сигнатуре WireGuard).

Когда гайд работает идеально: все ваши серверы за пределами РФ (объединение нескольких VPS в Европе/Азии в mesh-сеть) — ничего из вышеперечисленного не мешает.

1. Как работает Tailscale и зачем Headscale

Tailscale создаёт mesh-сеть на основе WireGuard: каждое устройство получает постоянный IP из диапазона 100.64.0.0/10 и видит остальные устройства сети напрямую. Не нужно открывать порты, настраивать маршруты или управлять WireGuard-ключами вручную.

Как это работает

🔑Контрол-сервер (Tailscale или Headscale) управляет ключами и реестром узлов.
🤝Два устройства запрашивают координаты друг друга у контрол-сервера и пытаются установить прямое WireGuard-соединение (hole punching).
Если прямое соединение удалось — трафик идёт напрямую, контрол-сервер больше не задействован.
🔁Если нет (жёсткий NAT, провайдерский файрвол) — трафик проходит через DERP relay-сервер.

Tailscale работает отлично, но контрол-сервер — в облаке Tailscale. Это означает зависимость от стороннего сервиса и ограничения бесплатного тарифа (3 пользователя, 100 устройств). Headscale — open source реализация того же контрол-сервера, которую вы запускаете на своём VPS. Клиенты остаются официальными — только указывают на ваш сервер вместо Tailscale.

ПараметрTailscale CloudHeadscale self-hosted
СтоимостьБесплатно до 3 юзеров / $6/мес за пользователяТолько стоимость VPS (~300 ₽/мес)
Узлов100 (бесплатно)Без лимита
Пользователей3 (бесплатно)Без лимита
ДанныеМетаданные у TailscaleТолько на вашем сервере
КлиентыОфициальные TailscaleОфициальные Tailscale
Magic DNS
ACL
НадёжностьManaged SLAЗависит от вашего VPS

Версия Headscale в этом гайде — v0.28.0

Это актуальная стабильная версия (5 февраля 2026). В ней переработана система аутентификации и pre-auth ключи теперь хранятся в bcrypt-хеше — показываются только один раз при создании.

2. Требования к серверу

Headscale потребляет очень мало ресурсов — контрол-плейн занимается только координацией ключей, не пропуская через себя пользовательский трафик.

ПараметрМинимумРекомендуется
CPU1 vCPU1 vCPU (достаточно для 100+ узлов)
RAM256 МБ512 МБ (с запасом для Nginx)
Диск5 ГБ10 ГБ
ОСUbuntu 22.04, Debian 12Ubuntu 22.04 LTS
Публичный IPОбязателенСтатический IP
ДоменОбязателенПоддомен: vpn.ваш-домен.ru

Можно поставить на уже работающий VPS

Headscale отлично уживается с Nginx, Docker и другими сервисами. Контрол-сервер потребляет 20–50 МБ RAM в покое. Специальный VPS для Headscale не нужен — достаточно добавить его к существующему серверу.

3. Установка Headscale

Рекомендуемый способ — deb-пакет. Он автоматически создаёт системного пользователя, устанавливает конфиг по умолчанию и регистрирует systemd-сервис.

Скачать последний deb-пакет с GitHub
wget https://github.com/juanfont/headscale/releases/download/v0.28.0/headscale_0.28.0_linux_amd64.deb
Установить пакет
sudo apt install ./headscale_0.28.0_linux_amd64.deb

После установки сервис ещё не запущен — сначала нужно отредактировать конфиг. Проверьте, что всё установилось корректно:

Проверить версию
headscale version
# headscale v0.28.0

Файлы после установки

  • /etc/headscale/config.yaml — конфигурация
  • /var/lib/headscale/ — база данных и ключи
  • /var/run/headscale/ — unix-сокет

4. Настройка конфига

Откройте конфиг и измените ключевые параметры под ваш домен:

Открыть конфиг
sudo nano /etc/headscale/config.yaml

Найдите и измените следующие параметры (конфиг большой — используйте Ctrl+W для поиска):

/etc/headscale/config.yaml — ключевые параметры
# URL, по которому клиенты будут подключаться к вашему серверу
server_url: https://vpn.ваш-домен.ru

# Адрес для прослушивания (Nginx будет проксировать на этот порт)
listen_addr: 127.0.0.1:8080

# Метрики (опционально — для Prometheus)
metrics_listen_addr: 127.0.0.1:9090

# IP-диапазоны для узлов mesh-сети
prefixes:
  v4: 100.64.0.0/10
  v6: fd7a:115c:a1e0::/48
  allocation: sequential

# База данных (SQLite — подходит для домашнего и небольшого проф. использования)
database:
  type: sqlite
  sqlite:
    path: /var/lib/headscale/db.sqlite
    write_ahead_log: true

# DERP — публичные relay-серверы Tailscale (использовать бесплатно)
derp:
  urls:
    - https://controlplane.tailscale.com/derpmap/default
  auto_update_enabled: true
  update_frequency: 24h

# Magic DNS
dns:
  magic_dns: true
  base_domain: vpn.ваш-домен.ru

Важно: base_domain ≠ server_url домен

server_url — домен контрол-сервера (vpn.ваш-домен.ru).base_domain — суффикс для Magic DNS имён устройств (server1.vpn.ваш-домен.ru). Они могут совпадать — это нормально.

5. Nginx + SSL

Headscale использует HTTP/2 и WebSocket — конфиг Nginx немного отличается от стандартного reverse proxy.

Шаг 1: добавить DNS-запись

A-запись у вашего регистратора
vpn.ваш-домен.ru  →  A  →  IP_СЕРВЕРА

Шаг 2: установить и настроить Nginx

Установить Nginx (если ещё не установлен)
sudo apt install -y nginx
/etc/nginx/sites-available/headscale
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name vpn.ваш-домен.ru;

    location / {
        proxy_pass         http://127.0.0.1:8080;
        proxy_http_version 1.1;

        # WebSocket и HTTP/2 upgrade
        proxy_set_header   Upgrade    $http_upgrade;
        proxy_set_header   Connection $connection_upgrade;

        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;

        # Важно: отключить буферизацию для стриминга событий
        proxy_buffering    off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

Шаг 3: SSL-сертификат и запуск

Certbot автоматически добавит HTTPS-блок в конфиг и настроит редирект с HTTP.

Если на сервере включён UFW

Certbot использует HTTP-01 challenge — порт 80 должен быть доступен извне. Откройте порты до запуска certbot:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Активировать сайт, получить SSL, запустить Headscale
# Активировать конфиг
sudo ln -s /etc/nginx/sites-available/headscale /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Получить SSL-сертификат (certbot сам добавит HTTPS-блок в конфиг)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d vpn.ваш-домен.ru

# Запустить Headscale
sudo systemctl enable --now headscale

# Проверить статус
sudo systemctl status headscale

После успешного запуска проверьте, что сервер отвечает:

Проверить доступность API
curl https://vpn.ваш-домен.ru/health
# {"status":"pass"}

6. Подключение первого узла (Linux)

Сначала создадим пользователя в Headscale и сгенерируем ключ аутентификации. Затем установим Tailscale-клиент на первый сервер.

На сервере с Headscale: создать пользователя

Создать пользователя (группу устройств)
sudo headscale users create mynet
Сгенерировать pre-auth ключ (показывается только один раз!)
sudo headscale preauthkeys create --user mynet --reusable --expiration 24h

Сохраните ключ — он выглядит как hskey-auth-xxxxxxxxxxxx-xxxxxxxx. После создания он больше не будет показан. Флаг --reusable позволяет использовать один ключ для нескольких узлов.

В v0.28 флаг --user стал необязательным — его можно опустить, ключ создастся без привязки к пользователю. Команда preauthkeys list теперь также показывает все ключи глобально, без фильтрации по --user.

На подключаемом сервере: установить Tailscale

Установить Tailscale-клиент (на сервере, который хотите добавить в сеть)
curl -fsSL https://tailscale.com/install.sh | sh
Подключиться к вашему Headscale-серверу с pre-auth ключом
sudo tailscale up   --login-server https://vpn.ваш-домен.ru   --authkey hskey-auth-xxxxxxxxxxxx-xxxxxxxx

Проверить регистрацию узла

На сервере с Headscale
sudo headscale nodes list

# ID | Hostname | Name    | User  | IP addresses              | Ephemeral | Last seen      | Online | Expired
# 1  | server1  | server1 | mynet | 100.64.0.1, fd7a::1/128   | false     | 2026-02-05 ... | yes    | no

Узел подключён! Он получил адрес из диапазона 100.64.x.x. Проверить связь между узлами можно командой tailscale ping 100.64.0.X.

7. Подключение Windows, macOS, Android, iOS

На устройствах без командной строки есть два способа входа — через ключ (как выше) или через браузер с последующим подтверждением на Headscale.

Windows
  1. 1Установите официальный Tailscale-клиент с tailscale.com/download.
  2. 2Откройте Command Prompt или PowerShell от имени администратора.
  3. 3Выполните: tailscale login --login-server https://vpn.ваш-домен.ru
  4. 4Откроется браузер — скопируйте показанную команду и выполните её на сервере Headscale.
macOS
  1. 1Установите официальный Tailscale-клиент с tailscale.com/download.
  2. 2Зажмите Option и нажмите на иконку Tailscale в строке меню → Debug → Custom Login Server → Add Account.
  3. 3Введите: https://vpn.ваш-домен.ru и нажмите «Log in».
  4. 4Откроется браузер — скопируйте показанную команду и выполните её на сервере Headscale.
Android
  1. 1Установите Tailscale из Google Play Store.
  2. 2Откройте Settings → Accounts → три точки → «Use an alternate server».
  3. 3Введите: https://vpn.ваш-домен.ru
  4. 4Завершите авторизацию, выполнив команду на сервере Headscale.
iOS
  1. 1Установите Tailscale из App Store.
  2. 2Нажмите иконку профиля → Log in → кнопку меню → «Use custom coordination server».
  3. 3Введите: https://vpn.ваш-домен.ru
  4. 4Завершите авторизацию, выполнив команду на сервере Headscale.

Подтвердить узел через Headscale CLI

При входе через браузер (без pre-auth ключа) Tailscale показывает команду вида:

Выполнить на сервере с Headscale для подтверждения узла
sudo headscale nodes register --user mynet --key nodekey:xxxxxxxxxx

8. Magic DNS: обращение по имени хоста

С включённым Magic DNS все узлы сети доступны по коротким именам — не нужно помнить IP-адреса. Headscale автоматически настраивает DNS-суффикс на всех подключённых устройствах.

Как именуются узлы

Hostname100.x IPMagic DNS имя
server1100.64.0.1server1.vpn.ваш-домен.ru
server2100.64.0.2server2.vpn.ваш-домен.ru
laptop100.64.0.3laptop.vpn.ваш-домен.ru
Примеры обращения между узлами по имени
# Пинг соседнего сервера по короткому имени
ping server2

# SSH на другой VPS без пароля (если настроены ключи)
ssh user@server2

# Curl к приложению на другом сервере
curl http://server2:8080/api/health

Tailscale полностью заменяет /etc/hosts

Больше не нужно прописывать IP-адреса серверов в /etc/hosts. При добавлении нового узла в сеть он сразу становится доступен по имени на всех остальных узлах — Magic DNS обновляется автоматически.

9. Несколько VPS в приватной сети

Основной сценарий для Headscale — объединить несколько серверов в приватную сеть без открытых портов. Вот типичная топология:

# Пример инфраструктуры

┌─────────────────────────────────────────────────┐

│ Headscale VPS │

│ vpn.ваш-домен.ru (публичный) │

│ только control plane — не узел сети │

└───────────────┬─────────────────────────────────┘

│ управление ключами (HTTPS/443)

┌────────┴────────┐

▼ ▼

┌────────────┐ ┌────────────┐

│ App VPS │◄──►│ DB VPS │

│ 100.64.0.2 │ │ 100.64.0.3 │

│ Нет откр. │ │ Нет откр. │

│ портов DB │ │ портов │

└────────────┘ └────────────┘

# Прямое WireGuard-соединение между App и DB VPS

# Трафик не идёт через Headscale VPS

Подключаем каждый VPS к Headscale с одним pre-auth ключом:

На каждом VPS — установка и подключение к сети
# Установить Tailscale
curl -fsSL https://tailscale.com/install.sh | sh

# Подключиться к вашей Headscale
sudo tailscale up   --login-server https://vpn.ваш-домен.ru   --authkey hskey-auth-xxxxxxxxxxxx-xxxxxxxx

Теперь серверы видят друг друга по адресам 100.64.x.x. PostgreSQL на DB VPS больше не нужно выставлять наружу — подключайтесь изнутри сети:

Подключение к PostgreSQL через приватную сеть Tailscale
# На App VPS — подключение к базе данных на DB VPS
psql -h db-vps -U myuser -d mydb
# db-vps разрешается через Magic DNS в 100.64.0.3

🔒 Нет открытых портов

PostgreSQL, Redis, внутренние API — закрыты снаружи. Доступны только внутри сети Headscale.

Минимальная задержка

Трафик идёт напрямую между серверами по WireGuard, не через Headscale VPS.

🔑 Автоматическая ротация ключей

WireGuard-ключи ротируются автоматически — не нужно следить вручную.

Полезные команды управления

Команды Headscale CLI
# Список всех узлов
sudo headscale nodes list

# Список пользователей
sudo headscale users list

# Создать ещё один reusable ключ (для новых серверов)
sudo headscale preauthkeys create --user mynet --reusable --expiration 7d

# Список ключей (в v0.28 показывает все ключи глобально)
sudo headscale preauthkeys list

# Удалить узел из сети
sudo headscale nodes delete --id 3

# Статус на клиентском сервере
tailscale status

10. Свой DERP-сервер (опционально)

DERP-relay используется когда два узла не могут установить прямое WireGuard-соединение (жёсткий NAT, файрвол, блокировка протокола). DERP оборачивает трафик в HTTPS на 443/TCP — это часто проходит там, где WireGuard детектится и блокируется (например, ТСПУ в РФ).

Когда нужен свой DERP

  • Вы из РФ — публичные DERP Tailscale geo-blocked
  • Между узлами в разных юрисдикциях — прямой WireGuard детектится DPI
  • Нужна максимальная приватность — никакой Tailscale-инфраструктуры в цепочке

Шаг 1: установить derper

derper — официальная программа DERP-relay от Tailscale, написанная на Go. Установить можно через go install или скачать готовый бинарник. Нужен сервер с отдельным доменом (например, derp.ваш-домен.ru) — DERP требует валидный SSL.

Установка derper через Go (нужен Go 1.22+)
# Установить Go (если нет)
sudo apt install -y golang-go

# Скомпилировать derper
go install tailscale.com/cmd/derper@latest

# Бинарник окажется в ~/go/bin/derper — переместите в /usr/local/bin
sudo install -m 755 ~/go/bin/derper /usr/local/bin/derper
derper --version

Шаг 2: A-запись и systemd-сервис

Создайте A-запись derp.ваш-домен.ru→ IP сервера. derper сам получит SSL через Let's Encrypt при первом запуске (нужен открытый 80/tcp).

/etc/systemd/system/derper.service
sudo tee /etc/systemd/system/derper.service << 'EOF'
[Unit]
Description=Tailscale DERP relay
After=network.target

[Service]
ExecStart=/usr/local/bin/derper -hostname derp.ваш-домен.ru -certmode letsencrypt -certdir /var/lib/derper
Restart=on-failure
RestartSec=5
DynamicUser=yes
StateDirectory=derper

[Install]
WantedBy=multi-user.target
EOF

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo systemctl daemon-reload
sudo systemctl enable --now derper

Шаг 3: подключить DERP к Headscale

Создайте /etc/headscale/derp.yaml с описанием вашего DERP:

/etc/headscale/derp.yaml
regions:
  900:
    regionid: 900
    regioncode: my-derp
    regionname: My Private DERP
    nodes:
      - name: 900a
        regionid: 900
        hostname: derp.ваш-домен.ru
        ipv4: IP_DERP_СЕРВЕРА
        derpport: 443

В /etc/headscale/config.yaml найдите блок derp: и добавьте свой файл:

/etc/headscale/config.yaml — добавить путь к своему DERP
derp:
  urls:
    - https://controlplane.tailscale.com/derpmap/default
  paths:
    - /etc/headscale/derp.yaml
  auto_update_enabled: true
  update_frequency: 24h

Перезапустите Headscale — новый DERP появится в списке доступных узлам: sudo systemctl restart headscale. На клиенте проверить можно командой tailscale netcheck — ваш DERP появится в списке regions.

11. Headplane: веб-интерфейс для Headscale

Headscale из коробки управляется только через CLI. Если хочется веб-панель как у Tailscale.com — поставьте Headplane (github.com/tale/headplane), самый функциональный сторонний UI. Актуальная версия на май 2026 — 0.6.1.

Что умеет Headplane

  • Управление узлами (переименовать, продлить срок, удалить, теги)
  • Создание и отзыв pre-auth ключей
  • Редактор ACL (правила доступа между узлами)
  • OIDC SSO — вход через свой провайдер (Authentik, Keycloak)
  • Web-SSH доступ к узлам прямо из браузера
  • Просмотр Magic DNS-настроек

Установка через Docker

Самый простой способ — Docker контейнер рядом с Headscale. Headscale должен быть установлен и работать (см. разделы 3–5). Headplane берёт API-доступ к Headscale через локальный сокет.

docker-compose.yml — Headplane
version: "3"
services:
  headplane:
    image: ghcr.io/tale/headplane:0.6.1
    container_name: headplane
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - /etc/headscale/config.yaml:/etc/headscale/config.yaml:ro
      - /var/run/headscale/headscale.sock:/var/run/headscale/headscale.sock
      - ./headplane-data:/var/lib/headplane
    environment:
      - HEADPLANE_SERVER_HOST=0.0.0.0
      - HEADPLANE_SERVER_PORT=3000
      - HEADPLANE_HEADSCALE_URL=https://vpn.ваш-домен.ru
      - HEADPLANE_COOKIE_SECRET=сгенерируйте_случайную_строку_32_символа

Запустите и пробросьте через Nginx (по аналогии с разделом 5) на свой поддомен, например admin.ваш-домен.ru:

Запуск и проверка
docker compose up -d
docker logs headplane

# Открыть в браузере (через Nginx с SSL)
# https://admin.ваш-домен.ru

Важно: ограничьте доступ к веб-интерфейсу

Headplane даёт полный контроль над сетью. Защитите доступ: либо открывайте только из приватной Tailscale-сети (через Magic DNS — admin.vpn.ваш-домен.ru на 100.64.0.1), либо настройте OIDC SSO в самом Headplane.

12. Частые вопросы

Нужен VPS для Headscale? Смотрите лучшие варианты

Рейтинг VPS →

Смотрите также