RKNnoVPN — прозрачный прокси для root-Android без VpnService и VPN-иконки: sing-box, TPROXY, Magisk, KernelSU и выбор приложений.
  • Kotlin 57.5%
  • Go 28.8%
  • Shell 13%
  • Makefile 0.6%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-04-23 18:23:03 +03:00
.github/workflows keep wireguard in sing-box build 2026-04-22 18:22:00 +03:00
app release: v1.6.1 2026-04-23 18:23:03 +03:00
daemon release: v1.6.1 2026-04-23 18:23:03 +03:00
module release: v1.6.1 2026-04-23 18:23:03 +03:00
.codex вап 2026-04-22 18:22:37 +03:00
.gitignore Initial commit: PrivStack v1.0.0 2026-04-11 15:32:59 +03:00
CHANGELOG.md release: v1.6.1 2026-04-23 18:23:03 +03:00
LICENSE Fix README: rename to RKNnoVPN, add LICENSE, mark unimplemented formats 2026-04-11 15:42:30 +03:00
Makefile keep wireguard in sing-box build 2026-04-22 18:22:00 +03:00
plan.md docs: rewrite documentation in Russian 2026-04-22 18:45:59 +03:00
PRIVSTACK_ARCHITECTURE.md 1.6.1 2026-04-23 18:18:19 +03:00
README.md 1.6.1 2026-04-23 18:18:19 +03:00
update.json release: v1.6.1 2026-04-23 18:23:03 +03:00

RKNnoVPN / PrivStack

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

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

Что это даёт

  • Нет Android VPN API: приложения не видят TRANSPORT_VPN.
  • Нет tun0 и системной VPN-иконки.
  • В v2 APK получил INTERNET только для control-plane операций: подписки, update-check/download и диагностики, не зависящих от rooted data-plane.
  • Можно проксировать только выбранные приложения, оставляя остальные напрямую.
  • Сохранённые серверы рендерятся в sing-box как отдельные outbounds.
  • Над несколькими серверами используется urltest, чтобы sing-box выбирал рабочий и быстрый outbound.
  • Поддерживается arm64-v8a и armeabi-v7a.

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

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

APK вызывает privctl через su. privctl общается с root-демоном privd по Unix socket. privd хранит конфигурацию, рендерит sing-box config, запускает core, применяет iptables и выполняет health checks.

Компоненты

Компонент Назначение
Magisk-модуль Скрипты установки, boot service, SELinux policy, privd, privctl, sing-box
privd root-демон: config, IPC, запуск core, iptables, DNS, health, update
privctl CLI-клиент для ручной диагностики и IPC-команд
Android APK Kotlin/Compose панель управления; в v2 держит только control-plane сеть
sing-box transport core: tproxy inbound, outbounds, urltest, Clash API для delay-тестов

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

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

    • privstack-vX.X.X-module.zip
    • privstack-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 собирается с with_wireguard
AmneziaWG отдельный будущий слой, не равен обычному WireGuard

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

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

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

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

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

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

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

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

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

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

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

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

  • один общий urltest/proxy outbound для выбранных приложений;
  • список приложений через прокси или список приложений в обход;
  • быстрые кнопки Выбрать все и Снять весь выбор.

Планируемая модель:

  • несколько групп outbounds;
  • привязка package -> outbound/tag;
  • разные приложения через разные серверы или группы;
  • отдельные urltest группы для браузеров, мессенджеров и т.п.

Сборка

Требования:

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

Команды:

make daemon    # privd + privctl для 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:

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

Диагностика

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

su -c '/data/adb/privstack/bin/privctl status'

Запуск:

su -c '/data/adb/privstack/bin/privctl start'

Логи core:

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

Логи daemon:

su -c '/data/adb/privstack/bin/privctl logs {"lines":100}'

Проверка всех nodes:

su -c '/data/adb/privstack/bin/privctl node-test'

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

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

  • VPN sharing / раздача как в NetProxy.
  • Per-app multi-proxy с привязкой каждого приложения к отдельному outbound.
  • WireGuard import и renderer.
  • AmneziaWG runtime.
  • Полный speed-throttle probe для диагностики второго типа белых списков.

Лицензия

MIT

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