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

Entry-нода

·4 минуты·
Entry-нода — входной узел сети, который принимает клиентские подключения и перенаправляет трафик на Core-ноды. Размещается внутри регулируемого региона. Расходная, легко заменяемая — предполагается постоянная ротация.

Роль в архитектуре #

graph TD Client["Клиент"] Entry["Entry-нода"] Core["Core-нода"] Internet["Интернет"] Client -->|"VLESS + gRPC
TLS 1.3"| Entry Entry -->|"VLESS + gRPC
TLS 1.3"| Core Core --> Internet style Entry fill:#0891b2,color:#fff,stroke:#0e7490,stroke-width:3px style Client fill:#64748b,color:#fff,stroke:#475569 style Core fill:#1d4ed8,color:#fff,stroke:#1e40af style Internet fill:#374151,color:#fff,stroke:#1f2937

Entry-нода — первая точка контакта пользователя с сетью Sigil Gate. Клиент подключается к Entry-ноде как к обычному HTTPS-сайту; Entry-нода извлекает VPN-трафик и перенаправляет его на Core-ноду.

Характеристики #

ПараметрЗначение
ФункцияПрием клиентских подключений, перенаправление на Core
РасположениеВнутри регулируемого региона
Жизненный циклНедолгоживущая, расходная
КомпонентыNginx + Xray-core + сайт-прикрытие
Открытые порты22 (SSH), 80 (HTTP → HTTPS), 443 (HTTPS)
МаскировкаОбычный HTTPS-сайт

Компоненты #

