Настройка маршрутизации в Happ: как разделить трафик между VPN и прямым подключением

Подробное руководство по настройке роутинга в приложении Happ: импорт профилей, правила Direct/Proxy/Block, работа с geofiles, ограничения JSON-подписок и ответы на частые вопросы.

Что такое маршрутизация в VPN и зачем она нужна

Маршрутизация — это механизм, который определяет, какой трафик должен идти через VPN-туннель, а какой — напрямую к интернет-провайдеру. В приложении Happ эта функция реализована через так называемые профили роутинга, которые содержат набор правил для доменов, IP-адресов и DNS-запросов.

Основная задача маршрутизации — оптимизировать работу сети. Например, если вы находитесь в России и используете VPN для доступа к заблокированным сервисам (YouTube, Instagram, Telegram), то нет необходимости гнать через туннель трафик к российским сайтам (.ru, .рф) — они и так доступны. Настроив правила, вы сможете ускорить загрузку локальных ресурсов и снизить нагрузку на VPN-сервер.

Кроме того, маршрутизация позволяет блокировать нежелательные домены и IP-адреса (например, рекламные трекеры), а также задавать приоритеты для различных типов соединений. В Happ это реализовано через гибкую систему профилей, которые можно импортировать, создавать вручную или получать от провайдера вместе с подпиской.

Как устроена архитектура маршрутизации в Happ

В Happ реализован переход от монолитного глобального управления к модульному подходу на уровне подписки. Каждая подписка (включая серверный список Server-List) теперь имеет собственный изолированный набор правил и профилей роутинга, который называется «Control Panel». Это означает, что изменения в одном профиле не влияют на другие подписки.

Важной особенностью является отложенный эффект изменений: любые модификации настроек (например, переключение маршрутизации или выбор другого профиля) сохраняются в базе данных, но применяются только после перезапуска соединения (Reconnect). Это сделано для того, чтобы избежать разрывов текущей сессии и обеспечить плавный переход.

При удалении подписки из приложения все связанные с ней профили роутинга и кэшированные геофайлы удаляются каскадно. Это предотвращает накопление устаревших данных и упрощает управление.

Ограничения для JSON-подписок: что нужно знать

Для JSON-конфигураций в Happ действует строгий режим ограничений, призванный предотвратить рассинхронизацию между настройками приложения и метаданными провайдера. Вот ключевые правила:

  • Лимит профилей: JSON-подписка может содержать строго 0 или 1 профиль роутинга. Нельзя добавить больше.
  • Только в комплекте: Профиль для JSON-конфигурации нельзя добавить вручную, скопировать из другой подписки или импортировать из буфера обмена. Он предоставляется исключительно вместе с самой подпиской от провайдера.
  • Запрет на изменение: Пользователь не может вручную управлять активностью такого профиля или изменять его параметры. Основной переключатель маршрутизации принудительно заблокирован в состоянии true (или false, если провайдер сам отправил команду на отключение). Изменение имени, URL-адресов и самих геофайлов (GeoSite/GeoIP) полностью заблокировано.

Также стоит отметить, что поля «Remote DNS» в интерфейсе переименованы в «Tunnel DNS» (Tunnel DNS Type, Tunnel IP, Tunnel Domain) и используются локально для настройки системного туннеля, но не внедряются в фактический JSON-файл провайдера.

Типы ссылок для добавления профилей роутинга

Happ поддерживает специальные ссылки для автоматического добавления и активации профилей роутинга. Эти ссылки можно создавать на сайте https://routing.happ.su или получать от провайдера. Существует два основных типа:

  • happ://routing/add/{base64} — добавляет профиль в список профилей. Первый добавленный профиль становится активным только после успешной загрузки геофайлов. Если профиль с таким же именем уже существует, он перезаписывается.
  • happ://routing/onadd/{base64} — добавляет и автоматически активирует профиль, даже если другие профили уже активны. Если профиль с таким же именем существует, он перезаписывается.

Также есть команда happ://routing/off, которая отключает функцию маршрутизации.

Ссылки могут передаваться двумя способами: как HTTP-заголовок (параметр routing) или как часть тела подписки (просто включив ссылку в содержимое). Это удобно для провайдеров, которые хотят автоматически настраивать роутинг у своих клиентов.

Структура профиля роутинга: JSON-параметры

