Skip to content

youtubediscord/RKNnoVPN

Repository files navigation

RKNnoVPN (Роскомнадзор, Нет ВПН!)

image

Прозрачный прокси для rooted Android без VpnService, TUN-интерфейса и VPN-иконки.

Проект состоит из Magisk/KernelSU/APatch-модуля и Android-приложения-контроллера. Трафик выбранных приложений перехватывается на уровне ядра через iptables TPROXY и отправляется в sing-box.

Устойчивый к методам обнаружения типа YourVPNDead.

Что это даёт

  • Нет Android VPN API: приложения не видят TRANSPORT_VPN.
  • Нет tun0 и системной VPN-иконки.
  • APK владеет профилем, подписками и update-check/download. Root/module опционален и нужен только для runtime-действий: apply/start/stop/reset/logs.
  • APK запрашивает package visibility для локального выбора приложений: список установленных приложений читается через Android PackageManager.
  • Можно проксировать только выбранные приложения, оставляя остальные напрямую.
  • Можно включить раздачу трафика клиентов хотспота через RKNnoVPN.
  • Сохранённые серверы рендерятся в sing-box как отдельные outbounds.
  • Над несколькими серверами используется urltest, чтобы sing-box выбирал рабочий и быстрый outbound.
  • Поддерживается arm64-v8a и armeabi-v7a.

Как это работает

Приложение Android
  -> iptables mangle / TPROXY
  -> sing-box tproxy inbound
  -> urltest / outbound
  -> прокси-сервер

APK работает local-first. Он хранит профиль и подписки в app-private storage, рендерит runtime config и передаёт его root CLI rknnovpn-runtime через su. Module применяет уже отрендеренную runtime-конфигурацию, запускает core, применяет iptables/DNS/routing и возвращает минимальные status/logs/version.

Компоненты

Компонент Назначение
Magisk-модуль Скрипты установки, boot service, SELinux policy, rknnovpn-runtime, sing-box
rknnovpn-runtime root CLI: exact-match version gate, apply rendered config, start/stop/reset, logs/status
Android APK Kotlin/Compose панель управления; owns profile, subscriptions, update check/download, UI state
sing-box transport core: tproxy inbound, outbounds, urltest, Clash API для delay-тестов

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

  1. Скачайте свежий релиз:

    • rknnovpn-vX.X.X-module.zip
    • rknnovpn-vX.X.X-panel.apk
  2. Прошейте module ZIP через Magisk Manager / KernelSU Manager / APatch.

  3. Перезагрузите устройство.

  4. Установите APK.

  5. Добавьте сервер на вкладке Серверы:

    • вставкой ссылки;
    • QR-кодом;
    • подпиской.
  6. На вкладке Приложения выберите приложения для проксирования.

  7. Нажмите Подключить.

Поддерживаемые протоколы

Протокол Статус
VLESS + Reality основной сценарий
VLESS + TLS поддерживается
Trojan поддерживается
VMess поддерживается
Shadowsocks / Shadowsocks 2022 поддерживается
SOCKS4 / SOCKS5 upstream поддерживается
Hysteria2 поддерживается через sing-box
TUIC v5 поддерживается через sing-box
WireGuard поддерживается как sing-box outbound без kernel WG-интерфейса
AmneziaWG отдельный будущий слой, не равен обычному WireGuard

Форматы импорта

Поддерживаются:

  • vless://
  • vmess://
  • trojan://
  • ss://
  • socks://, socks4://, socks4a://, socks5://
  • hysteria2://, hy2://
  • tuic://
  • vpn:// Amnezia
  • WireGuard .conf и encoded WireGuard URI
  • подписки с base64/plain URI list
  • QR-коды

Пока не реализовано:

  • Clash YAML import;
  • sing-box JSON import;
  • v2rayNG backup import.

Выбор серверов и тесты

Все сохранённые nodes попадают в sing-box как outbounds. Если серверов несколько, runtime renderer создаёт urltest outbound с тегом proxy, а маршрут по умолчанию указывает на него.

