10d357b8ec
Раньше shutdown_signal вообще не существовал — весь механизм graceful shutdown в network.rs был мёртвым кодом, ничего его не вызывало. main.rs теперь spawn'ит net.run() и последовательно ждёт сигнал, затем drain (НЕ tokio::select! — select! убил бы run()-future на середине drain'а в момент, когда shutdown-future резолвится). /health на 127.0.0.1 отдаёт активные соединения — для systemd/LB health-check. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Крейт server — серверная часть прокси
Тонкая обвязка вокруг ядра (core): принимает замаскированные
TLS-соединения, проверяет, что это валидный Netrunner-клиент, и проксирует трафик
во внешнюю сеть. Вся бизнес-логика — в ядре; здесь точка входа, листенер и
серверная диагностика.
Детали — в rustdoc:
cargo doc --open -p netrunner-server.
Файлы
| Файл | Роль |
|---|---|
src/main.rs |
CLI (--host/--port), логгер, tokio-рантайм, запуск. |
src/network.rs |
TCP-листенер; на каждое соединение спавнит ServerHandler. |
src/diagnostics.rs |
Логгер диагностики ядра → netrunner_diagnostics.jsonl. |
Жизненный цикл соединения (в ядре)
accept TCP → core::ServerHandler::run:
1. ClientHello → ServerHello (невалидный/чужой → stealth-fallback на ubuntu.com:443)
2. проверка auth-payload (неверный → отказ)
3. прицепить ногу к Muxer сессии и крутить TunnelEngine → проксировать к целям
Один общий SessionManager мультиплексирует несколько ног одной сессии на один
Muxer. Фоновая задача периодически делает health-check и печатает топологию.
Запуск и деплой
Локально: make debug-server (биндится на 0.0.0.0:8443). Релиз/деплой:
make build-server → make deploy-server (systemd-сервис на VPS, см.
server/netrunner-server.service и Makefile).