-На этапе маршрутизации: разрешает доменные имена в IP-адреса и выполняет сопоставление правил на основе полученных IP-адресов для разделения трафика. Разрешение доменных имен и разделение трафика зависят от значения `domainStrategy` в конфигурации модуля маршрутизации. Встроенный DNS-сервер будет использоваться для DNS-запросов только в том случае, если установлено одно из следующих двух значений:
-`"IPIfNonMatch"`: при запросе доменного имени выполняется сопоставление домена в маршрутизации, если совпадение не найдено, для этого доменного имени используется встроенный DNS-сервер для выполнения DNS-запроса, и возвращенный IP-адрес используется для повторного сопоставления IP-маршрутизации.
-`"IPOnDemand"`: при обнаружении любого правила на основе IP-адреса доменное имя немедленно разрешается в IP-адрес для сопоставления.
- Например, если в исходящем подключении `freedom` установить `domainStrategy` равным `UseIP`, то запросы, отправленные этим исходящим подключением, сначала будут разрешены во встроенном сервере из доменного имени в IP-адрес, а затем будет выполнено подключение.
- Например, если в `sockopt` установить `domainStrategy` равным `UseIP`, то системные подключения, инициированные этим исходящим подключением, сначала будут разрешены во встроенном сервере из доменного имени в IP-адрес, а затем будет выполнено подключение.
Поддерживаются только основные IP-запросы (записи A и AAAA), записи CNAME будут запрашиваться повторно до тех пор, пока не будет возвращена запись A/AAAA. Другие запросы не будут передаваться на встроенный DNS-сервер.
- Совпадает с сопоставлением «доменное имя - IP», «доменное имя - массив IP» в `hosts`, то этот IP или массив IP возвращается в качестве результата разрешения DNS.
- Совпадает с сопоставлением «доменное имя - доменное имя» в `hosts`, то значение этого сопоставления (другое доменное имя) будет использоваться в качестве текущего запрашиваемого доменного имени, и процесс обработки DNS будет продолжаться до тех пор, пока не будет разрешен IP-адрес или возвращено пустое разрешение.
-Не совпадает с`hosts`, но совпадает с одним (несколькими) списками доменов `domains` на DNS-серверах, то в соответствии с приоритетом совпадающих правил, DNS-серверы, соответствующие этим правилам, будут использоваться для запроса по очереди. Если запрос к DNS-серверу не удался или `expectIPs` не совпадает, то для запроса будет использоваться следующий DNS-сервер. В противном случае возвращается разрешенный IP-адрес. Если запрос ко всем совпадающим DNS-серверам не удался или `expectIPs` не совпадает, то компонент DNS:
- По умолчанию выполнит «откат DNS-запроса (fallback)»: DNS-серверы, которые не использовались в предыдущем неудачном запросе и для которых `skipFallback` имеет значение по умолчанию `false`, будут использоваться для запроса по очереди. Если запрос не удался или `expectIPs` не совпадает, то возвращается пустое разрешение; в противном случае возвращается разрешенный IP-адрес.
- Если `disableFallback` установлен в `true`, то «откат DNS-запроса (fallback)» выполняться не будет.
-Не совпадает ни с`hosts`, ни со списками доменов `domains` на DNS-серверах, то:
- По умолчанию DNS-серверы, для которых `skipFallback` имеет значение по умолчанию `false`, будут использоваться для запроса по очереди. Если запрос к первому выбранному DNS-серверу не удался или `expectIPs` не совпадает, то для запроса будет использоваться следующий выбранный DNS-сервер. В противном случае возвращается разрешенный IP-адрес. Если запрос ко всем выбранным DNS-серверам не удался или `expectIPs` не совпадает, то возвращается пустое разрешение.
- Если количество DNS-серверов, для которых `skipFallback` имеет значение по умолчанию `false`, равно 0 или `disableFallback` установлен в `true`, то для запроса будет использоваться первый DNS-сервер в конфигурации DNS. Если запрос не удался или `expectIPs` не совпадает, то возвращается пустое разрешение; в противном случае возвращается разрешенный IP-адрес.
Статический список IP-адресов, значением которого является серия "доменное имя": "адрес" или "доменное имя": ["адрес 1","адрес 2"]. Где адрес может быть IP-адресом или доменным именем. При разрешении доменного имени, если доменное имя соответствует элементу в этом списке:
- Если адрес элемента является IP-адресом, то результатом разрешения будет IP-адрес этого элемента.
- Если адрес элемента является доменным именем, то для разрешения IP-адреса будет использоваться это доменное имя, а не исходное доменное имя.
- Если в адресе установлено несколько IP-адресов и доменных имен, то будет возвращено только первое доменное имя, остальные IP-адреса и доменные имена будут проигнорированы.
- Простая строка: правило вступает в силу, если эта строка полностью совпадает с целевым доменным именем. Например, "xray.com" соответствует "xray.com", но не соответствует "www.xray.com".
- Регулярное выражение: начинается с`"regexp:"`, остальная часть является регулярным выражением. Правило вступает в силу, если это регулярное выражение соответствует целевому доменному имени. Например, "regexp:\\\\.goo.\*\\\\.com\$" соответствует "www.google.com", "fonts.googleapis.com", но не соответствует "google.com".
- Поддомен (рекомендуется): начинается с`"domain:"`, остальная часть является доменным именем. Правило вступает в силу, если это доменное имя является целевым доменным именем или его поддоменом. Например, "domain:xray.com" соответствует "www.xray.com" и "xray.com", но не соответствует "wxray.com".
- Подстрока: начинается с`"keyword:"`, остальная часть является строкой. Правило вступает в силу, если эта строка соответствует любой части целевого доменного имени. Например, "keyword:sina.com" может соответствовать "sina.com", "sina.com.cn" и "www.sina.com", но не соответствует "sina.cn".
- Предопределенный список доменов: начинается с`"geosite:"`, остальная часть является именем, например, `geosite:google` или `geosite:cn`. Имена и списки доменов см. в разделе [Предопределенные списки доменов](./routing.md#предопределенные-списки-доменов).
Если значением является DNS-адрес `"IP:Порт"`, например, `"8.8.8.8:53"`, Xray будет использовать указанный UDP-порт этого адреса для DNS-запросов. Этот запрос следует правилам маршрутизации. Если порт не указан, по умолчанию используется порт 53.
Если значение имеет вид `"tcp://хост:порт"`, например, `"tcp://8.8.8.8:53"`, Xray будет использовать `DNS over TCP` для запроса. Этот запрос следует правилам маршрутизации. Если порт не указан, по умолчанию используется порт 53.
Если значение имеет вид `"tcp+local://хост:порт"`, например, `"tcp+local://8.8.8.8:53"`, Xray будет использовать `локальный режим TCP (TCPL)` для запроса. Это означает, что DNS-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom, чтобы сократить время ожидания. Если порт не указан, по умолчанию используется порт 53.
Если значение имеет вид `"https://хост:порт/dns-query"`, например, `"https://dns.google/dns-query"`, Xray будет использовать `DNS over HTTPS` (RFC8484, сокращенно DOH) для запроса. Некоторые провайдеры имеют сертификаты с псевдонимами IP-адресов, можно напрямую указывать IP-адрес, например, `https://1.1.1.1/dns-query`. Также можно использовать нестандартные порты и пути, например, `"https://a.b.c.d:8443/my-dns-query"`.
Если значение имеет вид `"https+local://хост:порт/dns-query"`, например, `"https+local://dns.google/dns-query"`, Xray будет использовать `локальный режим DOH (DOHL)` для запроса. Это означает, что DOH-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom, чтобы сократить время ожидания. Обычно подходит для использования на сервере. Также можно использовать нестандартные порты и пути.
Если значение имеет вид `"quic+local://хост"`, например, `"quic+local://dns.adguard.com"`, Xray будет использовать `локальный режим DNS over QUIC (DOQL)` для запроса. Это означает, что DNS-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom. Этот метод требует, чтобы DNS-сервер поддерживал DNS over QUIC. По умолчанию для запроса используется порт 853, можно использовать нестандартный порт.
При использовании `localhost` DNS-запросы локальной машины не контролируются Xray, для того чтобы DNS-запросы перенаправлялись Xray, требуется дополнительная настройка.
Инициализированные DNS-клиенты для различных правил отображаются в журнале запуска Xray с уровнем `info`, например, режимы `local DOH`, `remote DOH` и `udp`.
Вы можете указать `clientIp` для всех DNS-серверов в [DnsObject](#dnsobject), а также указать `clientIp` для каждого DNS-сервера в конфигурации [DnsServerObject](#dnsserverobject) (приоритет выше, чем у конфигурации [DnsObject](#dnsobject)).
Значение по умолчанию `UseIP` запрашивает как записи A, так и записи AAAA. `UseIPv4` запрашивает только записи A; `UseIPv6` запрашивает только записи AAAA.
Глобальное значение `"queryStrategy"` имеет приоритет. Если значение `"queryStrategy"` в дочернем элементе конфликтует с глобальным значением `"queryStrategy"`, запрос дочернего элемента вернет пустой ответ.
Если параметр `"queryStrategy"` не указан в дочернем элементе, используется значение глобального параметра `"queryStrategy"`. Поведение аналогично версиям Xray-core до v1.8.6.
Запрос домена netflix вернет пустой ответ из-за конфликта значений `"queryStrategy"`. Запись A для домена netflix будет получена от `https://1.1.1.1/dns-query`.
`true` отключает откат DNS-запросов (fallback), если сработал список доменов с приоритетным сопоставлением для DNS-сервера, по умолчанию `false`, то есть откат включен.
Трафик запросов, отправляемых встроенным DNS, за исключением режимов `localhost`, `fakedns`, `TCPL`, `DOHL` и `DOQL`, можно сопоставить в маршрутизации с помощью `inboundTag` по этому тегу.
Если значением является DNS-адрес `"IP"`, например, `"8.8.8.8"`, Xray будет использовать указанный UDP-порт этого адреса для DNS-запросов. Этот запрос следует правилам маршрутизации. По умолчанию используется порт 53.
Если значение имеет вид `"tcp://хост"`, например, `"tcp://8.8.8.8"`, Xray будет использовать `DNS over TCP` для запроса. Этот запрос следует правилам маршрутизации. По умолчанию используется порт 53.
Если значение имеет вид `"tcp+local://хост"`, например, `"tcp+local://8.8.8.8"`, Xray будет использовать `локальный режим TCP (TCPL)` для запроса. Это означает, что DNS-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom, чтобы сократить время ожидания. Если порт не указан, по умолчанию используется порт 53.
Если значение имеет вид `"https://хост:порт/dns-query"`, например, `"https://dns.google/dns-query"`, Xray будет использовать `DNS over HTTPS` (RFC8484, сокращенно DOH) для запроса. Некоторые провайдеры имеют сертификаты с псевдонимами IP-адресов, можно напрямую указывать IP-адрес, например, `https://1.1.1.1/dns-query`. Также можно использовать нестандартные порты и пути, например, `"https://a.b.c.d:8443/my-dns-query"`.
Если значение имеет вид `"https+local://хост:порт/dns-query"`, например, `"https+local://dns.google/dns-query"`, Xray будет использовать `локальный режим DOH (DOHL)` для запроса. Это означает, что DOH-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom, чтобы сократить время ожидания. Обычно подходит для использования на сервере. Также можно использовать нестандартные порты и пути.
Если значение имеет вид `"quic+local://хост:порт"`, например, `"quic+local://dns.adguard.com"`, Xray будет использовать `локальный режим DOQ (DOQL)` для запроса. Это означает, что DNS-запрос не будет проходить через компонент маршрутизации, а будет отправляться непосредственно через исходящее подключение Freedom. Этот метод требует, чтобы DNS-сервер поддерживал DNS over QUIC. По умолчанию для запроса используется порт 853, можно использовать нестандартный порт.
Порт DNS-сервера, например, `53`. Если этот элемент не указан, по умолчанию используется значение `53`. Этот элемент не используется в режимах DOH, DOHL, DOQL, нестандартный порт должен быть указан в URL.
Список доменов. Домены из этого списка будут в первую очередь запрашиваться через этот сервер. Формат доменного имени такой же, как и в [конфигурации маршрутизации](./routing.md#ruleobject).