cfcb1afcec
--metrics-port (0.0.0.0, в отличие от --health-port — тот 127.0.0.1-only) отдаёт netrunner_connections_active/total, netrunner_auth_validate_duration_seconds, netrunner_auth_failures_total, netrunner_circuit_breaker_open. Тот же hand-rolled HTTP-паттерн, что и health.rs — без HTTP-фреймворка ради одного эндпоинта. scripts/generate-prometheus-targets.mjs генерит список scrape-таргетов из nodes.json — job update-observability-targets в deploy.yml гоняет его при каждом деплое нод и заливает на VPS с данными (netrunner-data/observability/targets/nodes.json), чтобы центральный Prometheus не терял из виду ноды без ручной правки конфига. 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).