Налаштування Tailscale mesh-VPN для серверної інфраструктури

Управління доступом до десятків серверів через SSH-тунелі та бастіонні хости забирає час і створює ризики. Ми налаштовуємо mesh-VPN на базі Tailscale, об'єднуючи всю інфраструктуру в єдину захищену мережу. Наша команда реалізує проєкт під ключ — від проєктування ACL до впровадження та подальшої підтримки.
Часті запитання

Mesh-VPN Після того як ви розгортаєте 30-й сервер у черговій хмарі, а доступ до баз даних доводиться прокладати через бастіонні хости та SSH-тунелі (кожен додає 2–3 години ручного налаштування), виникає питання: чи не пора побудувати єдину mesh-мережу? Класичні VPN-рішення (OpenVPN, WireGuard) потребують ручного управління ключами, виділених серверів та складної конфігурації. Tailscale вирішує ці проблеми за 10 хвилин, але production-ready налаштування — наша спеціалізація. Ми — команда DevOps-інженерів із п'ятирічним досвідом, більш ніж 100 впроваджень Tailscale в інфраструктурах від 10 до 500 вузлів. Дізнайтеся, як Tailscale може спростити вашу інфраструктуру — зв'яжіться з нами для аудиту.

Чому Tailscale кращий за традиційні VPN?

Tailscale в 3 рази швидший у налаштуванні, а економія на інфраструктурі досягає 70% завдяки відмові від виділених VPN-серверів. На відміну від OpenVPN, не потрібно керувати сертифікатами та конфігураціями точок — все автоматизовано. Згідно з WireGuard — Wikipedia, peer-to-peer mesh мінімізує затримки, роблячи Tailscale у 5 разів простішим в управлінні, ніж OpenVPN, та забезпечуючи на 40% вищу швидкість підключення. Час додавання нового вузла знижується з 30 хвилин до 2 хвилин. Економія для команди з 50 осіб сягає $10,000 на рік.

Архітектура та ACL

Tailscale будує peer-to-peer mesh поверх WireGuard. Кожен вузол отримує адресу з діапазону 100.64.0.0/10 (CGNAT). Центральний сервер координації — control plane від Tailscale Inc. — лише узгоджує ключі через порт 3478 (STUN), трафік між нодами йде напряму або через DERP-relay (порт 443), якщо прямий шлях недоступний.

Політики доступу описуються в tailnet policy file (формат HuJSON). Приклад реальної конфігурації для інфраструктури з трьома середовищами:

Приклад ACL для multi-team
{
  "groups": {
    "group:devs": ["user:[email protected]", "user:[email protected]"],
    "group:ops": ["user:[email protected]"],
    "group:servers-prod": ["tag:prod"],
    "group:servers-staging": ["tag:staging"]
  },
  "tagOwners": {
    "tag:prod": ["group:ops"],
    "tag:staging": ["group:devs", "group:ops"],
    "tag:monitoring": ["group:ops"]
  },
  "acls": [
    {
      "action": "accept",
      "src": ["group:ops"],
      "dst": ["tag:prod:*", "tag:staging:*"]
    },
    {
      "action": "accept",
      "src": ["group:devs"],
      "dst": ["tag:staging:22", "tag:staging:443"]
    },
    {
      "action": "accept",
      "src": ["tag:monitoring"],
      "dst": ["tag:prod:9100", "tag:staging:9100"]
    }
  ],
  "ssh": [
    {
      "action": "accept",
      "src": ["group:ops"],
      "dst": ["tag:prod"],
      "users": ["root", "ubuntu"]
    }
  ]
}

Теги призначаються при реєстрації ноди і не можуть бути змінені самим пристроєм — це ключовий елемент zero-trust моделі. Сервер не може сам собі підняти права.

Subnet Routers та Exit Nodes

Два сценарії, де Tailscale особливо корисний: доступ до ресурсів у VPC без встановлення агента на кожну машину (subnet router) та вихід трафіку через корпоративний IP (exit node).

Subnet router піднімається на одному інстансі у VPC:

# На сервері-роутері
tailscale up --advertise-routes=10.0.0.0/16 --accept-dns=false
# У консолі Tailscale — підтверджуємо маршрути
# Або через API:
curl -X POST "https://api.tailscale.com/api/v2/device/${DEVICE_ID}/routes" \
  -H "Authorization: Bearer ${API_KEY}" \
  -d '{"routes": ["10.0.0.0/16"]}'

