mirror of https://github.com/ospab/ostp.git
42 lines
5.0 KiB
Markdown
42 lines
5.0 KiB
Markdown
# Серверный демон 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.
|