d1bb4661d14ccff03cbcbe2d566a0f8cd545494a
Build & Push Proxy Image / build (push) Successful in 4m51s
Dockerfile просто копировал бинарник, собранный ОТДЕЛЬНЫМ шагом прямо на CI-раннере (ubuntu-24.04, glibc 2.39), в рантайм-образ debian:bookworm-slim (glibc 2.36) — любой запуск падал: "GLIBC_2.38 not found". Затронуто абсолютно любое развёртывание этого образа, не конкретная нода. Теперь Dockerfile компилирует Rust ВНУТРИ себя, на том же bookworm, что и рантайм (multi-stage + cargo-chef, тот же паттерн, что в netrunner-backend/Dockerfile) — версии glibc гарантированно совпадают независимо от ОС раннера. build.yml больше не собирает бинарник отдельным шагом, только docker build; добавлен registry-кэш слоёв (type=gha требует GitHub Actions Cache, у self-hosted act_runner его нет — см. аналогичный фикс в netrunner-backend этой сессии). Проверено локально: docker build проходит чисто, ./netrunner-proxy --help запускается без ошибок glibc (до фикса — падал сразу).
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
Деплой сервера
Процесс развертывания серверной части полностью автоматизирован.
- Укажите IP-адрес вашего сервера в
Makefile(переменнаяSERVER_IP). - Выполните первоначальную настройку удаленной машины (установка зависимостей):
make setup-server - Соберите релизный бинарник:
make build-server - Отправьте бинарник на сервер и перезапустите 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-подключение к удаленному серверу. |
Languages
Rust
98.3%
Makefile
1%
Shell
0.3%
Dockerfile
0.2%
JavaScript
0.2%