- Kotlin 57.5%
- Go 28.8%
- Shell 13%
- Makefile 0.6%
- Python 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github | ||
| app | ||
| daemon | ||
| googlepixel9proxl | ||
| module | ||
| tools/device_lab | ||
| .codex | ||
| .gitignore | ||
| CHANGELOG.md | ||
| LICENSE | ||
| Makefile | ||
| plan.md | ||
| PRIVSTACK_ARCHITECTURE.md | ||
| README.md | ||
| update.json | ||
RKNnoVPN / PrivStack
Прозрачный прокси для rooted Android без VpnService, TUN-интерфейса и VPN-иконки.
Проект состоит из Magisk/KernelSU/APatch-модуля и Android-приложения-контроллера. Трафик выбранных приложений перехватывается на уровне ядра через iptables TPROXY и отправляется в sing-box.
Что это даёт
- Нет Android VPN API: приложения не видят
TRANSPORT_VPN. - Нет
tun0и системной VPN-иконки. - В
v2APK получил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-тестов |
Быстрый старт
-
Скачайте свежий релиз:
privstack-vX.X.X-module.zipprivstack-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 собирается с 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
.confimport.
Выбор серверов и тесты
Все сохранённые 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/proxyoutbound для выбранных приложений; - список приложений через прокси или список приложений в обход;
- быстрые кнопки
Выбрать всеиСнять весь выбор.
Планируемая модель:
- несколько групп 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