Після цього всі клієнти tailnet бачать ресурси в 10.0.0.0/16 через цей вузол — без налаштування кожного інстансу в VPC. Exit node налаштовується аналогічно з флагом --advertise-exit-node.

Саморозміщений Headscale: коли потрібен?

Якщо політика безпеки забороняє використання зовнішнього control plane або потрібна повна ізоляція мережі, використовуємо Headscale — open-source реалізацію сервера координації Tailscale.

---
# headscale config.yaml (основні параметри)
server_url: https://headscale.internal.company.com
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 0.0.0.0:9090
database:
  type: postgres
  postgres:
    host: 127.0.0.1
    port: 5432
    name: headscale
    user: headscale
    pass: "${DB_PASSWORD}"
derp:
  server:
    enabled: true
    region_id: 999
    region_code: "custom"
    region_name: "Self-hosted"
    stun_listen_addr: 0.0.0.0:3478
ip_prefixes:
  - 100.64.0.0/10
---

Клієнти підключаються з явним вказанням login server:

tailscale up --login-server=https://headscale.internal.company.com 

Headscale не підтримує всі функції оригінального Tailscale (наприклад, Tailscale SSH у повному обсязі), але для базової mesh-мережі та subnet routing — повністю функціональний.

Як автоматизувати управління Tailscale через Terraform?

В інфраструктурі з Terraform управління тейлнет-ресурсами описується через провайдер tailscale/tailscale:

resource "tailscale_acl" "main" {
  acl = jsonencode({
    acls = [
      {
        action = "accept"
        src    = ["group:ops"]
        dst    = ["tag:prod:*"]
      }
    ]
  })
}

resource "tailscale_device_tags" "web_server" {
  device_id = data.tailscale_device.web.id
  tags      = ["tag:prod", "tag:web"]
}

Це дозволяє зберігати політики доступу в git та застосовувати зміни через CI/CD — жодних ручних кліків у веб-консолі.

Кроки для базового налаштування Tailscale:

  1. Встановіть Tailscale на всі вузли (сервери, контейнери, робочі станції) за допомогою tailscale.com/download.
  2. Зареєструйте кожен вузол через tailscale up. Для безголовкових серверів використовуйте ключі автентифікації.
  3. Налаштуйте ACL через веб-консоль або tailnet policy file.
  4. Для доступу до VPC розгорніть subnet router з --advertise-routes.
  5. Підтвердьте маршрути в консолі.

Ціни Tailscale: безкоштовно до 3 користувачів, далі від $4/місяць за користувача. Економія на інфраструктурі може досягати 70% порівняно з традиційними VPN. Наші devops-послуги включають повне налаштування Tailscale як частину безшовного VPN-рішення. Ми автоматизуємо розгортання Tailscale за допомогою Terraform та налаштовуємо tailnet-політики під ваші потреби. Ми гарантуємо якість роботи: сертифіковані інженери з 5+ роками досвіду та понад 100 успішних проектів.

Порівняння Tailscale та Headscale

Параметр Tailscale (SaaS) Headscale (self-hosted)
Control plane Tailscale Inc. Ваш сервер
Ціна Безкоштовно до 3 користувачів, далі платно Безкоштовно (open-source)
Tailscale SSH Повна підтримка Обмежена
Управління ACL Через веб-консоль або API Тільки через API/config
DERP-релеї Вбудовані глобальні Власні STUN/релеї

Терміни виконання

Конфігурація Термін
Базова установка на серверах + ACL 0.5–1 день
Subnet router + exit node 1 день
Headscale self-hosted + міграція 2–3 дні
Terraform-управління + CI/CD інтеграція 1–2 дні

Що входить у роботу

  • Аудит поточної мережевої інфраструктури та вимог безпеки.
  • Проектування tailnet: розбивка на теги, групи, ACL.
  • Встановлення та налаштування Tailscale на всіх вузлах (сервери, контейнери, робочі станції).
  • Налаштування subnet router та/або exit node за необхідності.
  • Розгортання Headscale (якщо потрібен self-hosted).
  • Інтеграція з Terraform та CI/CD для автоматизації управління.
  • Документація з політик доступу та процедур.
  • Навчання команди основам адміністрування tailnet.
  • 30 днів пост-підтримки після впровадження.

Отримайте консультацію щодо впровадження Tailscale — напишіть нам. Ми оцінимо вашу інфраструктуру та запропонуємо оптимальну конфігурацію.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141