c852315d34
- Прокидываем sni (decoy-хост) по обновлённому UDL через весь стек: guest-js -> Tauri-команда -> desktop/mobile -> Kotlin spawnSession. Список серверов пока статичный (backend еще не отдает sni), но логика похода в реальный /api/v1/nodes оставлена под флагом на будущее. - Бандлим wintun.dll в Windows-инсталлятор через bundle.resources в tauri.windows.conf.json - раньше он копировался только для локального cargo run/tauri dev, но не попадал в NSIS/MSI. - Чиним падение мобильной сборки: гитигнорённые UniFFI Kotlin-биндинги отстали от обновленного UDL (не хватало параметра sni). - Флаги стран - локальные SVG вместо react-country-flag в CDN-режиме: тот бился об CSP и не грузился офлайн. - Добавляем дерево README.md по структуре проекта и точечные комментарии в неочевидных местах кода. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
56 lines
3.2 KiB
Markdown
56 lines
3.2 KiB
Markdown
# Netrunner VPN
|
||
|
||
Клиентское приложение VPN с stealth-протоколом (маскировка `ClientHello` под
|
||
decoy-домен через SNI). Гибридный стек: React-фронтенд + Rust-бэкенд на Tauri
|
||
2, нативный VPN-движок подключается как приватный крейт по FFI (UniFFI).
|
||
|
||
## Структура репозитория
|
||
|
||
| Путь | Что внутри | Документация |
|
||
|---|---|---|
|
||
| [`src/`](src/README.md) | React/TypeScript UI (Vite) | [src/README.md](src/README.md) |
|
||
| [`src-tauri/`](src-tauri/README.md) | Rust-оболочка Tauri + нативный VPN-плагин | [src-tauri/README.md](src-tauri/README.md) |
|
||
|
||
Каждая поддиректория с самостоятельной логикой имеет свой `README.md` —
|
||
смотри дерево докам по ссылкам выше, дальше они ведут друг к другу.
|
||
|
||
## Технологии
|
||
|
||
- **Frontend**: React 19, TypeScript, Vite, Zustand (стейт), react-i18next
|
||
(RU/EN), Tailwind + shadcn/radix-ui, framer-motion.
|
||
- **Backend**: Rust, Tauri 2 (десктоп: Windows/Linux/macOS, мобильный:
|
||
Android/iOS).
|
||
- **VPN-движок**: приватный крейт `netrunner_client` (репозиторий
|
||
`netrunner-core`, отдельно от этого проекта) — подключается через UniFFI:
|
||
напрямую из Rust на десктопе, через сгенерированные Kotlin-биндинги на
|
||
Android.
|
||
|
||
## Сборка
|
||
|
||
Команды из [`Makefile`](Makefile):
|
||
|
||
```bash
|
||
make dev-linux # dev-сборка + запуск с cap_net_admin
|
||
make dev-android # gradle clean + tauri android dev
|
||
make build-windows # инсталлятор под Windows (NSIS/MSI, с wintun.dll)
|
||
make build-android-arm64
|
||
make install # adb install собранного APK
|
||
```
|
||
|
||
Фронтенд отдельно: `pnpm dev` / `pnpm build` (см. `package.json`).
|
||
|
||
## Важные нюансы
|
||
|
||
- **Windows**: `wintun.dll` бандлится в инсталлятор через
|
||
`src-tauri/tauri.windows.conf.json` (`bundle.resources`) — см.
|
||
[src-tauri/README.md](src-tauri/README.md#windows-tun-драйвер).
|
||
- **Android**: UniFFI-биндинги и `.so`-библиотеки VPN-движка — это
|
||
**гитигнорённые build-артефакты**, которые нужно вручную регенерировать при
|
||
изменении UDL в `netrunner-core`. Забытая регенерация — частая причина
|
||
падения мобильной сборки. Подробности:
|
||
[src-tauri/src/plugins/vpn-plugin/android/README.md](src-tauri/src/plugins/vpn-plugin/android/README.md#обязательно-прочитать-до-правок).
|
||
- **Список серверов** пока захардкожен на фронте (см.
|
||
[src/store/README.md](src/store/README.md)), потому что бэкенд `/api/v1/nodes`
|
||
ещё не отдаёт поле `sni` (decoy-хост) — логика подключения к реальному API
|
||
уже написана и просто выключена флагом.
|