Перейти к содержимому
INCY гид — на главную

Маршрутизация

Маршрутизация в INCY: готовые профили и GeoIP/GeoSite

Маршрутизация в INCY строится на профилях с правилами GeoIP и GeoSite: категории адресов и доменов решают, что идёт через прокси, что напрямую, а что блокируется. Разбираем, как устроены геофайлы, как работают удалённый и локальный DNS и как настроить свой профиль.

Опубликовано 9 мин чтения

Как INCY выбирает маршрут

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

Правила бывают двух видов: по доменам (имя сайта или сервиса) и по IP-адресам (числовой адрес назначения). Для каждого из трёх действий в профиле есть свой список доменов и свой список адресов. Если соединение не подошло ни под одно правило, его судьбу решает настройка GlobalProxy: при значении true — через прокси, при false — напрямую.

Приложенияна устройствеЧерез проксисервер из подпискиНапрямуюбез туннеляБлокироватьреклама и трекерыINCYправила профиля
Через прокси— сервер из подпискиНапрямую— без туннеляБлокировать— реклама и трекеры

В приложении уже есть встроенные профили — например, «Глобальный», который отправляет через прокси весь трафик. Сервис подписки может прислать свой профиль вместе с подпиской, а свой можно добавить по ссылке, QR-коду или из буфера обмена. Как это сделать и где профили находятся в интерфейсе, показано на странице маршрутизация в INCY. Здесь — о том, как правила устроены внутри.

GeoIP и GeoSite простыми словами

Перечислять в правилах тысячи доменов или подсетей вручную неудобно, поэтому Xray-core, на котором работает INCY, использует геофайлы. Это две базы: geoip.dat — диапазоны IP-адресов, сгруппированные по меткам, и geosite.dat — списки доменов, сгруппированные по категориям. В правиле достаточно указать метку, и под него попадут все адреса или домены из этой группы.

Например, метка geoip:private охватывает адреса локальных сетей — роутер, принтер, домашний сервер. Категория geosite:category-ads-all — домены рекламных сетей; её обычно используют в списке «блокировать». В правилах используется синтаксис Xray-core, и рядом с метками можно писать конкретные домены и подсети:

Формы записи правил маршрутизации
ЗаписьЧто означаетКуда писать
geosite:category-ads-allвсе домены из категории геофайлаBlockSites, ProxySites, DirectSites
domain:example.comдомен и все его поддомены…Sites
full:example.comтолько этот домен, без поддоменов…Sites
geoip:privateлокальные сети по метке геофайлаBlockIp, ProxyIp, DirectIp
192.168.0.0/16IP-подсеть в записи CIDR…Ip

Важно понимать, что метка работает ровно настолько, насколько актуален геофайл. Если домен появился недавно, а геофайл давно не обновлялся, домена в категории может не оказаться. Поэтому INCY умеет обновлять геофайлы — об этом ниже, в разделе про обновления.

Пример: блокировка рекламы

Самое популярное применение геофайлов — убрать рекламу во всех приложениях сразу. Для этого достаточно одной строки в списке BlockSites: соединения с доменами рекламных сетей будут блокироваться ещё до того, как дойдут до сервера.

фрагмент профиля
"BlockSites": ["geosite:category-ads-all"]

Учтите, что категория блокирует домены целиком. Если какое-то приложение перестало работать после включения такого правила, проверьте, не попал ли его домен в рекламную категорию, и при необходимости уберите правило или добавьте нужный домен в DirectSites.

Удалённый и локальный DNS

Чтобы открыть сайт, устройство сначала узнаёт его IP-адрес через DNS. В профиле INCY DNS разделён на два: удалённый — для адресов, которые идут через прокси, и локальный — для адресов, которые идут напрямую. Так имена сайтов «за прокси» разрешаются одним сервером, а «прямые» — другим.

DNS в профиле
"RemoteDNSType": "DoH",
"RemoteDNSDomain": "https://dns.example.com/dns-query",
"RemoteDNSIP": "192.0.2.53",
"DomesticDNSType": "DoU",
"DomesticDNSIP": "192.0.2.54",
"DnsHosts": { "router.example.com": "192.168.1.1" }

