40ddb0a0f6
Сервер получает флаги --require-auth/--backend-url (по умолчанию выключено, поведение уже развёрнутых нод не меняется). Auth-кадр хендшейка расширен с "session_id:leg_id" до "session_id:leg_id:token"; при включённом --require-auth сервер валидирует токен через новый AuthValidator (BackendClient к netrunner-backend, с кешем на 60с). Muxer теперь ведёт монотонный учёт трафика сессии (переживает реконнект ног — раньше total_bytes мог занижаться после переподключения) и раз в ~30с отчитывается бэкенду; при превышении лимита сессия разрывается. Токен клиента прокидывается через EngineConfig/TunnelConfig до Tauri-плагина (desktop.rs + Android Kotlin-плагин). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Крейт client — VPN-клиент и FFI-фасад
Клиентская сторона: перехватывает трафик приложений на уровне L3, прогоняет его
через userspace TCP/IP-стек и заворачивает в туннель ядра (core).
Собирается двумя способами:
- библиотека (
.so) для мобильных приложений через UniFFI — точка входаsrc/lib.rs(SessionManager/Session/VpnTrafficStats); - бинарь для Linux —
src/main.rs(отладка/локальный запуск).
Детали — в rustdoc:
cargo doc --open -p netrunner-client.
Структура
| Путь | Блок |
|---|---|
src/lib.rs |
FFI-фасад (uniffi): запуск/остановка сессии, статистика. |
src/main.rs |
Linux-бинарь: поднимает TUN и движок. |
src/net/ |
userspace TCP/IP-стек на smoltcp + мост в туннель. |
src/tun/ |
TUN-устройство, счётчики, системная маршрутизация. |
Как это работает (с высоты)
приложение ─→ TUN ─→ net::Engine (smoltcp + перехват) ─RawCastFrame→
core::ClientHandler (ноги туннеля, маскировка, шифр) ─→ сервер
EngineBuilder::build поднимает DNS, маршрутизацию и устанавливает туннель
(core::ClientHandler::connect), затем Engine::run крутит главный poll-цикл.
Сборка
client зависит от приватного форка smoltcp по SSH
(ssh://git@github.com/nineAp/nxrp-smoltcp.git) — сборку запускайте там, где есть
SSH-доступ (WSL/Linux), из чистого Windows-shell cargo его не достанет.
Android-сборка .so + Kotlin-биндингов — через make build-android (см.
tools).