Прозрачный прокси для 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-тестов |
-
Скачайте свежий релиз:
rknnovpn-vX.X.X-module.ziprknnovpn-vX.X.X-panel.apk
-
Прошейте module ZIP через Magisk Manager / KernelSU Manager / APatch.
-
Перезагрузите устройство.
-
Установите APK.
-
Добавьте сервер на вкладке
Серверы:- вставкой ссылки;
- QR-кодом;
- подпиской.
-
На вкладке
Приложениявыберите приложения для проксирования. -
Нажмите
Подключить.
| Протокол | Статус |
|---|---|
| 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/proxyoutbound по умолчанию; - группы серверов: у node можно задать
Группа, а несколько nodes в одной группе рендерятся как отдельный groupurltest/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Тег v* запускает GitHub Actions:
git tag v1.4.2
git push origin v1.4.2Workflow:
- собирает
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