# Netrunner Core Netrunner Core — это высокопроизводительный сетевой комплекс, реализующий TLS-инкапсуляцию с мультиплексированием потоков для обхода сетевых ограничений. Система состоит из легковесного клиента (с поддержкой Android и Linux) и серверной части. ## Архитектура Проект построен на следующих принципах: - **Прозрачный перехват трафика:** Использование TUN-интерфейса и userspace сетевого стека (`smoltcp`) совместно с `tokio` для захвата и обработки TCP/UDP пакетов на сетевом уровне. - **Мультиплексирование потоков:** Передача независимых кадров (Frames) внутри единого зашифрованного TLS-туннеля. - **TLS-маскировка:** Имитация рукопожатия TLS 1.3 (ClientHello/ServerHello) для скрытия факта проксирования от систем DPI (Deep Packet Inspection). - **Безопасность:** Кадры защищены надежным AEAD-шифрованием (ChaCha20-Poly1305) с контролем целостности через `auth_tag`. - **Кроссплатформенность:** Ядро написано на Rust, компилируется под Linux и упаковывается через JNI/UniFFI для нативной интеграции в Android-приложения (Kotlin). ## Основные компоненты Архитектура протокола в целом — в [ARCH.md](ARCH.md). У каждого логического блока есть свой `README.MD` с картой файлов и ментальной моделью, а детали — в inline-rustdoc (`cargo doc --open`). - **`core/`** — ядро (платформо-независимая логика). Блоки: - [`core/src/crypto/`](core/src/crypto/README.MD) — обмен ключами, HKDF, AEAD, auth-теги. - [`core/src/nrxp/`](core/src/nrxp/README.MD) — протокол NRXP: формат кадра, кодек, TLS-мост. - [`core/src/tlseng/`](core/src/tlseng/README.MD) — TLS-маскировка (JA3/JA4 fingerprinting). - [`core/src/net/`](core/src/net/README.MD) — туннель, мультиплексор, движок, мосты, диагностика. - [`core/src/rawcast/`](core/src/rawcast/README.MD) — локальный протокол сокет ⇄ кадр. - **[`client/`](client/README.MD)** — VPN-клиент: [`net/`](client/src/net/README.MD) (userspace-стек) + [`tun/`](client/src/tun/README.MD) (TUN/маршрутизация) + FFI. - **[`server/`](server/README.MD)** — серверная часть, принимающая замаскированные TLS-соединения и проксирующая трафик. - **[`tools/`](tools/README.MD)** — логгер `netrunner-logger` и `bindgen` для Kotlin/Swift-биндингов. ## Быстрый старт ### Требования - **Rust** (latest stable) - **cargo-ndk** (для кросс-компиляции под Android) - **Linux:** Права `root` или настроенные `capabilities` (`cap_net_admin`, `cap_net_raw`) для создания виртуального сетевого интерфейса. ### Локальная разработка Для запуска и отладки на локальной машине используйте команды: ```bash # Запуск сервера локально (биндится на 0.0.0.0:8443) make debug-server # Сборка клиента, выдача необходимых cap-прав и запуск make debug-client ``` ## Деплой сервера Процесс развертывания серверной части полностью автоматизирован. 1. Укажите IP-адрес вашего сервера в `Makefile` (переменная `SERVER_IP`). 2. Выполните первоначальную настройку удаленной машины (установка зависимостей): ```bash make setup-server ``` 3. Соберите релизный бинарник: ```bash make build-server ``` 4. Отправьте бинарник на сервер и перезапустите systemd-сервис: ```bash make deploy-server ``` ## Команды Makefile Для удобства управления жизненным циклом проекта предусмотрены следующие цели: | Команда | Описание | | :------------------- | :------------------------------------------------------------------------------------------------------ | | `make debug-client` | Сборка клиента в режиме отладки, установка прав (`setcap`) и запуск. | | `make debug-server` | Сборка и локальный запуск сервера на порту 8443. | | `make build-android` | Кросс-компиляция `.so` библиотек для Android (arm64, armv7, x86, x86_64) и генерация Kotlin-биндингов. | | `make build-server` | Сборка релизной версии сервера (`--release`). | | `make setup-server` | Установка необходимых пакетов (`build-essential`, `libssl-dev`) на удаленном сервере. | | `make deploy-server` | Остановка текущего сервиса, загрузка нового бинарника и конфигурации, старт через `systemctl`. | | `make logs` | Подключение к серверу и просмотр логов сервиса `netrunner-server` в реальном времени (`journalctl -f`). | | `make ssh` | Быстрое SSH-подключение к удаленному серверу. |