Geosite для Happ iOS: настройка маршрутизации и раздельного туннелирования

Разбираем geosite для Happ на iOS: что это, как работает, какие профили маршрутизации использовать, как настроить раздельное туннелирование и решить типичные проблемы.

Что такое geosite и зачем он нужен в Happ

Geosite — это база данных, которая группирует доменные имена по категориям: страны, сервисы, типы ресурсов. В Happ она используется для маршрутизации трафика: вместо того чтобы вручную перечислять сотни доменов YouTube или Telegram, вы указываете правило geosite:youtube, и приложение автоматически направляет весь трафик этого сервиса через прокси или напрямую.

В контексте iOS geosite особенно важен, потому что на этой платформе нет возможности фильтровать трафик по отдельным приложениям (Per-App Proxy работает только на Android и десктопах). Поэтому единственный способ разделить трафик на iPhone — использовать доменные и IP-правила, основанные на geosite и geoip.

База geosite поставляется вместе с приложением и обновляется при обновлении ядра. Также её можно загрузить вручную через профиль маршрутизации, указав URL в параметре geositeUrl. По умолчанию используется база от Loyalsoldier, но провайдеры могут подставлять свои ссылки.

Как Happ обрабатывает трафик: порядок правил и действия

Happ использует ядро Xray, которое проверяет правила маршрутизации последовательно, сверху вниз. Как только правило совпадает, трафик получает действие — PROXY (через VPN), DIRECT (напрямую) или BLOCK (заблокировать), и проверка останавливается. Это значит, что порядок правил критичен: если общее правило стоит выше конкретного, конкретное может никогда не сработать.

В профиле маршрутизации порядок задаётся параметром routeOrder, например block-proxy-direct — сначала проверяются блокировки, потом прокси, потом direct. Если ни одно правило не подошло, трафик идёт в основной выход: если globalProxy включён — через прокси, если выключен — напрямую.

На iOS важно помнить, что из-за ограничений памяти (50 МБ) приложение может использовать урезанные geosite-файлы (useChunkFiles). Это не влияет на логику, но уменьшает размер баз.

Готовые профили маршрутизации для iOS: что выбрать

Happ поставляется с несколькими готовыми профилями, которые покрывают большинство сценариев. Вот три основных:

  • Россия напрямую — российские сайты (.ru, .su, .рф), банки, госуслуги, Ozon, Wildberries, Яндекс, VK идут напрямую, всё остальное — через туннель. Это самый безопасный старт для повседневного использования.
  • Россия и игры — то же самое, но дополнительно напрямую идут игровые сервисы (Steam, Epic Games, Riot, Twitch) и обновления Windows/Apple, а также блокируется реклама и трекеры.
  • Только банки и госуслуги — обратный подход: напрямую только банки, госуслуги и домашняя сеть, весь остальной трафик (включая .ru-сайты) идёт через туннель. Подходит для максимальной приватности.

Эти профили можно установить одной кнопкой из справочника или импортировать через ссылку happ://routing/add/{base64}. На iOS профили работают, но часть правил (по приложениям) неприменима — только домены и IP.

Как создать свой профиль geosite: структура JSON

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

  • Name — имя профиля.
  • GlobalProxy — true (весь трафик через прокси по умолчанию) или false (напрямую).
  • RouteOrder — порядок проверки правил, например block-proxy-direct.
  • RemoteDNS и DomesticDNS — настройки DNS для проксированных и прямых запросов.
  • DirectSites, ProxySites, BlockSites — списки geosite-категорий или конкретных доменов.
  • DirectIp, ProxyIp, BlockIp — списки geoip-категорий или IP-диапазонов.
  • DomainStrategy — как сопоставлять домены с IP: AsIs, IPIfNonMatch, IPOnDemand.
  • FakeDNS — подмена IP для обработки всех запросов через Xray.
  • UseChunkFiles — использовать урезанные geosite-файлы для экономии памяти.

Пример правила: "DirectSites": ["geosite:private", "geosite:tld-ru", "geosite:category-ru"] — это направит приватные домены, российские зоны и категории напрямую.

Раздельное туннелирование на iOS: сценарии и примеры

Раздельное туннелирование позволяет отправлять через VPN только часть трафика. На iOS это реализуется через правила маршрутизации, так как Per-App Proxy недоступен. Вот несколько типовых сценариев:

Сценарий 1: Весь интернет через VPN, кроме российских сайтов. Установите GlobalProxy: true, добавьте в DirectSites категории geosite:ru, geosite:category-ru, geosite:category-gov-ru, geosite:category-bank-ru, а в DirectIpgeoip:ru и приватные диапазоны. Тогда российские ресурсы будут открываться напрямую, а всё остальное — через туннель.

Сценарий 2: Только выбранные сервисы через VPN. Установите GlobalProxy: false, а в ProxySites добавьте geosite:youtube, geosite:telegram, geosite:instagram и т.д. Тогда только эти сервисы пойдут через прокси, остальное — напрямую.

Сценарий 3: Блокировка рекламы. Добавьте в BlockSites категории geosite:category-ads, geosite:win-spy — реклама и трекеры будут заблокированы на уровне DNS.

