ostp/docs/ru/server.md

5.0 KiB
Raw Blame History

Серверный демон OSTP

Обзор

Сервер OSTP — это высокопроизводительный сетевой шлюз, предназначенный для одновременного обслуживания множества анонимных зашифрованных туннелей. Он отвечает за расшифровку, демультиплексирование трафика от клиентов и проксирование запросов в глобальный интернет.


Архитектура диспетчера (Dispatcher Core)

Сердцем сервера является центральный модуль Dispatcher. В отличие от классических синхронных серверов, он отделяет сетевой ввод-вывод от обработки логики сессий:

  1. Асинхронный пул сокетов: Поток чтения вычитывает датаграммы из глобального UdpSocket и мгновенно отправляет их в многопоточный канал (channel) диспетчера.
  2. Реестр сессий: Диспетчер поддерживает хэш-таблицу активных соединений, индексированную по session_id.
  3. Маршрутизация пакетов: Для каждого пакета диспетчер быстро (O(1) в среднем случае) сопоставляет его с активным объектом конечного автомата ProtocolMachine. Если session_id валиден, пакет передается на расшифровку.

Защита от DoS и сбоев (Intrusion Resilience)

Публичные серверные конечные точки подвергаются постоянным сканированиям и попыткам внедрения данных. Сервер реализует несколько барьеров защиты:

1. Изолированная обработка ошибок (Strict Error Confinement)

Любой невалидный кадр, сбой дешифрования (AEAD integrity failure) или нарушение структуры пакета мгновенно вызывают событие отбрасывания (Drop) конкретного пакета:

  • Ошибка локализуется на самом раннем этапе парсинга.
  • Состояние сессии не сбрасывается и не закрывается, если получен случайный искаженный пакет (защита от «spoofing» атак, направленных на разрыв чужих сессий одним датаграммом).

2. Защита от атак повторного воспроизведения (Replay Protection)

Поскольку злоумышленник может перехватить валидные UDP-пакеты рукопожатия и отправить их повторно позже:

  • В полезную нагрузку рукопожатия встраиваются криптографические временные метки (timestamps).
  • Сервер проверяет разницу времени со своими часами. Если пакет опоздал более чем на допустимый порог синхронизации, соединение отвергается.
  • Успешные рукопожатия кэшируются в памяти на короткий срок, делая невозможным повторное использование точно таких же байт-в-байт запросов.

Динамический роуминг адресов

Одной из ключевых возможностей сервера является автоматическая адаптация под сетевую топологию клиентов:

  • При получении любого успешно расшифрованного пакета данных сервер извлекает его текущий IP-адрес и порт отправителя.
  • Если этот адрес отличается от последнего зарегистрированного в сессии, сервер выполняет мгновенный атомарный апдейт роутинговой координаты клиента.
  • Все исходящие данные (Outbound) для этого клиента немедленно начинают отправляться на новые координаты.
  • Этот механизм позволяет клиенту переключаться между вышками сотовой связи или сетями Wi-Fi за миллисекунды без разрыва сеансов SOCKS5/HTTP.