5.0 KiB
Серверный демон OSTP
Обзор
Сервер OSTP — это высокопроизводительный сетевой шлюз, предназначенный для одновременного обслуживания множества анонимных зашифрованных туннелей. Он отвечает за расшифровку, демультиплексирование трафика от клиентов и проксирование запросов в глобальный интернет.
Архитектура диспетчера (Dispatcher Core)
Сердцем сервера является центральный модуль Dispatcher. В отличие от классических синхронных серверов, он отделяет сетевой ввод-вывод от обработки логики сессий:
- Асинхронный пул сокетов: Поток чтения вычитывает датаграммы из глобального
UdpSocketи мгновенно отправляет их в многопоточный канал (channel) диспетчера. - Реестр сессий: Диспетчер поддерживает хэш-таблицу активных соединений, индексированную по
session_id. - Маршрутизация пакетов: Для каждого пакета диспетчер быстро (
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.