Как INCY выбирает маршрут
Когда INCY подключён, каждое новое соединение на устройстве проходит через правила активного профиля маршрутизации. У соединения три возможные судьбы: уйти через прокси-сервер из подписки, пойти напрямую, минуя сервер, или быть заблокированным. Профиль — это и есть набор правил, который решает, куда отправить конкретное соединение.
Правила бывают двух видов: по доменам (имя сайта или сервиса) и по IP-адресам (числовой адрес назначения). Для каждого из трёх действий в профиле есть свой список доменов и свой список адресов. Если соединение не подошло ни под одно правило, его судьбу решает настройка GlobalProxy: при значении true — через прокси, при false — напрямую.
В приложении уже есть встроенные профили — например, «Глобальный», который отправляет через прокси весь трафик. Сервис подписки может прислать свой профиль вместе с подпиской, а свой можно добавить по ссылке, 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/16 | IP-подсеть в записи CIDR | …Ip |
Важно понимать, что метка работает ровно настолько, насколько актуален геофайл. Если домен появился недавно, а геофайл давно не обновлялся, домена в категории может не оказаться. Поэтому INCY умеет обновлять геофайлы — об этом ниже, в разделе про обновления.
Пример: блокировка рекламы
Самое популярное применение геофайлов — убрать рекламу во всех приложениях сразу. Для этого достаточно одной строки в списке BlockSites: соединения с доменами рекламных сетей будут блокироваться ещё до того, как дойдут до сервера.
"BlockSites": ["geosite:category-ads-all"]Учтите, что категория блокирует домены целиком. Если какое-то приложение перестало работать после включения такого правила, проверьте, не попал ли его домен в рекламную категорию, и при необходимости уберите правило или добавьте нужный домен в DirectSites.
Удалённый и локальный DNS
Чтобы открыть сайт, устройство сначала узнаёт его IP-адрес через DNS. В профиле INCY 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.
| Значение | Как проверяются правила | Когда выбирать |
|---|---|---|
| AsIs | домен передаётся как есть, без разрешения в IP; IP-правила к нему не применяются | по умолчанию; когда хватает правил по доменам |
| IPIfNonMatch | сначала правила по домену; если ни одно не подошло — разрешение в IP и проверка IP-правил | когда есть и доменные, и IP-правила |
| IPOnDemand | домен всегда разрешается в IP до проверки правил | когда важны прежде всего IP-правила |
Практический вывод простой. Если в профиле есть правила по подсетям или метки geoip, а стратегия оставлена AsIs, соединения, пришедшие с именем домена, до IP-правил не доберутся. Для смешанных профилей разумный выбор — IPIfNonMatch: доменные правила работают сразу, а IP-правила подхватывают всё, что не совпало по имени.
Последний рубеж — GlobalProxy. Всё, что не попало ни под одно правило, уходит через прокси или напрямую в зависимости от этого значения. Встроенный профиль «Глобальный» отправляет через сервер весь трафик.
Как обновляются геофайлы
Геофайлы предустановлены в приложении, поэтому маршрутизация работает сразу после установки, без загрузок. Дальше они обновляются вместе с профилем или вручную. Адреса для скачивания задаются в профиле полями Geoipurl и Geositeurl — у профиля от сервиса подписки они свои, у вашего профиля — те, что вы укажете.
Загрузка устроена осторожно, чтобы обновление не сломало работающие правила:
- 1
Проверка по хешу
Сначала скачивается маленький файл с хешем SHA-256 рядом с геофайлом. Если хеш совпал с сохранённым, геофайл не загружается заново — так экономится трафик. - 2
Загрузка во временную папку
Новые geoip.dat и geosite.dat скачиваются отдельно от рабочих и проверяются: полный ли ответ, не пустой ли файл, совпала ли контрольная сумма. - 3
Замена только после успеха
Рабочие файлы заменяются, только когда успешно скачались оба. При ошибке остаются прежние, а неудачная установка второго файла откатывает первый. - 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/. Второй способ удобнее, если вы хотите менять правила, не перенастраивая каждое устройство.
{
"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.