MASQUE — экспериментальная поддержка, обозначенная α в интерфейсе. Реализация
влита в main в PR #70;
опубликованные APK v1.0.3 поддерживают только HTTPS/SSH. Нужна сборка, включающая
эту реализацию. APK из PR предназначены для тестирования; см. установку.
Клиент использует TCP CONNECT и CONNECT-UDP в общей HTTP/3-сессии с Basic Auth.
Для GOST 3.3.0 нужны listener http3 и handler masque; h3 — другой транспорт.
Включите QUIC datagrams и откройте выбранный UDP-порт.
Минимальная конфигурация сервера с действительным сертификатом:
{
"services": [{
"name": "masque",
"addr": ":443",
"handler": {
"type": "masque",
"auth": {"username": "USER", "password": "PASSWORD"}
},
"listener": {
"type": "http3",
"metadata": {"enableDatagrams": true},
"tls": {
"certFile": "/path/to/fullchain.pem",
"keyFile": "/path/to/privkey.pem"
}
}
}]
}Замените реквизиты и пути сертификата, ограничьте доступ к файлу и запустите
gost -C gost.json. Сертификат должен соответствовать имени прокси и иметь цепочку,
которой доверяет Android. Продление сертификата и перезапуск GOST настраиваются отдельно.
В MegaProxy выберите MASQUE α (HTTP/3), укажите имя сервера, UDP-порт (по умолчанию 443) и реквизиты. Оставьте проверку сертификата включённой. Запустите Тест, затем Подключить. Тест должен показать выходной IP и страну сервера. При таймауте QUIC проверьте доступность UDP, облачный и серверный firewall, а также VPN на компьютере с эмулятором: доступность TCP/443 не доказывает доступность UDP.
Для MASQUE действуют глобальная/по приложениям маршрутизация, обход локальной сети,
учёт трафика, DoH/fallback, диагностика, переподключение/failover и шифрование реквизитов.
JSON использует proxy.type: "MASQUE"; ProxyList —
masque://user:password@host:port. Jump поддерживается только для HTTPS/SSH.
Запросы UDP и TCP на порт 53, поступающие в VPN, преобразуются в DoH, включая повторные и конвейерные TCP-запросы. Private DNS и Secure DNS браузера следуют обычной маршрутизации и не преобразуются в запросы к выбранному DoH-провайдеру.
- uQUIC использует пресеты Chrome 146 или Firefox 116 независимо от TCP-пресетов uTLS. Randomized использует Chrome со случайным порядком расширений/параметров. Ручному JA3 нужны шифры TLS 1.3 и расширения 16, 43, 51, 57; содержимое QUIC-параметров берётся из Chrome. Это приближение TLS/QUIC браузера; HTTP/3 SETTINGS и управление перегрузкой остаются библиотечными.
- В режиме ручного JA3 у каждого MASQUE-профиля задаётся отдельный QUIC JA3; HTTPS использует общий JA3 из настроек. Они независимы при смешанном failover и сохраняются в JSON. ProxyList не переносит настройки отпечатка.
- UDP должен помещаться в согласованный QUIC datagram и MTU пути. В GOST 3.3.0 нет надёжного capsule fallback для слишком больших пакетов. Лимит Firefox в 1200 байт не вмещает внутренний QUIC Initial в 1200 байт вместе с обрамлением; используйте Chrome. Слишком большие исходящие пакеты отбрасываются целиком, с одним событием на UDP-поток; последующие малые пакеты продолжают проходить. Исходящий размер также ограничен объявленным лимитом приёма, чтобы GOST не закрывал поток на слишком большом echo-ответе.
- Проверка API 35 от 2026-10-11 выявила потерю последних TCP-данных при немедленном write half-close с GOST 3.3.0: его relay обрабатывает EOF раньше байтов, возвращённых тем же чтением. Отказ воспроизводится также прямым native-клиентом без Android TUN. Это ограничение сервера; задержка перед FIN не является исправлением. См. отчёт проверки.
- GOST 3.3.0 отклоняет IPv6 literal targets в CONNECT-UDP. TCP IPv6 и локальный UDP-bypass следуют настройкам IPv6/маршрутизации профиля. По умолчанию используется только IPv4.
- Карточка показывает QUIC RTT и исходящие пакеты, объявленные потерянными за пять минут.
Метрики TCP ядра для UDP-сокета недоступны. Счётчики
и скорость учитывают полезные данные TCP/UDP. Журнал сессии содержит
multiplexed=trueи выбранный отпечаток; это не доказательство точного полного отпечатка браузера.
События сессии содержат версию TLS/шифр, ALPN, версию QUIC, согласованные возможности, отпечаток и локальные номера сессии/соединения для сопоставления. Отказ CONNECT содержит HTTP-статус и причину авторизации/отказа. GOAWAY и отбрасывание больших UDP-пакетов отмечаются отдельно; обычный Stop не создаёт ложных ошибок UDP/DPI. Текст ошибок от сервера, реквизиты, адреса назначений, данные владельцев сертификатов и сетевые connection IDs не записываются. В crash-логах остаются классы исключений и stack frames, без исходных сообщений исключений и произвольных имён потоков. Библиотечные логи потоков в обход фильтра отключены. Повторяющиеся события connection/DoH/SSH transport/UDP ограничены в файле до 20 на категорию за 10 секунд; следующее записанное событие содержит число подавленных сообщений. До этого ограничения каждое событие поступает восстановлению/UI. Сессии, жизненный цикл и crash-события не ограничиваются по частоте; действуют ротация и ограниченная очередь записи.
Таймаут/сброс отдельного назначения при исправной QUIC-сессии записывается с
scope=target dpi_hint=none: это не перезапускает весь VPN и не запускает failover.
Таймеры приложения/half-close имеют scope=local_deadline. Ошибки handshake и
транспорта прокси сохраняют диагностику восстановления. TCP half-close передаёт
FIN через CONNECT, оставляя направление ответа открытым.
В HTTPS-профиле можно включить «Предпочитать HTTP/3 α», сохранив тип HTTPS. Приложение пробует MASQUE на том же хосте и номере UDP-порта в течение трёх секунд. Для отката сервер должен также предоставлять HTTPS по TCP. Если QUIC недоступен, отпечаток или настройки сервера не поддерживаются, выбирается существующий HTTPS-транспорт (HTTP/2 или HTTP/1.1). Главный экран и кнопка «Тест» показывают предупреждение: при откате обычный UDP блокируется, а перехваченный DNS продолжает работать через DoH.
Ошибки сертификата, авторизации, защиты сокета и неизвестные ошибки не приводят
к откату. После выбора HTTP/3 ошибки остаются на этом транспорте; активные
соединения не переносятся. Выбор повторяется при новой VPN-сессии или тесте.
Настройка выключена по умолчанию и игнорируется для типов без HTTPS.
Отдельный MASQUE-профиль по-прежнему требует HTTP/3 без отката. Глобальный
отпечаток браузера используется в пределах поддержки QUIC; неподдерживаемые
Edge/custom JA3 используют HTTPS. JSON сохраняет
profiles[].proxy.preferHttp3; обычные ссылки на прокси эту настройку не содержат.
Для HTTPS с Jump поддержка MASQUE нужна на обоих узлах. Имя конечного прокси разрешается удалённо через CONNECT-UDP. При недоступности любого узла вся цепочка использует HTTPS/TCP через Jump. Учётные данные и проверка сертификата сохраняются для каждого узла. Лимит пакетов вложенного QUIC рассчитывается по проверенной ёмкости внешнего пути в обоих направлениях с учётом обрамления QUIC и CONNECT-UDP. Перед выбором транспорта проверяется также MTU ответа конечного узла с учётом запаса на завершение PMTU-проверки и консервативного DATAGRAM-лимита сервера. Дополнительный OPTIONS round trip подтверждает доставку ACK пробных пакетов. Одна запись MTU на сессию содержит только числовые лимиты. Padding/receive-MTU адаптируются с сохранением TLS-отпечатка. Firefox с Jump откатывается из-за недостаточного DATAGRAM-лимита.
Ответы CONNECT-UDP 404/405/501 и отсутствие заголовка Capsule-Protocol выбирают HTTPS; ошибки авторизации, запреты доступа и неожиданные ошибки сервера остаются фатальными. Диагностика фатального отказа указывает узел и этап без текста ответа сервера и приватных адресов. Регрессии проверяют HTTP/3 сайта и UDP-пакеты 1280/1350 байт, асимметричный MTU, потери, GOAWAY и отмену handshake конечного узла.