nineap 10d357b8ec Graceful shutdown (SIGTERM) + HTTP /health endpoint
Раньше shutdown_signal вообще не существовал — весь механизм graceful
shutdown в network.rs был мёртвым кодом, ничего его не вызывало. main.rs
теперь spawn'ит net.run() и последовательно ждёт сигнал, затем drain
(НЕ tokio::select! — select! убил бы run()-future на середине drain'а в
момент, когда shutdown-future резолвится). /health на 127.0.0.1 отдаёт
активные соединения — для systemd/LB health-check.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 16:37:25 +07:00
2026-07-02 15:15:10 +07:00
2026-03-16 15:45:39 +07:00

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. У каждого логического блока есть свой README.MD с картой файлов и ментальной моделью, а детали — в inline-rustdoc (cargo doc --open).

  • core/ — ядро (платформо-независимая логика). Блоки:
    • core/src/crypto/ — обмен ключами, HKDF, AEAD, auth-теги.
    • core/src/nrxp/ — протокол NRXP: формат кадра, кодек, TLS-мост.
    • core/src/tlseng/ — TLS-маскировка (JA3/JA4 fingerprinting).
    • core/src/net/ — туннель, мультиплексор, движок, мосты, диагностика.
    • core/src/rawcast/ — локальный протокол сокет ⇄ кадр.
  • client/ — VPN-клиент: net/ (userspace-стек) + tun/ (TUN/маршрутизация) + FFI.
  • server/ — серверная часть, принимающая замаскированные TLS-соединения и проксирующая трафик.
  • tools/ — логгер netrunner-logger и bindgen для Kotlin/Swift-биндингов.

Быстрый старт

Требования

  • Rust (latest stable)
  • cargo-ndk (для кросс-компиляции под Android)
  • Linux: Права root или настроенные capabilities (cap_net_admin, cap_net_raw) для создания виртуального сетевого интерфейса.

Локальная разработка

Для запуска и отладки на локальной машине используйте команды:

# Запуск сервера локально (биндится на 0.0.0.0:8443)
make debug-server

# Сборка клиента, выдача необходимых cap-прав и запуск
make debug-client

Деплой сервера

Процесс развертывания серверной части полностью автоматизирован.

  1. Укажите IP-адрес вашего сервера в Makefile (переменная SERVER_IP).
  2. Выполните первоначальную настройку удаленной машины (установка зависимостей):
    make setup-server
    
  3. Соберите релизный бинарник:
    make build-server
    
  4. Отправьте бинарник на сервер и перезапустите systemd-сервис:
    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-подключение к удаленному серверу.
S
Description
No description provided
Readme AGPL-3.0 1.9 MiB
Languages
Rust 98.4%
Makefile 1%
Shell 0.3%
JavaScript 0.2%