Files
netrunner-proxy/client
nineap 87f9f865ae Fix: smoltcp-зависимость через https, не ssh — CI не может её склонировать
CI-раннер не имеет SSH-ключа для github.com (и не должен — там нет ничего
кроме публичного форка smoltcp). Репозиторий nxrp-smoltcp публичный,
https-клон анонимный и не требует вообще никаких секретов, в отличие от
ssh://, который требует ключ даже для публичных репо.
2026-07-10 20:13:16 +07:00
..
2026-03-13 11:54:59 +07:00
2026-06-30 18:51:09 +07:00

Крейт client — VPN-клиент и FFI-фасад

Клиентская сторона: перехватывает трафик приложений на уровне L3, прогоняет его через userspace TCP/IP-стек и заворачивает в туннель ядра (core). Собирается двумя способами:

  • библиотека (.so) для мобильных приложений через UniFFI — точка входа src/lib.rs (SessionManager/Session/VpnTrafficStats);
  • бинарь для Linuxsrc/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).