Тип DoH означает DNS поверх HTTPS — для него нужен адрес сервера в поле Domain. DoU — обычный DNS по UDP, ему достаточно IP-адреса. Поле DnsHosts работает как файл hosts: в нём можно жёстко задать адрес для конкретного имени. Ещё есть переключатель FakeDNS: при true Xray подставляет виртуальные адреса вместо настоящих, чтобы все запросы шли по правилам конфигурации; по умолчанию он выключен.

Порядок проверки правил

Здесь кроется частая причина «правило не работает». Соединение может прийти в INCY как имя домена или сразу как IP-адрес, а правила для доменов и для адресов — разные списки. Как совмещать их, решает настройка DomainStrategy.

Значения DomainStrategy
ЗначениеКак проверяются правилаКогда выбирать
AsIsдомен передаётся как есть, без разрешения в IP; IP-правила к нему не применяютсяпо умолчанию; когда хватает правил по доменам
IPIfNonMatchсначала правила по домену; если ни одно не подошло — разрешение в IP и проверка IP-правилкогда есть и доменные, и IP-правила
IPOnDemandдомен всегда разрешается в IP до проверки правилкогда важны прежде всего IP-правила

Практический вывод простой. Если в профиле есть правила по подсетям или метки geoip, а стратегия оставлена AsIs, соединения, пришедшие с именем домена, до IP-правил не доберутся. Для смешанных профилей разумный выбор — IPIfNonMatch: доменные правила работают сразу, а IP-правила подхватывают всё, что не совпало по имени.

Последний рубеж — GlobalProxy. Всё, что не попало ни под одно правило, уходит через прокси или напрямую в зависимости от этого значения. Встроенный профиль «Глобальный» отправляет через сервер весь трафик.

Как обновляются геофайлы

Геофайлы предустановлены в приложении, поэтому маршрутизация работает сразу после установки, без загрузок. Дальше они обновляются вместе с профилем или вручную. Адреса для скачивания задаются в профиле полями Geoipurl и Geositeurl — у профиля от сервиса подписки они свои, у вашего профиля — те, что вы укажете.

Загрузка устроена осторожно, чтобы обновление не сломало работающие правила:

  1. 1

    Проверка по хешу

    Сначала скачивается маленький файл с хешем SHA-256 рядом с геофайлом. Если хеш совпал с сохранённым, геофайл не загружается заново — так экономится трафик.
  2. 2

    Загрузка во временную папку

    Новые geoip.dat и geosite.dat скачиваются отдельно от рабочих и проверяются: полный ли ответ, не пустой ли файл, совпала ли контрольная сумма.
  3. 3

    Замена только после успеха

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

    Ограничение по времени

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

Помимо этого, геофайлы можно проверять по расписанию. В редакторе профиля, в разделе геофайлов, есть свой интервал: не обновлять, 1, 6, 12 или 24 часа, 3, 7, 15, 30 или 90 дней, либо «как у провайдера». Сервис подписки тоже может задать такой интервал. После неудачной автоматической проверки повтор идёт не сразу, а через 30 минут, затем через 1, 2, 4 и максимум 6 часов. Ручное обновление доступно в любой момент.

Новый путь к геофайлам применяется при следующем подключении: ради обновления INCY соединение не разрывает. На Android и iOS профиль может попросить обрезать геофайлы до реально используемых меток, чтобы сэкономить память; версия для ПК пока работает с полными файлами.

Свой профиль с автообновлением

Свой профиль — это JSON-файл с теми же полями, что и у профиля сервиса. Добавить его можно разово, закодировав JSON в base64 и открыв ссылку incy://routing/onadd/, или с автообновлением — выложив файл по адресу https:// и открыв ссылку incy://autorouting/onadd/. Второй способ удобнее, если вы хотите менять правила, не перенастраивая каждое устройство.

