Core-нода
Содержание
Роль в архитектуре #
TLS 1.3"| Entry Entry -->|"VLESS + gRPC
TLS 1.3"| Core Core --> Internet style Core fill:#1d4ed8,color:#fff,stroke:#1e40af,stroke-width:3px style Client fill:#64748b,color:#fff,stroke:#475569 style Entry fill:#0891b2,color:#fff,stroke:#0e7490 style Internet fill:#374151,color:#fff,stroke:#1f2937
Core-нода — последнее звено в цепочке перед выходом в открытый интернет. Она принимает зашифрованный трафик от Entry-нод и направляет его к целевым ресурсам.
Характеристики #
| Параметр | Значение |
|---|---|
| Функция | Маршрутизация трафика в интернет, промежуточный CA |
| Расположение | Вне регулируемого региона |
| Жизненный цикл | Долгоживущая |
| Компоненты | Nginx + Xray-core + сайт-прикрытие + etcd |
| Открытые порты | 22 (SSH), 80 (HTTP → HTTPS), 443 (HTTPS) |
| Маскировка | gRPC API микросервисов |
Компоненты #
0.0.0.0:443"] Xray["Xray-core
127.0.0.1:10003"] Site["Сайт-прикрытие"] Nginx -->|"/api.v2.rpc.{path}"| Xray Nginx -->|"/"| Site end Entry["Entry-нода"] -->|"TLS 1.3"| Nginx Xray --> Internet["Интернет"] style Nginx fill:#7c3aed,color:#fff,stroke:#6d28d9 style Xray fill:#2563eb,color:#fff,stroke:#1d4ed8 style Site fill:#64748b,color:#fff,stroke:#475569 style Entry fill:#0891b2,color:#fff,stroke:#0e7490 style Internet fill:#374151,color:#fff,stroke:#1f2937
Nginx #
- TLS-терминация с сертификатом Let’s Encrypt;
- маршрутизация по URL path: gRPC-трафик направляется на Xray, все остальные запросы — на сайт-прикрытие;
- fallback: любой неизвестный запрос возвращает сайт-прикрытие (HTTP 200 OK).
Xray-core #
- Слушает только на
127.0.0.1(недоступен извне); - протокол: VLESS + gRPC;
- inbound: принимает трафик от Entry-нод;
- outbound: freedom — прямой выход в интернет.
Сайт-прикрытие #
- Полноценный веб-сайт (SPA), доступный по основному домену;
- при обращении к любому URL без VLESS-заголовков — возвращается сайт-прикрытие;
- контент уникальный и нейтральный, сайт выглядит «живым» при ручной проверке.
Ядро сети (mesh) #
Core-ноды образуют ядро сетевой топологии core-periphery. Между собой они связаны полносвязной mesh-сетью:
- Core-ноды проверяют друг друга через общий Root CA;
- при необходимости Core-ноды могут передавать друг другу административную ответственность за Entry-ноды;
- выход одной Core-ноды из строя не нарушает работу остальных.
Управление Entry-нодами #
Каждая Core-нода административно отвечает за группу Entry-нод:
- конфигурирование Xray и Nginx на Entry-нодах;
- ротация gRPC-путей на участке Entry → Core;
- мониторинг состояния и доступности;
- выпуск сертификатов для Entry-нод (промежуточный CA).
Core-нода имеет SSH-доступ к своим Entry-нодам по ключу для автоматизации этих операций.
Ротация gRPC-путей #
Core-нода периодически генерирует новые случайные gRPC-пути (/api/v2/rpc/{random}/) и обновляет конфигурацию на всех своих Entry-нодах. Процесс:
- Генерация нового случайного пути.
- Обновление конфигурации Nginx и Xray на Core-ноде.
- Валидация новой конфигурации.
- Обновление конфигурации на каждой Entry-ноде по SSH.
- В случае ошибки — автоматический откат.
Клиентские пути при этом не затрагиваются — ротация касается только участка Entry → Core.
Промежуточный CA (PKI) #
Core-нода выступает промежуточным удостоверяющим центром:
- получает свой сертификат от Root CA (Root-нода);
- выпускает сертификаты для Entry-нод;
- Entry-ноды принимают сертификаты любой Core-ноды сети.
| Параметр | Значение |
|---|---|
| Источник сертификата | Root CA (Root-нода) |
| Срок жизни | Долгосрочный |
| Выпускает сертификаты для | Entry-нод |
| Отзыв | Ручной, с Root-ноды |
Маскировка трафика #
На участке Entry → Core трафик выглядит как gRPC-вызовы к API микросервисов:
- стандартный TLS 1.3 handshake;
- валидный сертификат Let’s Encrypt;
- HTTP/2 с gRPC content-type;
- случайные serviceName, имитирующие реальные API.
Этот участок наиболее уязвим для анализа DPI, так как трафик пересекает границу регулируемого региона.
Взаимодействие с хранилищем данных #
Core-ноды играют центральную роль в системе хранения данных сети.
KV-кластер (etcd) #
На начальном этапе Core-ноды хостят узлы распределенного KV-кластера (etcd). Через KV-хранилище выполняются все оперативные задачи:
- обновление статусов Entry-нод;
- ротация gRPC-путей;
- управление пользователями (добавление, изменение, удаление);
- обновление конфигураций узлов.
| Параметр | Значение |
|---|---|
| Права доступа | Чтение — все данные; запись — оперативные изменения |
| Размещение | На Core-нодах (начальный этап) |
Git-репозиторий #
Core-ноды имеют доступ на запись в приватный Git-репозиторий. Каждая Core-нода периодически фиксирует оперативные изменения из KV-хранилища в Git (направление KV → Git). Это обеспечивает непрерывное версионирование и сохранение актуального состояния сети даже при неактивной Root-ноде.
Требования к серверу #
| Параметр | Минимум |
|---|---|
| CPU | 1 vCPU |
| RAM | 512 MB |
| Диск | 10 GB SSD |
| ОС | Ubuntu 22.04 / Debian 12 |
| IPv4 | Выделенный белый адрес |
| Локация | Вне регулируемого региона |
Реагирование на компрометацию #
При компрометации Core-ноды (обнаружение и блокировка DPI):
- Уведомить администратора (Root-нода).
- Перевести Entry-ноды, привязанные к этой Core-ноде, на другие Core-ноды.
- Отозвать сертификат промежуточного CA скомпрометированной Core-ноды.
- Перевыпустить сертификаты Entry-нод, которые были привязаны к этой Core-ноде.
- При необходимости — развернуть новую Core-ноду.