Перейти к содержанию

Failover и регенерация

·3 минуты·
Компрометация ячейки — изолированный инцидент, а не катастрофа. Живые ячейки предоставляют резервный выход участникам скомпрометированной ячейки. Клиенты переключаются автоматически через subscription. Участники восстанавливают инфраструктуру с нуля.

Что считается компрометацией ячейки #

Под компрометацией ячейки понимается блокировка SNI-домена ячейки системами DPI или иными мерами, в результате которой клиенты теряют связность с Core-нодами ячейки. При этом управляющий кластер и другие ячейки продолжают работать.

Признаки компрометации:

  • Клиенты ячейки массово теряют подключение.
  • Core-ноды ячейки сохраняют heartbeat с управляющим кластером (phone-home работает).
  • Трафик Entry → Core для данного SNI-домена прерывается.

Переключение клиентов (failover) #

Переключение происходит через subscription-механизм — прозрачно для пользователя.

sequenceDiagram participant Mgmt as Управляющий кластер participant Sub as Subscription-сервис participant Client as Клиент Mgmt->>Mgmt: Фиксация компрометации ячейки X Mgmt->>Sub: Обновить маршруты клиентов ячейки X → резервная ячейка Client->>Sub: GET /api/ (плановое обновление подписки) Sub-->>Client: Конфиг резервной ячейки (новый домен, новый serviceName) Client->>Client: Автоматическое обновление профиля

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

Резервный доступ и квоты #

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

Учёт ведётся управляющим кластером. Резервный доступ предоставляется в пределах установленных квот.

Процесс регенерации ячейки #

graph TD I["Компрометация ячейки X"] N["Уведомление участников\n(Telegram-бот)"] F["Клиенты переключены\nна резервную ячейку"] S["Участники поднимают\nновые серверы"] R["Регистрация новых Core-нод\n(новый join-токен)"] C["Новая ячейка X' введена\n(новый домен, новые сертификаты)"] M["Клиенты мигрируют\nна ячейку X' через subscription"] D["Старая инфраструктура\nвыведена из оборота"] I --> N --> F --> S --> R --> C --> M --> D style I fill:#dc2626,color:#fff,stroke:#b91c1c style C fill:#059669,color:#fff,stroke:#047857 style D fill:#64748b,color:#fff,stroke:#475569

Шаги подробно #

1. Фиксация инцидента Управляющий кластер обнаруживает массовую потерю клиентских соединений в ячейке X. Heartbeat от Core-нод сохраняется — компрометация именно на уровне SNI-домена.

2. Уведомление Telegram-бот уведомляет участников ячейки X об инциденте и предоставляет инструкции.

3. Временный резервный доступ Управляющий кластер переключает клиентов ячейки X на резервные ячейки через subscription-сервис. Пользователи сохраняют доступ к сети.

4. Подготовка новой инфраструктуры Каждый участник ячейки X самостоятельно:

  • Арендует новый сервер (в новой локации или у нового провайдера).
  • Получает новый join-токен от администратора.
  • Запускает контейнер, проходит онбординг.

5. Формирование новой ячейки Администратор выбирает новый SNI-домен и объединяет зарегистрированные Core-ноды в новую ячейку X'.

6. Миграция клиентов Subscription-сервис обновляет конфигурации клиентов ячейки X → конфигурации ячейки X’. Пользователи получают обновление при плановом обновлении подписки.

7. Вывод старой инфраструктуры Старые Core-ноды выводятся из оборота. Их сертификаты отзываются. Старый SNI-домен больше не используется.

Устойчивость управляющего кластера #

Управляющий кластер остаётся доступным на протяжении всего процесса регенерации — он не входит в скомпрометированную ячейку. Три сервера кластера с HA etcd обеспечивают работу subscription-сервиса и Telegram-бота даже при потере одного сервера.

Сводная таблица #

ЭтапКто действуетИнструмент
ОбнаружениеУправляющий кластерМониторинг heartbeat
УведомлениеTelegram-ботАвтоматически
Переключение клиентовSubscription-сервисАвтоматически
Новые серверыУчастникиDocker + join-токен
Новая ячейкаАдминистраторУправляющий кластер
МиграцияSubscription-сервисАвтоматически