Особенности работы с JSON-подписками и ограничения iOS

Если вы используете JSON-подписку от провайдера, Happ включает режим жёстких ограничений (Restricted Mode). В этом режиме:

  • У подписки может быть только 0 или 1 профиль маршрутизации.
  • Профиль нельзя создать вручную, скопировать или импортировать — он приходит только вместе с подпиской.
  • Пользователь не может отключить или изменить профиль: главный тогл маршрутизации заблокирован, изменение геофайлов запрещено.

Это сделано для предотвращения рассинхронизации настроек с метаданными провайдера. На iOS также есть ограничение: из-за лимита памяти в 50 МБ приложение может использовать урезанные geosite-файлы (useChunkFiles), что не влияет на функциональность, но уменьшает размер баз.

Если вы хотите полный контроль над маршрутизацией, используйте обычную подписку (не JSON) или импортируйте профиль через ссылку happ://routing/add/.

Как обновлять geosite и устранять ошибки загрузки

Geosite-базы обновляются автоматически при обновлении ядра Happ, но также могут загружаться через профиль маршрутизации. Параметр lastUpdatedDate в профиле управляет принудительной загрузкой: если дата новее текущей, Happ скачает свежие geosite.dat и geoip.dat.

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

Чтобы избежать проблем, убедитесь, что URL геофайлов доступны (например, https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat), и что у вас стабильное интернет-соединение. Если ошибка повторяется, попробуйте удалить профиль и добавить его заново.

Практические советы по выбору geosite-категорий

При настройке маршрутизации важно правильно выбирать категории geosite. Вот несколько рекомендаций:

  • Для крупных сервисов (YouTube, Netflix, Instagram) используйте geosite:youtube, geosite:netflix, geosite:instagram — они включают все скрытые домены, используемые для доставки контента.
  • Для небольших сайтов достаточно правила domain:example.com — это проще и не нагружает базу.
  • Для российских ресурсов используйте категории geosite:category-ru, geosite:category-gov-ru, geosite:category-bank-ru, geosite:category-ecommerce-ru — они покрывают большинство популярных сайтов.
  • Для блокировки рекламы — geosite:category-ads, для телеметрии Windows — geosite:win-spy.
  • Не забывайте про geosite:private и geoip:private — они направляют локальные адреса (роутер, принтер, NAS) напрямую, чтобы VPN не ломал доступ к домашней сети.

Если вы сомневаетесь, начните с готового профиля «Россия напрямую» — он оптимален для большинства пользователей в РФ.

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

Проблема: видео или изображения не загружаются. Это часто происходит, когда для сервиса используется правило domain, но сервис использует дополнительные скрытые домены. Решение — заменить domain на geosite для этого сервиса.

Проблема: трафик идёт не по нужному маршруту. Проверьте порядок правил. Если общее правило (например, geosite:ru) стоит выше конкретного (domain:example.com), конкретное может не сработать. Переместите более специфичные правила выше.

Проблема: пропал доступ к локальным устройствам. Убедитесь, что в настройках включена опция «Обходить системный прокси для локальных адресов» или добавьте geoip:private в DirectIp.

Проблема: на iOS не работает Per-App Proxy. Это ограничение платформы — используйте доменные правила geosite для разделения трафика.

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

Что такое geosite в Happ и чем он отличается от geoip?

Geosite — это база данных доменных имён, сгруппированных по категориям (страны, сервисы, типы). Geoip — база IP-адресов, сгруппированных по странам или организациям. В Happ geosite используется для правил по доменам (например, geosite:youtube), а geoip — для правил по IP (например, geoip:ru). Обе базы обновляются автоматически и могут быть заменены через профиль маршрутизации.

Можно ли на iOS настроить раздельное туннелирование по приложениям?

Нет, на iOS нет Per-App Proxy — это ограничение платформы. Вместо этого используйте правила маршрутизации на основе geosite и geoip: например, добавьте geosite:telegram в ProxySites, чтобы только Telegram шёл через VPN, а остальной трафик — напрямую.

Как импортировать готовый профиль маршрутизации в Happ на iPhone?

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

Почему после настройки geosite некоторые сайты не открываются?

Возможные причины: неправильный порядок правил (общее правило перекрывает конкретное), использование domain вместо geosite для крупных сервисов, или блокировка в BlockSites. Проверьте порядок правил, замените domain на geosite для проблемного сервиса и убедитесь, что он не входит в блокирующие категории.

Как обновить geosite-базы в Happ на iOS?

Geosite-базы обновляются автоматически при обновлении ядра Happ. Также можно принудительно загрузить их, указав в профиле маршрутизации параметр lastUpdatedDate с более новой датой — Happ скачает geosite.dat и geoip.dat по URL из профиля. Если загрузка не завершается за 3 минуты, появится ошибка — проверьте доступность URL и соединение.

Что делать, если профиль маршрутизации из JSON-подписки нельзя изменить?

В режиме Restricted Mode для JSON-подписок профиль маршрутизации заблокирован: его нельзя отключить, изменить или удалить. Это сделано для синхронизации с провайдером. Если вам нужен полный контроль, используйте обычную подписку (не JSON) или импортируйте собственный профиль через ссылку happ://routing/add/.