profile.json
{
  "Name": "Мой профиль",
  "GlobalProxy": "true",
  "DomainStrategy": "IPIfNonMatch",
  "Geoipurl": "https://example.com/geoip.dat",
  "Geositeurl": "https://example.com/geosite.dat",
  "ProxySites": ["domain:example.com"],
  "DirectSites": ["domain:example.org"],
  "DirectIp": ["geoip:private"],
  "BlockSites": ["geosite:category-ads-all"]
}
ссылка с автообновлением
incy://autorouting/onadd/https://example.com/profile.json

Профиль с автообновлением отмечен в списке значком облака. INCY проверяет такие профили каждые 30 минут и скачивает заново, если с прошлого обновления прошло больше выбранного интервала: по умолчанию это 24 часа, можно выбрать 12 часов, 3 или 7 дней. В редакторе профиля есть раздел «Источник обновлений»: там видно адрес, время последнего обновления, есть кнопки «Обновить сейчас» и «Удалить источник» — последняя превращает профиль в обычный, статический.

Файл профиля удобно хранить на GitHub: ссылки на файлы в репозитории вида github.com/…/blob/… INCY сам превращает в прямые ссылки на содержимое. Профили с одинаковым полем Name не дублируются, а обновляются — это и позволяет менять правила централизованно. Как импортировать профиль другими способами, рассказано в разделе импорт в INCY.

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

Иногда нужно проверить, не в правилах ли дело. Профили маршрутизации выключаются переключателем в настройках или ссылкой incy://routing/off. Выбранный профиль при этом сохраняется: включив маршрутизацию обратно, вы вернётесь к тем же правилам. Если без профиля всё работает, а с ним — нет, ищите ошибку в правилах по списку ниже.

Типичные ошибки в правилах

Большинство проблем с маршрутизацией сводится к нескольким повторяющимся ошибкам. Если правило не срабатывает, пройдитесь по списку:

  • IP-правила при стратегии AsIs

    Соединения с именем домена до IP-правил не доходят. Поставьте IPIfNonMatch.
  • GlobalProxy не тот

    При false всё, что не попало в ProxySites и ProxyIp, идёт напрямую — легко забыть нужный домен.
  • Правки в чужом профиле

    Профиль от сервиса подписки обновляется вместе с подпиской, и ручные изменения в нём могут не сохраниться. Свои правила держите в своём профиле.
  • Геофайлы не скачались

    Красный восклицательный знак у профиля — проверьте адреса Geoipurl и Geositeurl и обновите профиль вручную.
  • Ошибка в JSON

    Лишняя запятая или кавычка ломает профиль целиком. Проверьте файл любым валидатором JSON перед импортом.
  • Устаревшая категория

    Нового домена может не быть в старом геофайле — обновите геофайлы или добавьте домен правилом domain:.

Если профиль показывает ошибку geosite.dat и не восстанавливается обновлением, удалите его и добавьте заново — подробный разбор этой ошибки в статье ошибка geosite.dat в INCY, а других проблем с подключением — в разделе INCY не работает и в статье INCY не подключается. А если нужно направить через сервер не домены, а отдельные программы, используйте прокси по приложениям — он есть на Android и в версии для ПК, порядок настройки описан в пошаговой инструкции.

Маршрутизация не требует подписки определённого сервиса: она работает с любыми серверами, которые вы добавили в INCY, — по ссылке-подписке или по отдельному ключу. Где их взять, рассказано на странице ключи для INCY.

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

Коротко: вопросы и ответы

Короткие ответы по теме статьи. Подробности — в разделах выше.

Они предустановлены в приложении и обновляются вместе с профилем. Свой профиль может указать другие адреса geoip.dat и geosite.dat.

Соединение пойдёт по значению GlobalProxy: через прокси при true или напрямую при false.

По умолчанию раз в 24 часа; в редакторе профиля можно выбрать другой интервал или обновить вручную.

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

INCY установлен — осталось добавить ключ

Само приложение серверов не даёт: нужна ссылка-подписка от сервиса или ключ своего сервера. Новым пользователям сервиса — пробный день бесплатно. Какие бывают ключи.