Входной слой (Entry)
Содержание
Роль в архитектуре #
Характеристики #
| Параметр | Значение |
|---|---|
| Инфраструктура | Kubernetes worker nodes |
| Единица деплоя | Pod (Nginx + Xray) |
| Масштабирование | Горизонтальное, без ограничений |
| Состояние | Stateless |
| Домен | Один на ячейку |
| Открытые порты | 80 (→ HTTPS), 443 |
| Маскировка | Обычный HTTPS-сайт |
Компоненты пода #
Nginx #
- TLS-терминация с сертификатом от публичного CA.
- Маршрутизация по URL: gRPC-трафик (по serviceName) → Xray, всё остальное → сайт-прикрытие.
- Fallback: любой запрос без VLESS-заголовков возвращает сайт-прикрытие (HTTP 200 OK).
Xray-core #
- Слушает только на
127.0.0.1— недоступен извне. - Протокол: VLESS + gRPC.
- Inbound: принимает трафик от клиентов.
- Outbound: перенаправляет трафик на Core-ноду через mTLS + VLESS + gRPC.
Stateless-роутинг #
Entry-под не хранит таблицу маршрутов локально. При каждом новом клиентском подключении:
- Извлекает UUID из VLESS-заголовка.
- Запрашивает etcd: UUID → адрес Core-ноды + SNI ячейки.
- Кеширует результат на время активной сессии.
- Устанавливает mTLS-соединение с Core-нодой.
Если связность с etcd нарушена — новые соединения не устанавливаются. Активные сессии продолжаются до завершения.
Масштабирование #
Каждый новый участник сети добавляет один сервер в K8s-кластер в качестве worker node. Kubernetes автоматически размещает на нём Entry-поды.
| Действие | Что происходит |
|---|---|
| Добавление worker node | Новые Entry-поды распределяются на неё автоматически |
| Выход worker node | Поды перемещаются на оставшиеся ноды |
| Обновление конфигурации | Rolling update без прерывания активных сессий |
Защита от активного зондирования #
На каждом Entry-поде Xray расположен за Nginx. Любой запрос без правильных VLESS-заголовков возвращает сайт-прикрытие. Нет характерных ошибок, редиректов или отказов, по которым можно было бы идентифицировать прокси-сервер.
serviceName (gRPC-путь) случайный и периодически ротируется. Наблюдатель, не знающий serviceName, не может отличить VPN-трафик от обычных запросов к сайту.
Сертификаты #
Entry-поды получают два вида сертификатов:
| Сертификат | Источник | Назначение |
|---|---|---|
| TLS (публичный) | Let’s Encrypt | TLS-терминация клиентских соединений |
| mTLS (внутренний) | Управляющий кластер (CA) | Аутентификация при подключении к Core-нодам |
Реагирование на инциденты #
Порядок действий:
- Исключить скомпрометированный worker node из K8s-кластера.
- Отозвать mTLS-сертификат ноды в управляющем кластере.
- Проверить Core-ноды, к которым шёл трафик через скомпрометированный под — при необходимости сменить serviceName.
- Добавить новую worker node взамен выведенной.