Приложение для Android с активной адаптацией к DPI-фильтрации. Бесплатное, без подписок, рекламы и телеметрии.
Видео о работе приложения: https://youtu.be/0oqZ0_x2Dnw
Работает сразу после установки. Ничего искать, регистрировать и оплачивать не нужно: рабочие узлы уже встроены, и приложение подключается само. Поиск ключей, подписок и платного доступа не требуется ни на первом запуске, ни потом.
Если же свои конфигурации есть — их можно добавить и пользоваться ими вместо встроенных.
- Встроенные узлы — Cloudflare WARP поверх AmneziaWG, MASQUE поверх QUIC и серверы Opera VPN в Европе и Северной Америке. Переход между ними при отказе выполняется без участия пользователя.
- Импорт своих конфигураций — профили AmneziaWG и ссылки
vless://со всеми современными транспортами, включая XHTTP, WebSocket, gRPC и HTTP Upgrade. Переключение между встроенными и импортированными выполняется вручную: выбор источника остаётся за пользователем. - Подписки — списком ссылок, в base64, с метаданными в заголовках.
- Раздача на другие устройства без прав суперпользователя: телефон работает шлюзом для ноутбука, телевизора, игровой приставки или другого телефона на Android либо iOS.
- Раздельное туннелирование — правила для отдельных приложений.
- Настройка DNS, включая DoH и DoT, с отдельными правилами для приложений.
- Лицензия WARP+ — если ключ есть, его можно указать в настройках: он привязывается к устройству и открывает MASQUE, недоступный бесплатным учётным записям Cloudflare.
VLESS с REALITY доступен только через импорт: встроенных узлов этого протокола в приложении нет.
Данные не покидают устройство: телеметрия не собирается, статистика никуда не передаётся, адреса в журнале обезличиваются перед сохранением.
Android 7.0 и новее. Поддерживаются телефоны, планшеты и приставки Android TV — на последних работает навигация пультом.
Ограничение доступа редко выглядит как отсутствие связи. Гораздо чаще перестаёт работать что-то одно, а остальное продолжает функционировать — и клиент, рассчитанный на единственный протокол, в такой сети замирает без объяснения причин.
Показательный случай, зафиксированный при разработке. Оборудование оператора
разрывает обращения к управляющему серверу Cloudflare по имени узла в
приветственном сообщении TLS. Тот же самый адрес с именем www.cloudflare.com
отвечает кодом 200, а с именем api.cloudflareclient.com соединение
обрывается; при этом разрешение имён работает корректно, соединение TCP
устанавливается, обычный доступ в сеть сохраняется. Клиент, умеющий только WARP,
в такой сети не зарегистрируется никогда.
Отсюда устройство приложения: не один протокол с попытками его починить, а несколько независимых путей, между которыми выполняется переход.
Порядок перебора среди встроенных узлов. Сначала Cloudflare WARP поверх AmneziaWG. Если он недоступен, следуют серверы Opera VPN в Европе и Северной Америке. Любой из способов можно выбрать и вручную в списке регионов.
Импортированные конфигурации в этот перебор не подмешиваются: источник — встроенные узлы или свои — выбирает пользователь.
Проверка работоспособности, а не факта подключения. Установленное соединение ещё ничего не гарантирует: рукопожатие может пройти, а полезные данные — фильтроваться. Поэтому состояние туннеля подтверждается живой пробой. Накопленные счётчики трафика для этого непригодны, и это выяснилось опытным путём: они описывают всё время существования туннеля, а после смены сети остаются прежними, из-за чего неработающее соединение выглядело исправным.
Удержание при смене сети. Переход между Wi-Fi и мобильной связью, потеря сигнала, включение точки доступа — всё это приводит к пересозданию подложной сети. Туннель переносится на новую сеть, а если перенос не удался, выполняется повторное подключение.
Уважение к импортированным настройкам. Профиль AmneziaWG применяется в том виде, в каком его выдал поставщик услуги: ключи, адреса, параметры обфускации, MTU. Собственные варианты приложения к нему не подмешиваются — даже если подключиться не удалось. Пользователь, добавивший профиль, вправе рассчитывать, что работает именно он.
Дайте приложению около минуты: при первом запуске выполняется перебор параметров.
Затем проверьте по порядку:
- Другое приложение VPN. Android допускает только одно активное подключение VPN. Отключите остальные — они вытесняют друг друга.
- Ограничения фоновой работы. На прошивках Xiaomi, Huawei, Honor, OPPO, vivo и Tecno система выгружает приложения из памяти. В настройках Nova есть пункты автозапуска и работы в фоне — они открывают нужные системные экраны и отображаются только там, где такие экраны действительно существуют.
- Выбор региона. Если
AUTOне находит рабочий путь, попробуйтеMASQUEилиEU— перебор начнётся сразу с выбранного транспорта. - Импортированный профиль. Убедитесь, что в списке конфигураций выбран источник «импортированные»: при выборе «встроенные» используются собственные узлы приложения, а добавленный профиль остаётся в стороне.
Если ничего не помогло — напишите в группу, разберёмся вместе 😉
Ниже описано, как приложение устроено внутри. Для повседневной работы эти сведения не требуются — раздел адресован тем, кому интересно, что происходит «под капотом».
Поддержка VLESS с REALITY построена на форке Xray-core.
Прямое объединение с существующим ядром оказалось невозможным: Xray требует
qpack версии 0.6.0, что нарушает работу quic-go 0.55.0, на котором держится
MASQUE. Кроме того, две библиотеки, собранные средствами gomobile, не уживаются в
одном пакете приложения — каждая приносит собственную libgojni.so, и символы
конфликтуют.
Поэтому ядро подключено как обычная библиотека c-shared с тонким слоем JNI. У неё собственный граф зависимостей, и оба препятствия исчезают.
Публичные агрегаторы конфигураций достигают значительных размеров, и построчный разбор такого списка на телефоне заканчивается не задержкой, а аварийным завершением по нехватке памяти.
Разбор выполнен потоковым: конфигурации передаются в обработчик по мере чтения, повторы отсеиваются по отпечаткам, а чтение прекращается при достижении предела — тело подписки не загружается целиком.
Смешанные подписки, где рядом с VLESS размещены другие протоколы, разбираются корректно: посторонние ссылки учитываются отдельно от повреждённых строк, чтобы отчёт об импорте не выглядел перечнем ошибок.
Прозрачно направить трафик подключённых устройств в туннель без прав
суперпользователя невозможно. Причина в устройстве маршрутизации Android: правила
для приложений содержат условие iif lo — «только для трафика, порождённого на
этом устройстве». Пакет, пересылаемый от клиента точки доступа, приходит с
интерфейса раздачи и не совпадает ни с одним из них. Изменение правил требует
прав суперпользователя.
Вместо этого телефон работает шлюзом: HTTP, HTTPS CONNECT и SOCKS5 на адресе раздачи. Исходящие соединения шлюза — это соединения самого приложения, поэтому они проходят через туннель на общих основаниях.
Интерфейс раздачи определяется по отсутствию признака выхода в сеть у соответствующего сетевого объекта: сторона раздачи никуда не ведёт, она лишь принимает клиентов. Проверка «известен ли интерфейс системе» здесь ошибочна — режим модема виден системе как обычная сеть. Диапазоны адресов не задаются заранее: у проверенных устройств они оказались нестандартными.
Учётные данные выдаются странице настройки только тем клиентам, которые пришли через раздачу самого телефона. Решает адрес, на котором принято соединение, — адрес отправителя поддаётся подмене.
Через шлюз проходит только TCP. Трафик UDP — сетевые игры, голосовая связь, QUIC — идёт в обход туннеля, как и запросы к серверу имён от приложений, не использующих прокси. Это сказано на странице настройки прямым текстом, без мелкого шрифта.
| Компонент | Назначение |
|---|---|
app/ |
Приложение: интерфейс, служба VPN, шлюз раздачи, разбор конфигураций |
nova-core/ |
Ядро на Go: AmneziaWG, MASQUE, подбор узлов, перехват DNS |
nova-xray/ |
Обёртка над Xray-core и слой JNI для VLESS с REALITY |
tools/xray-core/ |
Вендоренный форк Xray-core |
docs/ |
Архитектурные решения: что выбрано, на каком основании и что измерено |
Требуются JDK 17 и Android SDK. Библиотеки для собственного кода включены в репозиторий, пересобирать их для обычной сборки не требуется.
./gradlew assembleDebug
Пересборка ядра для VLESS выполняется отдельно:
cd nova-xray && ./build.sh
Полное описание, включая подпись выпуска и внешние зависимости, — в docs/BUILD.md.
Nova создана с участием проверенных временем решений: вместо повторного прохождения уже пройденного пути отобрано лучшее из существующего и объединено в единую систему вместе с ядром Nova. За каждым из этих проектов — годы работы их авторов.
- Xray-core, XTLS — VLESS, REALITY и современные транспорты.
- AmneziaWG, Amnezia — обфусцированный WireGuard.
- opera-proxy, Snawoot — благодаря этому решению доступны серверы Opera.
- opera-proxy-android-wrapper, SLY-F0X — адаптация для Android.
- tun2proxy — передача трафика туннельного интерфейса прокси-серверу.
- tg-ws-proxy, Flowseal — слой совместимости прозрачного ретранслятора Telegram.
Условия использования — GPL-3.0; лицензии сторонних компонентов — THIRD-PARTY.md.
- docs/BUILD.md — сборка из исходных текстов
- docs/vless-reality-plan.md — VLESS с REALITY: принятые решения и измерения
- docs/masque-connect-ip.md — MASQUE: разбор ступеней подключения и замеры
- docs/gateway-sharing.md — раздача на другие устройства
- docs/warp-api-sni-block.md — разбор ограничения по имени узла
Nova — программное средство управления сетевым трафиком на устройстве пользователя. Оно распределяет исходящие соединения между доступными маршрутами.
Программа:
- не размещает, не хранит и не распространяет какую-либо информацию с сайтов;
- не содержит собственных серверов: встроенные точки входа принадлежат общедоступным службам Cloudflare WARP и Opera VPN, к которым приложение подключается напрямую;
- не содержит подписок и перечней запрещённых ресурсов; свои конфигурации добавляет пользователь и отвечает за них сам;
- не собирает сведений о пользователе и не передаёт данные третьим лицам;
- не осуществляет доступ к чужим информационным системам и не нарушает их работу;
- не преодолевает средства защиты информации.
Исходные тексты опубликованы в исследовательских и образовательных целях, а также для правомерного применения: защиты трафика в общедоступных беспроводных сетях, доступа к собственным ресурсам и изучения сетевых протоколов. Проект не рекламирует и не популяризирует средства обхода ограничений доступа и не предназначен для получения информации, распространение которой запрещено.
Законодательство в отношении средств туннелирования различается по странам: где-то их применение ограничено, где-то запрещено. Ответственность за соблюдение применимых норм несёт пользователь. Устанавливая приложение, вы подтверждаете, что действуете в рамках законодательства своей юрисдикции.
Настоящий раздел не является юридической консультацией.
Nova распространяется на условиях GNU General Public License v3.0. Программу можно свободно использовать, изучать, изменять и распространять; производные работы должны оставаться под той же лицензией с открытыми исходными текстами. Сторонние компоненты сохраняют собственные условия распространения — перечень в THIRD-PARTY.md.
🙋 Группа в Телеграм: @nova_txt — вопросы, новости, поддержка.
☕ Отблагодарить — если Nova оказалась полезной. Это необязательный способ сказать "спасибо".