87f9f865ae
CI-раннер не имеет SSH-ключа для github.com (и не должен — там нет ничего кроме публичного форка smoltcp). Репозиторий nxrp-smoltcp публичный, https-клон анонимный и не требует вообще никаких секретов, в отличие от ssh://, который требует ключ даже для публичных репо.
Крейт 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).