Профиль роутинга в Happ представляет собой JSON-объект, который содержит набор правил. Рассмотрим основные параметры на примере типичного профиля:

  • Name — имя профиля, отображаемое в списке.
  • GlobalProxy — булево значение (true/false), определяющее, должен ли весь трафик идти через прокси по умолчанию.
  • RemoteDNSType и DomesticDNSType — тип DNS для удаленных (зарубежных) и локальных (отечественных) запросов. Может быть DoH (DNS over HTTPS) или DoU (DNS over UDP).
  • RemoteDNSDomain и RemoteDNSIP — адрес и IP удаленного DNS-сервера (например, Cloudflare).
  • DomesticDNSDomain и DomesticDNSIP — адрес и IP локального DNS-сервера (например, Google DNS).
  • Geoipurl и Geositeurl — URL-адреса для загрузки геофайлов GeoIP и GeoSite.
  • LastUpdated — Unix-временная метка последнего обновления геофайлов.
  • DnsHosts — JSON-объект, переопределяющий доменные имена на конкретные IP-адреса.
  • DirectSites, ProxySites, BlockSites — списки доменов (с поддержкой geosite: префиксов), которые должны идти напрямую, через прокси или быть заблокированы.
  • DirectIp, ProxyIp, BlockIp — аналогичные списки для IP-адресов и подсетей (с поддержкой geoip: префиксов).
  • DomainStrategy — стратегия обработки доменов: IPIfNonMatch (использовать IP, если домен не совпал с правилами) или AsIs (отправлять домен как есть).
  • FakeDNS — булево значение, включает ли FakeDNS для ускорения разрешения.
  • UseChunkFiles — булево значение, использовать ли урезанные версии геофайлов для экономии RAM.

Пример профиля для Китая включает DirectSites: ["geosite:cn", "geosite:geolocation-cn"] и DirectIp: ["geoip:cn"], что направляет китайские сайты напрямую, а остальной трафик через прокси.

Как импортировать профиль и включить маршрутизацию