graph TD subgraph entry["Entry-нода"] Nginx["Nginx
0.0.0.0:443"] Xray["Xray-core
127.0.0.1:10003"] Site["Сайт-прикрытие"] Nginx -->|"/api.v2.rpc.{path}"| Xray Nginx -->|"/"| Site end Client["Клиент"] -->|"TLS 1.3"| Nginx Xray -->|"VLESS + gRPC
TLS 1.3"| Core["Core-нода"] 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 Client fill:#64748b,color:#fff,stroke:#475569 style Core fill:#1d4ed8,color:#fff,stroke:#1e40af

Nginx #

  • TLS-терминация с сертификатом Let’s Encrypt;
  • маршрутизация по URL path: gRPC-трафик от клиентов направляется на Xray, все остальные запросы — на сайт-прикрытие;
  • fallback: любой запрос без VLESS-заголовков возвращает сайт-прикрытие (HTTP 200 OK).

Xray-core #

  • Слушает только на 127.0.0.1 (недоступен извне);
  • протокол: VLESS + gRPC;
  • inbound: принимает трафик от клиентов;
  • outbound: перенаправляет трафик на Core-ноду через VLESS + gRPC + TLS 1.3.

Сайт-прикрытие #

  • Полноценный веб-сайт (SPA), доступный по основному домену;
  • контент уникальный, нейтральный;
  • при ручной проверке сайт выглядит «живым» и легитимным.

Расположение и логика #

Entry-ноды размещаются внутри регулируемого региона (например, в российских ЦОД). Это принципиальное архитектурное решение:

  • трафик от клиента к Entry-ноде не покидает регион;
  • для систем DPI это выглядит как обычные HTTPS-запросы к локальному сайту;
  • трафик к локальным ресурсам не попадает в приоритетный список для глубокого анализа.

Периферия сети #

Entry-ноды образуют периферию в топологии core-periphery:

  • не связаны между собой;
  • не знают о существовании других Entry-нод;
  • подключены к ядру (Core-нодам), но не ко всему — каждая Entry-нода знает лишь малую часть от общего числа Core-нод.
graph TD Core1["Core #1"] Core2["Core #2"] Core3["Core #3"] E1["Entry A"] E2["Entry B"] E3["Entry C"] E4["Entry D"] E1 -.->|"данные"| Core1 E2 -.->|"данные"| Core1 E2 -.->|"данные"| Core2 E3 -.->|"данные"| Core2 E4 -.->|"данные"| Core3 Core1 ---|"mesh"| Core2 Core2 ---|"mesh"| Core3 Core1 ---|"mesh"| Core3 style Core1 fill:#1d4ed8,color:#fff,stroke:#1e40af style Core2 fill:#1d4ed8,color:#fff,stroke:#1e40af style Core3 fill:#1d4ed8,color:#fff,stroke:#1e40af style E1 fill:#0891b2,color:#fff,stroke:#0e7490 style E2 fill:#0891b2,color:#fff,stroke:#0e7490 style E3 fill:#0891b2,color:#fff,stroke:#0e7490 style E4 fill:#0891b2,color:#fff,stroke:#0e7490

Принцип минимальной связности #

Ограничение знания топологии — ключевой принцип безопасности. Если Entry-нода скомпрометирована (обнаружена DPI), раскрывается только малая часть ядра сети. Остальные Core-ноды остаются неизвестными для наблюдателя.

Жизненный цикл #

Entry-ноды расходные — они спроектированы для частой замены:

graph LR Deploy["Развертывание"] Active["Эксплуатация"] Detect["Компрометация"] Decom["Вывод"] New["Новая Entry"] Deploy --> Active Active --> Detect Detect --> Decom Decom --> New New --> Deploy style Deploy fill:#2563eb,color:#fff,stroke:#1d4ed8 style Active fill:#0891b2,color:#fff,stroke:#0e7490 style Detect fill:#7c3aed,color:#fff,stroke:#6d28d9 style Decom fill:#64748b,color:#fff,stroke:#475569 style New fill:#2563eb,color:#fff,stroke:#1d4ed8
  • Развертывание — быстрая настройка по стандартному процессу;
  • Эксплуатация — прием клиентских подключений;
  • Компрометация — обнаружение и блокировка DPI (потеря HTTPS-связности с Core при сохранении SSH);
  • Вывод — отключение, отзыв сертификата;
  • Замена — развертывание новой Entry-ноды с новым доменом и IP.

Планируется множество однотипных Entry-нод с постоянной ротацией.

Административная привязка #

Каждая Entry-нода в каждый момент времени административно закреплена за одной Core-нодой. Core-нода отвечает за:

  • конфигурирование Entry-ноды;
  • ротацию gRPC-путей;
  • мониторинг состояния;
  • выпуск сертификатов (промежуточный CA).

Привязка — условная (soft affinity). Core-ноды могут передавать Entry-ноды друг другу.

Маскировка трафика #

Участок Клиент → Entry #

Что видит наблюдательРеальность
HTTPS-запросы к обычному сайтуVPN-туннель (VLESS + gRPC)
Стандартный TLS 1.3 handshakeСтандартный TLS 1.3 handshake
Валидный сертификат Let’s EncryptВалидный сертификат Let’s Encrypt
Контент сайта при прямом обращенииСайт-прикрытие (fallback)

Защита от активного зондирования #

  • При обращении к любому URL без VLESS-заголовков — сайт-прикрытие (HTTP 200 OK);
  • нет характерных ошибок, редиректов или отказов;
  • gRPC-пути случайные и ротируемые — не /ws/, не /vless/.

Взаимодействие с хранилищем данных #

В текущей архитектуре Entry-ноды конфигурируются через SSH с закрепленной Core-ноды. В перспективе Entry-ноды получат доступ на чтение к KV-кластеру для самостоятельного получения:

  • своей конфигурации;
  • актуальных gRPC-путей и параметров подключений к Core-нодам;
  • данных для аутентификации клиентов.
Entry-ноды имеют только права на чтение. Запись в KV-кластер и доступ к Git-репозиторию запрещены.

Безопасность #

  • Xray слушает только 127.0.0.1;
  • пути gRPC — случайные;
  • firewall: только порты 22, 80, 443;
  • SSH-доступ по ключу (доступ от Root-ноды и закрепленной Core-ноды).

Требования к серверу #

ПараметрМинимум
CPU1 vCPU
RAM512 MB
Диск10 GB SSD
ОСUbuntu 22.04 / Debian 12
IPv4Выделенный белый адрес
ЛокацияВнутри регулируемого региона

Реагирование на компрометацию #

Признаки компрометации Entry-ноды: потеря HTTPS-связности с Core-нодами при сохранении SSH-доступа, или существенная деградация канала связи.

Порядок действий:

  1. Вывести скомпрометированную Entry-ноду из оборота.
  2. Если общее количество Core-нод > 2 — вывести Core-ноды, известные этой Entry-ноде.
  3. Отозвать сертификат Entry-ноды.
  4. Перевыпустить сертификаты для затронутых компонентов.
  5. Развернуть новую Entry-ноду с новым доменом и IP-адресом.