В UI есть Проверить все:

  • TCP connect показывает время соединения до адреса сервера.
  • URL delay показывает задержку реального запроса через конкретный outbound, если core уже запущен.
  • Если URL-проба отдаёт тело ответа, UI также показывает измеренную скорость ответа и умеет сортировать nodes по скорости.

Для белых списков важно смотреть не только TCP ping. Низкий ping не гарантирует нормальную скорость: при ограничении со стороны ТСПУ пакет может отвечать быстро, но реальный HTTP/HTTPS response будет идти секунды. Поэтому главная метрика для авто-выбора - URL response / delay, а ping используется как вспомогательная диагностика.

Правила маршрутизации

В настройках есть режим Правила и редактор доменов/IP:

  • Домены напрямую и IP/CIDR напрямую обходят прокси;
  • Домены через прокси и IP/CIDR через прокси принудительно идут через RKNnoVPN;
  • Заблокированные домены и Заблокированные IP/CIDR отклоняются.

Правила задаются по одному значению в строке. Для доменов используйте обычные имена вроде example.com, для IP - адреса или CIDR-сети вроде 203.0.113.10 или 203.0.113.0/24.

Отдельная защита Российские сайты напрямую добавляет прямой маршрут для российских IP и доменов .ru, .su, .рф. Её лучше оставлять включённой: если выключить защиту, российские сервисы могут увидеть VPN-трафик и IP прокси-сервера.

Режимы приложений

Текущая модель:

  • общий urltest/proxy outbound по умолчанию;
  • группы серверов: у node можно задать Группа, а несколько nodes в одной группе рендерятся как отдельный group urltest/selector outbound;
  • на вкладке Приложения можно назначить приложению конкретную группу серверов;
  • список приложений через прокси или список приложений в обход;
  • правила доменов/IP для прямого маршрута, принудительного прокси и блокировки;
  • быстрые кнопки Выбрать все и Снять весь выбор.

Ограничения текущей модели:

  • привязка идёт к группе node, а не к произвольному raw outbound tag;
  • для отдельного urltest под браузеры/мессенджеры нужно разнести nodes по соответствующим группам вручную.

Сборка

Требования:

  • Go 1.22+ для root runtime helpers;
  • Go 1.24.x для сборки актуального sing-box;
  • JDK 17 + Android SDK для APK;
  • Linux/macOS для кросс-сборки.

Команды:

make runtime   # rknnovpn-runtime для arm64 + armeabi-v7a
make singbox   # статическая сборка sing-box для arm64 + armv7
make module    # Magisk module ZIP
make apk       # debug APK
make all

По умолчанию make singbox пытается взять последний релиз sing-box через GitHub CLI. Можно зафиксировать версию:

make singbox SINGBOX_VERSION=1.14.0-alpha.16

CI/CD

Тег v* запускает GitHub Actions:

git tag v1.4.2
git push origin v1.4.2

Workflow:

  • собирает rknnovpn-runtime для arm64 и armv7;
  • резолвит актуальный release sing-box;
  • собирает sing-box статически;
  • собирает module ZIP;
  • собирает APK;
  • создаёт GitHub Release;
  • обновляет update.json.

Диагностика

Проверка состояния:

su -c '/data/adb/modules/rknnovpn/bin/rknnovpn-runtime status'

Запуск:

su -c '/data/adb/modules/rknnovpn/bin/rknnovpn-runtime start'

Логи core:

su -c 'cat /data/adb/modules/rknnovpn/logs/sing-box.log'

Логи runtime:

su -c '/data/adb/modules/rknnovpn/bin/rknnovpn-runtime logs --lines 100'

Если sing-box упал до открытия порта 10853, ошибка в приложении должна содержать хвост sing-box.log.

Что пока не готово

  • AmneziaWG runtime.
  • Отдельный полный speed-throttle probe для диагностики второго типа белых списков; базовая скорость уже измеряется, если URL-проба отдаёт тело ответа.

Лицензия

MIT

Благодарности

About

Незаметный прокси для сокрытия от Роскомнадзора и шпионских российских приложений. Без ВПН, без TUN.

Topics

Resources

License

Stars

Watchers

Forks

Contributors