Перейти до змісту

08. Tailscale — приватний шлях до PostgreSQL

Work in progress

Уявіть: хтось із команди працює вдома, хтось — у студії, а сервер із PostgreSQL стоїть у дата-центрі. Усі ці комп’ютери мають доступ до інтернету. Чи означає це, що PostgreSQL теж потрібно зробити доступним для всього інтернету?

На щастя, ні. І краще навіть не намагатися.

У попередньому розділі ми підготували PostgreSQL — місце, де StudioFS зберігає спільні метадані. Тепер нам потрібно надати робочим комп’ютерам доступ до цієї бази, але не запрошувати туди решту світу. Для цього створимо приватну мережу за допомогою Tailscale (або NetBird).

Навіщо нам VPN, якщо є пароль?

PostgreSQL зазвичай працює через TCP-порт 5432. Можна відкрити його на сервері, додати пароль і сподіватися, що ніхто сторонній не зацікавиться вашою базою. Але відкритий порт побачать автоматичні сканери, а помилка в налаштуванні доступу може коштувати дуже дорого.

VPN (Virtual Private Network) пропонує інший підхід: комп’ютери отримують адреси в окремій приватній мережі й можуть спілкуватися через зашифроване з’єднання. Для StudioFS це виглядає так:

Робочий комп’ютер A ──┐
                       ├── Tailscale ── PostgreSQL :5432
Робочий комп’ютер B ──┘

Робочі комп’ютери ────── HTTPS ──────── S3-сховище

Тут є важлива деталь: VPN потрібен передусім для приватного доступу до PostgreSQL. Вміст відеофайлів клієнти StudioFS зазвичай отримують безпосередньо із S3 через HTTPS, а не «прокачують» через сервер бази даних.

Tailscale і NetBird будують такі мережі на основі WireGuard. Вони беруть на себе налаштування тунелів, пошук інших пристроїв і роботу в мережах із NAT. Нам не доведеться вручну з’єднувати IP-адреси всіх учасників — уже непогано для завдання, у назві якого є слово «мережа».

Обираємо свій маршрут

Для першого налаштування рекомендуємо Tailscale: у нього простий клієнт, зрозуміла панель керування й зручні команди перевірки. NetBird — повноцінна альтернатива, але історично розробники StudioFS використовували саме Tailscale.

Нижче ми розглянемо основний сценарій: PostgreSQL працює на вашому Linux-сервері або VPS, і ви можете підключитися до нього через SSH. Робочі комп’ютери можуть працювати під керуванням Windows, macOS або Linux.

Налаштовуємо Tailscale

1. Додаємо сервер до приватної мережі

Зареєструйтеся в Tailscale й створіть власну приватну мережу — tailnet. Далі встановіть Tailscale на сервер із PostgreSQL.

Для поширених дистрибутивів Linux офіційна інструкція пропонує:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Перша команда завантажує та запускає інсталяційний скрипт Tailscale. Якщо не хочете виконувати віддалений скрипт напряму, скористайтеся інструкцією зі встановлення через пакетний менеджер вашого дистрибутива: Tailscale для Linux.

Друга команда під’єднує сервер до вашого tailnet. Для підтвердження входу Tailscale може показати посилання, яке потрібно відкрити в браузері.

Після авторизації виконайте:

tailscale status
tailscale ip -4

Перша команда показує підключені пристрої, друга — IPv4-адресу цього сервера в Tailscale. Наприклад:

100.101.102.103

Перевірте також, що сервер з’явився на сторінці Machines у панелі керування Tailscale.

2. Під’єднуємо робочі комп’ютери

На Windows установіть Tailscale для Windows, на macOS — Tailscale для macOS. Для Linux скористайтеся тією самою інструкцією, що й на сервері.

Увійдіть до того самого tailnet. Це не обов’язково означає один спільний обліковий запис для всієї команди: адміністратор може запросити окремих користувачів. Важливо, щоб їхні пристрої мали доступ до потрібної приватної мережі.

Потім на робочому комп’ютері перевірте:

tailscale status
tailscale ping 100.101.102.103

Замініть адресу в прикладі на справжню VPN-адресу вашого сервера. Успішний tailscale ping означає, що пристрої можуть обмінюватися трафіком через Tailscale.

Перевіряємо доступність PostgreSQL

Тепер потрібно переконатися, що через приватну мережу доступний не лише сервер, а й потрібний TCP-порт PostgreSQL.

Спочатку з робочого комп’ютера ще раз перевірте зв’язок:

tailscale ping 100.101.102.103

Потім перевірте TCP-порт. У PowerShell на Windows:

Test-NetConnection 100.101.102.103 -Port 5432

На macOS або Linux, якщо встановлено nc:

nc -vz 100.101.102.103 5432

У Windows шукайте TcpTestSucceeded : True, а на macOS або Linux — повідомлення про успішне TCP-з’єднання. Це означає, що порт доступний, але ще не підтверджує правильність імені користувача, пароля або прав доступу в PostgreSQL.

Насамкінець, перевірте, що публічна IP-адреса VPS не приймає з’єднань на порт 5432. Перегляньте правила брандмауера (firewall) у провайдера та на сервері, а за можливості перевірте доступність порту з пристрою поза вашою VPN. Один невдалий тест не замінює перевірки мережевих правил.

Якщо PostgreSQL працює в керованому хмарному сервісі

Іноді PostgreSQL працює не на вашому VPS, а в Amazon RDS, Google Cloud SQL або в іншого провайдера. Ви не маєте доступу до його операційної системи й не можете просто встановити на нього Tailscale.

Тут допомагає приватний мережевий шлюз — невелика віртуальна машина в тій самій приватній мережі, що й база.

Робочий комп’ютер
        │
     Tailscale
        │
  Шлюз у приватній мережі провайдера
        │
  Приватна IP-адреса PostgreSQL :5432

Шлюз не зберігає файли StudioFS і не замінює PostgreSQL. Він лише пересилає дозволений мережевий трафік.

Для Tailscale використайте subnet router: встановіть Tailscale на шлюз, увімкніть IP forwarding, оголосіть маршрут до приватної IP-адреси бази (за можливості лише до одного хоста, /32), підтвердьте маршрут у панелі Machines і дозвольте потрібним клієнтам доступ через правила tailnet.

На Linux-клієнтах додатково може знадобитися прийняття маршрутів:

sudo tailscale set --accept-routes=true

Важливо, щоб шлюз сам мав приватний доступ до бази, а мережеві правила провайдера дозволяли з’єднання через TCP-порт 5432 від шлюзу, а не з усього інтернету.

За типового маршрутизування з підміною адрес (SNAT/masquerade) PostgreSQL бачить IP-адресу шлюзу, а не VPN-адресу конкретного ноутбука. Це потрібно врахувати у списку дозволених адрес (allowlist) провайдера та правилах доступу PostgreSQL.

Цей сценарій складніший, ніж встановлення VPN безпосередньо на власний сервер. Дотримуйтеся інструкцій свого хмарного провайдера щодо приватних мереж, а також посібника Tailscale subnet routers.

Не потрібно спрямовувати весь інтернет-трафік через шлюз: для доступу до PostgreSQL достатньо маршруту до його приватної адреси.

Що маємо після цього розділу?

Тепер робочий комп’ютер має приватний маршрут до PostgreSQL. Ви знаєте VPN-адресу сервера, перевірили доступність потрібного порту й переконалися, що публічний TCP-порт 5432 залишається закритим.

У наступному розділі перевіримо всю підготовлену інфраструктуру разом, а потім нарешті перейдемо до встановлення StudioFS.


Зміст · English · ← Попередня · Наступна →