Files
XTLS_Xray-docs-next/docs/ru/config/outbounds/dns.md
T

6.7 KiB
Raw Blame History

DNS

DNS — это исходящий протокол, который принимает DNS-запросы, переданные routing, и пересылает или обрабатывает их по правилам.

Этот outbound поддерживает только традиционный открытый DNS, то есть запросы по UDP и TCP; нестандартные для него варианты, такие как DoH, DoT и DoQ, к этому outbound не применимы. Типичные сценарии: TUN, прозрачный прокси или tunnel принимают DNS-трафик, после чего routing направляет его в этот outbound.

По правилам он может пропускать запросы к целевому DNS-серверу, выполнять hijack во встроенный DNS-сервер для дальнейшей обработки, отбрасывать запросы или возвращать ответы с указанным RCODE. Также он может изменять целевой адрес, порт и транспортный протокол.

OutboundConfigurationObject

OutboundConfigurationObject соответствует элементу settings в OutboundObject.

{
  "outbounds": [
    {
      // ...
      "protocol": "dns",
      // [!code focus:18]
      "settings": {
        "rewriteNetwork": "udp",
        "rewriteAddress": "1.1.1.1",
        "rewritePort": 53,
        "userLevel": 0,
        "rules": [
          {
            "action": "return",
            "rCode": 5,
            "domain": ["domain:example.com"]
          },
          {
            "action": "direct",
            "qType": 65,
            "domain": ["geosite:geolocation-!cn"]
          }
        ]
      }
    }
  ]
}

Пример выше только демонстрирует синтаксис полей. Полную конфигурацию см. в примере ниже.

rewriteNetwork: [ "tcp" | "udp" ]

Изменяет транспортный протокол DNS-трафика. Допустимые значения: "tcp" и "udp". Если не указано, исходный транспортный способ сохраняется.

rewriteAddress: address

Изменяет адрес DNS-сервера. Если не указано, сохраняется адрес, указанный источником.

rewritePort: number

Изменяет порт DNS-сервера. Если не указано, сохраняется порт, указанный источником.

userLevel: number

Уровень пользователя. Соединения будут использовать локальную политику, соответствующую этому уровню пользователя.

Значение userLevel соответствует значению level в policy. Если не указано, по умолчанию используется 0.

rules: [RuleObject]

DNS-запросы сопоставляются с правилами по порядку; поддерживается детальное управление по qType и domain.

Если ни одно правило не совпало, используется встроенное правило по умолчанию: запросы A и AAAA направляются во встроенный DNS-модуль, а запросы других типов получают пустой ответ с RCODE 0.

RuleObject

{
  "action": "return",
  "qType": 65,
  "rCode": 5,
  "domain": ["domain:example.com"]
}

Все условия сопоставления внутри правила объединяются логикой AND. Если условие не указано, ограничение по этому условию не применяется.

action: [ "direct" | "hijack" | "drop" | "return" ]

Определяет действие при совпадении правила.

  • direct: напрямую пропускает запрос к целевому DNS-серверу. Если на уровне outbound также настроены rewriteNetwork, rewriteAddress или rewritePort, запрос пересылается к измененной цели.
  • hijack: направляет запрос во встроенный DNS-сервер для дальнейшей обработки. Это можно использовать для дополнительного разделения трафика через конфигурацию встроенного DNS. В настоящее время поддерживаются только записи A и AAAA.
  • drop: напрямую отбрасывает запрос и не возвращает ответ.
  • return: возвращает DNS-ответ, код которого задается через rCode. По сравнению с drop, это может предотвратить долгое ожидание DNS timeout или повторные попытки у некоторых приложений.

qType: number | string

Сопоставляет типы DNS-запросов. Формы записи:

  • Целое число: конкретный тип запроса, например "qType": 1 соответствует запросу A, "qType": 28 — запросу AAAA.
  • Строка: может быть строкой только из цифр, например "qType": "28"; или диапазоном значений, например "qType": "5-10" — это типы с 5 по 10, всего 6 типов. Можно использовать запятую для разделения, например 11,13,15-17 — это 5 типов: тип 11, тип 13 и типы с 15 по 17.

Конкретные номера типов смотрите в документации IANA.

rCode: number

DNS RCODE, используемый при возврате ответа, в диапазоне от 0 до 65535. Действует только когда action имеет значение return; если не указан, по умолчанию используется 0.

domain: [string]

Сопоставляет список доменов. Синтаксис такой же, как у domain в правилах routing.