domainStrategy: что это
- Автор
- Екатерина Лебедева, редактор раздела knowledge base
- Проверил:
- Артём Волков
- Проверено:
- Опубликовано:
- , обновлено
- Версия гайда:
- 1.0
Коротко
domainStrategy — параметр профиля маршрутизации Happ, который определяет, резолвит ли Xray домен в IP-адрес до проверки правил маршрутизации, после неё или не резолвит вовсе. Значение по умолчанию — IPIfNonMatch.
domainStrategy управляет тем, в какой момент Xray-core превращает доменное имя в IP-адрес при проверке правил маршрутизации. Значение AsIs вообще не резолвит домен на этапе маршрутизации и передаёт его дальше как есть. IPIfNonMatch сначала проверяет правила по домену и только при отсутствии совпадения делает DNS-запрос и проверяет ещё раз, уже по IP. IPOnDemand резолвит домен в IP сразу, ещё до проверки любых правил. В профиле маршрутизации Happ по умолчанию используется IPIfNonMatch — этот параметр напрямую влияет на то, сработают ли правила по GeoIP для конкретного запроса.
domainStrategy — параметр профиля маршрутизации, который задаёт, в какой момент Xray-core резолвит доменное имя в IP-адрес при проверке правил: до, после или совсем без резолвинга на этом этапе.
Суть domainStrategy
Когда правило маршрутизации написано по IP-адресу, Xray-core должен сначала узнать, какой IP стоит за доменным именем в запросе, — а для этого нужен DNS-запрос. Но правило по доменному имени такого запроса не требует вовсе. domainStrategy решает, в каком порядке всё это происходит.
Формально это одно поле профиля маршрутизации, но от него зависит, насколько активно в маршрутизации вообще участвуют правила по IP и коды GeoIP: при одних значениях домен резолвится всегда, при других — только иногда, а при третьих не резолвится для маршрутизации вовсе.
Документация Happ приводит domainStrategy как часть примера профиля по умолчанию со значением IPIfNonMatch, а в продвинутых параметрах маршрутизации перечисляет все три допустимых значения этого поля.
Как это выглядит в Happ
Три значения domainStrategy по-разному расставляют момент резолвинга домена относительно проверки правил:
| Значение | Когда резолвится домен | Особенность |
|---|---|---|
AsIs | Никогда на этапе маршрутизации | Домен передаётся дальше как есть, IP-правила не участвуют |
IPIfNonMatch | Только если правило по домену не нашлось | Значение по умолчанию в профиле Happ |
IPOnDemand | Всегда, до проверки любых правил | Больше DNS-запросов, но IP-правила проверяются для каждого соединения |
Разница особенно заметна, если в одном профиле сочетаются правила GeoSite по доменам и GeoIP по адресам. При IPIfNonMatch домен сначала пытаются сопоставить с категориями geosite, и лишь при неудаче включается резолвинг для проверки по geoip. При AsIs до этой второй проверки дело просто не доходит.
Пример в профиле маршрутизации
Так параметр выглядит в составе профиля — условный пример с явно заданным значением:
{
"DomainStrategy": "IPIfNonMatch",
"ProxySites": ["geosite:google"],
"ProxyIp": ["geoip:amazon"]
}С таким набором правил запрос к домену из категории geosite:google будет пойман ещё на этапе проверки по имени, а резолвинг в IP для сравнения с geoip:amazon произойдёт только для доменов, не попавших ни в одну категорию по имени.
Чем domainStrategy отличается от похожих терминов
domainStrategy стоит рядом с другими настройками DNS и маршрутизации, но отвечает за более узкую задачу — момент резолвинга.
| Термин | За что отвечает | Отличие от domainStrategy |
|---|---|---|
| Удалённый DNS | Каким сервером резолвить домены, идущие через прокси | Не решает, когда именно происходит резолвинг ради маршрутизации |
| Локальный DNS | Каким сервером резолвить домены, идущие напрямую | Тоже относится к самому резолвингу, а не к его месту в проверке правил |
| GeoIP | Группы IP-адресов для правил | Работает только тогда, когда domainStrategy вообще позволяет резолвинг |
| Профиль маршрутизации | Все правила целиком | domainStrategy — одно из его полей, а не отдельная сущность |
Как настроить DNS-параметры профиля целиком, включая RemoteDNS и DomesticDNS, разобрано на странице DNS в Happ.
Главное
- domainStrategy — один из параметров профиля маршрутизации Happ, а не отдельная настройка сети или DNS.
- Значение по умолчанию в профиле Happ — IPIfNonMatch: сначала проверка по домену, резолвинг в IP только если правило по домену не найдено.
- AsIs не резолвит домен на этапе маршрутизации вовсе и передаёт его следующему этапу как есть, без DNS-запроса ради проверки правил.
- IPOnDemand всегда резолвит домен в IP-адрес перед проверкой любых правил, что означает дополнительный DNS-запрос для каждого нового соединения.
- От значения domainStrategy зависит, дойдёт ли вообще очередь до правил GeoIP, — они работают с IP-адресами, а не с доменными именами.
Частые вопросы
Какое значение domainStrategy стоит по умолчанию в Happ?
В примере профиля по умолчанию из документации Happ указано значение IPIfNonMatch. Это компромиссный вариант: Xray сначала проверяет, подходит ли запрос под правило по доменному имени, и только если подходящего правила нет, делает DNS-запрос и повторно проверяет правила уже по полученному IP-адресу.
Чем AsIs отличается от IPIfNonMatch?
При AsIs Xray вообще не пытается резолвить домен на этапе маршрутизации — доменное имя передаётся следующему этапу как есть, без дополнительного DNS-запроса ради проверки правил. При IPIfNonMatch резолвинг всё же может произойти, но только как второй шаг, если правило по самому домену не нашлось. AsIs экономит DNS-запросы, но делает недоступными правила, завязанные только на IP-адрес.
Зачем нужен IPOnDemand, если он делает больше DNS-запросов?
IPOnDemand полезен, когда правила маршрутизации в основном построены на IP-адресах и кодах GeoIP, а не на доменных именах, и точность важнее числа DNS-запросов. Резолвинг домена в IP происходит сразу, ещё до проверки любых правил, поэтому IP-правила точно получают шанс сработать для каждого запроса, в отличие от AsIs.
Как domainStrategy влияет на правила по GeoIP и GeoSite?
Правила GeoSite проверяются по доменному имени и не зависят от domainStrategy. А правила GeoIP работают только с IP-адресами, поэтому при значении AsIs, когда резолвинга на этапе маршрутизации нет, такие правила фактически не успевают сработать для домена — до сравнения по IP просто не доходит очередь.
Можно ли задать domainStrategy отдельно для разных подписок?
Да: domainStrategy — это поле профиля маршрутизации, а у каждой подписки в Happ свой независимый набор профилей. Значит, для одной подписки можно оставить IPIfNonMatch по умолчанию, а для другой, где важна точность IP-правил, задать IPOnDemand в её собственном профиле.
Нужно ли менять domainStrategy обычному пользователю Happ?
Обычно нет: значение по умолчанию IPIfNonMatch — это сбалансированный вариант, который подходит большинству профилей со смешанными правилами по доменам и адресам. Менять его имеет смысл, если профиль маршрутизации целиком построен на кодах GeoIP или если нужно снизить число DNS-запросов, и тогда за этим параметром обычно следит провайдер, который составляет профиль.
Упомянутые темы
Похожие материалы
Разделы по теме
Источники
- Документация Happ: геонастройки и маршрутизация — обращение 28 сентября 2026