Импорт профиля роутинга в Happ происходит автоматически при открытии специальной ссылки (например, happ://routing/onadd/...) или при получении подписки с встроенным профилем. Если профиль отсутствует, он добавляется и привязывается к подписке, а геофайлы загружаются в фоновом режиме.

После импорта необходимо активировать маршрутизацию в настройках приложения. Для этого:

  1. Откройте приложение Happ и нажмите на иконку шестерёнки (⚙️) в левом верхнем углу.
  2. Перейдите в раздел «Маршрутизация» (Routing Rules).
  3. Включите переключатель «Использовать роутинг» (Use routing) и убедитесь, что нужный профиль выбран (отмечен точкой).

После этого трафик будет распределяться согласно правилам профиля. Если вы хотите отключить маршрутизацию, просто выключите переключатель — весь трафик пойдёт через VPN без разделения.

Обновление профилей и обработка ошибок загрузки

Обновление профиля роутинга происходит, когда система получает команду на импорт профиля с уже существующим именем. Процесс обновления включает несколько этапов:

  1. Инициация: система получает новый профиль, объект переходит в состояние Update.
  2. Фоновая загрузка: начинается загрузка новых геофайлов по ссылкам из обновлённой версии. Важно, что во время загрузки текущее состояние остаётся неизменным — ядро продолжает работать со старыми правилами и геофайлами, обеспечивая непрерывную маршрутизацию.
  3. Атомарная замена: как только все геофайлы успешно загружены, старые заменяются новыми, а текущее состояние перезаписывается новыми правилами.
  4. Синхронизация состояния: после замены обновляется метаданные — новый набор правил становится default, состояние Update завершается.

Если загрузка геофайла не завершается в течение 3 минут, процесс останавливается, и рядом с проблемным профилем в списке появляется красный восклицательный знак. Ошибка автоматически исчезает после удаления проблемного профиля или если в списке больше нет проблемных профилей.

Также стоит учитывать, что геофайлы обновляются не чаще одного раза в неделю, даже если профиль обновляется каждый час. Это ограничение предотвращает излишнюю нагрузку на сеть.

Практические примеры: настройка для России и Китая

Рассмотрим два практических примера настройки маршрутизации в Happ.

Пример для России: Пользователь хочет, чтобы заблокированные сервисы (YouTube, Instagram, Telegram) шли через VPN, а российские сайты — напрямую. Для этого в профиле нужно указать DirectSites с гео-списками для РФ (например, geosite:ru), а ProxySites — с доменами заблокированных сервисов. Также можно настроить DirectIp для подсетей российских хостинг-провайдеров.

Пример для Китая: В профиле, приведённом в документации, DirectSites содержит geosite:cn и geosite:geolocation-cn, а DirectIp — geoip:cn. Это означает, что весь китайский трафик идёт напрямую, а зарубежный — через прокси. Дополнительно ProxySites включает geosite:cn (возможно, для сайтов, которые должны идти через прокси, несмотря на китайскую геолокацию), а ProxyIp — geoip:amazon (для обхода блокировок Amazon).

Такие профили можно создавать с помощью визуального редактора на сайте routing.happ.su, который автоматически генерирует JSON и ссылку для импорта.

Инструменты для создания профилей: routing.happ.su

Сайт routing.happ.su предоставляет удобный визуальный редактор для создания конфигураций роутинга Happ. Он позволяет:

  • Импортировать существующую Happ-ссылку (happ://routing/add/...) или Base64/JSON конфигурацию.
  • Настраивать параметры через визуальные поля: выбирать тип DNS (DoH или DoU), указывать DNS-хосты, добавлять списки Direct/Proxy/Block для сайтов и IP.
  • Включать опцию UseChunkFiles для создания урезанных версий геофайлов, что экономит оперативную память устройства.
  • Редактировать JSON напрямую с синхронизацией изменений.
  • Генерировать ссылку автоматически, с возможностью использовать happ://routing/onadd/ для автоматической активации профиля.

Этот инструмент полезен как для провайдеров VPN, которые хотят распространять готовые профили, так и для продвинутых пользователей, желающих тонко настроить маршрутизацию под свои нужды.

Частые проблемы и их решение

При использовании маршрутизации в Happ могут возникать типичные проблемы. Рассмотрим основные и способы их решения.

Проблема: профиль не активируется после импорта. Убедитесь, что геофайлы загружены полностью. Если рядом с профилем есть красный восклицательный знак, удалите профиль и попробуйте импортировать его снова. Также проверьте, не превышен ли лимит профилей для JSON-подписки (должен быть 0 или 1).

Проблема: изменения в настройках не применяются. Помните, что изменения вступают в силу только после перезапуска соединения (Reconnect). Переподключитесь к VPN.

Проблема: некоторые сайты не открываются через VPN. Проверьте правила профиля: возможно, домен попал в BlockSites или DirectSites, и трафик идёт напрямую. Отредактируйте профиль, добавив нужные домены в ProxySites.

Проблема: медленная загрузка геофайлов. Если загрузка не завершается за 3 минуты, она останавливается. Попробуйте использовать урезанные версии геофайлов (опция UseChunkFiles), чтобы уменьшить объём данных.

Если проблема не решается, обратитесь в поддержку провайдера или в официальные каналы Happ.

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

Можно ли создать несколько профилей роутинга для одной подписки в Happ?

Для обычных подписок (не JSON) можно создавать несколько профилей, но для JSON-подписок действует строгое ограничение: не более одного профиля. Это сделано для предотвращения рассинхронизации с метаданными провайдера. Если вам нужно несколько профилей, используйте подписки в других форматах или создавайте отдельные подписки.

Как быстро применить изменения в настройках маршрутизации?

Изменения в настройках маршрутизации (например, переключение профиля или включение/отключение роутинга) сохраняются в базе данных, но применяются только после перезапуска соединения. Чтобы применить изменения, выполните переподключение к VPN (Reconnect) в приложении Happ.

Что делать, если геофайлы не загружаются и появляется красный восклицательный знак?

Если загрузка геофайла не завершается в течение 3 минут, процесс останавливается, и рядом с профилем появляется красный восклицательный знак. Решение: удалите проблемный профиль и попробуйте импортировать его снова. Убедитесь, что у вас стабильное интернет-соединение. Также можно использовать урезанные версии геофайлов (UseChunkFiles) для уменьшения объёма загрузки.

Можно ли вручную изменить профиль роутинга, полученный от провайдера в JSON-подписке?

Нет, для JSON-подписок действует строгий режим: профиль нельзя добавить вручную, скопировать или изменить. Он предоставляется только вместе с подпиской, и его параметры (имя, URL, геофайлы) заблокированы. Провайдер может отправить команду на отключение, но пользователь не может самостоятельно редактировать профиль.

Как настроить маршрутизацию так, чтобы российские сайты шли напрямую, а заблокированные — через VPN?

В профиле роутинга добавьте российские домены (например, geosite:ru) в список DirectSites, а заблокированные сервисы (YouTube, Instagram, Telegram) — в ProxySites. Также можно указать DirectIp для подсетей российских хостинг-провайдеров. После импорта профиля включите маршрутизацию в настройках Happ.

Что такое UseChunkFiles и как это влияет на производительность?

UseChunkFiles — это опция, которая позволяет использовать урезанные версии геофайлов (GeoIP и GeoSite) вместо полных. Это значительно экономит оперативную память устройства, особенно на слабых устройствах. Однако урезанные файлы могут содержать меньше правил, что может привести к неточной маршрутизации для некоторых доменов. Рекомендуется включать эту опцию, если вы испытываете нехватку RAM.