mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-09 15:19:55 +03:00
101 lines
6.2 KiB
Markdown
101 lines
6.2 KiB
Markdown
# DNS
|
|
|
|
DNS — это исходящий протокол, который принимает DNS-запросы, переданные routing, и пересылает или обрабатывает их по правилам.
|
|
|
|
Этот outbound поддерживает только традиционный открытый DNS, то есть запросы по UDP и TCP; нестандартные для него варианты, такие как DoH, DoT и DoQ, к этому outbound не применимы. Типичные сценарии: TUN, прозрачный прокси или `dokodemo-door` принимают DNS-трафик, после чего routing направляет его в этот outbound.
|
|
|
|
По правилам он может пропускать запросы к целевому DNS-серверу, выполнять `hijack` во встроенный [DNS-сервер](../dns.md) для дальнейшей обработки, отбрасывать запросы или явно отказывать в них. Также он может изменять целевой адрес, порт и транспортный протокол.
|
|
|
|
## OutboundConfigurationObject
|
|
|
|
`OutboundConfigurationObject` соответствует элементу `settings` в [`OutboundObject`](../outbound.md).
|
|
|
|
```json
|
|
{
|
|
"outbounds": [
|
|
{
|
|
// ...
|
|
"protocol": "dns",
|
|
"settings": {
|
|
// [!code focus:15]
|
|
"rewriteNetwork": "udp",
|
|
"rewriteAddress": "1.1.1.1",
|
|
"rewritePort": 53,
|
|
"userLevel": 0,
|
|
"rules": [
|
|
{
|
|
"action": "reject",
|
|
"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
|
|
|
|
Уровень пользователя. Соединения будут использовать [локальную политику](../policy.md#levelpolicyobject), соответствующую этому уровню пользователя.
|
|
|
|
Значение `userLevel` соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию используется `0`.
|
|
|
|
> `rules`: \[[RuleObject](#ruleobject)\]
|
|
|
|
DNS-запросы сопоставляются с правилами по порядку; поддерживается детальное управление по `qtype` и `domain`.
|
|
|
|
Если ни одно правило не совпало, используется встроенное правило по умолчанию: запросы A и AAAA направляются во встроенный DNS-модуль, а запросы других типов явно отклоняются.
|
|
|
|
### RuleObject
|
|
|
|
```json
|
|
{
|
|
"action": "hijack",
|
|
"qtype": 1,
|
|
"domain": ["geosite:cn"]
|
|
}
|
|
```
|
|
|
|
Все условия сопоставления внутри правила объединяются логикой AND. Если условие не указано, ограничение по этому условию не применяется.
|
|
|
|
> `action`: [ "direct" | "hijack" | "drop" | "reject" ]
|
|
|
|
Определяет действие при совпадении правила.
|
|
|
|
- `direct`: напрямую пропускает запрос к целевому DNS-серверу. Если на уровне outbound также настроены `rewriteNetwork`, `rewriteAddress` или `rewritePort`, запрос пересылается к измененной цели.
|
|
- `hijack`: направляет запрос во встроенный [DNS-сервер](../dns.md) для дальнейшей обработки. Это можно использовать для дополнительного разделения трафика через конфигурацию встроенного DNS. В настоящее время поддерживаются только записи A и AAAA.
|
|
- `drop`: напрямую отбрасывает запрос и не возвращает ответ.
|
|
- `reject`: возвращает явный отказ. По сравнению с `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](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml).
|
|
|
|
> `domain`: [string]
|
|
|
|
Сопоставляет список доменов. Синтаксис такой же, как у [`domain` в правилах routing](../routing.md#ruleobject).
|