39 lines
2.3 KiB
Markdown
39 lines
2.3 KiB
Markdown
# Крейт `client` — VPN-клиент и FFI-фасад
|
|
|
|
Клиентская сторона: перехватывает трафик приложений на уровне L3, прогоняет его
|
|
через userspace TCP/IP-стек и заворачивает в туннель ядра ([`core`](../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/`](src/net) | userspace TCP/IP-стек на smoltcp + мост в туннель. |
|
|
| [`src/tun/`](src/tun) | TUN-устройство, счётчики, системная маршрутизация. |
|
|
|
|
## Как это работает (с высоты)
|
|
|
|
```text
|
|
приложение ─→ 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`](../tools)).
|