mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-09-28 01:47:59 +03:00
107 lines
6.7 KiB
Markdown
107 lines
6.7 KiB
Markdown
# DNS
|
||
|
||
DNS — это исходящий протокол, который принимает DNS-запросы, переданные routing, и пересылает или обрабатывает их по правилам.
|
||
|
||
Этот outbound поддерживает только традиционный открытый DNS, то есть запросы по UDP и TCP; нестандартные для него варианты, такие как DoH, DoT и DoQ, к этому outbound не применимы. Типичные сценарии: TUN, прозрачный прокси или `tunnel` принимают DNS-трафик, после чего routing направляет его в этот outbound.
|
||
|
||
По правилам он может пропускать запросы к целевому DNS-серверу, выполнять `hijack` во встроенный [DNS-сервер](../dns.md) для дальнейшей обработки, отбрасывать запросы или возвращать ответы с указанным RCODE. Также он может изменять целевой адрес, порт и транспортный протокол.
|
||
|
||
## OutboundConfigurationObject
|
||
|
||
`OutboundConfigurationObject` соответствует элементу `settings` в [`OutboundObject`](../outbound.md).
|
||
|
||
```json
|
||
{
|
||
"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
|
||
|
||
Уровень пользователя. Соединения будут использовать [локальную политику](../policy.md#levelpolicyobject), соответствующую этому уровню пользователя.
|
||
|
||
Значение `userLevel` соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию используется `0`.
|
||
|
||
> `rules`: \[[RuleObject](#ruleobject)\]
|
||
|
||
DNS-запросы сопоставляются с правилами по порядку; поддерживается детальное управление по `qType` и `domain`.
|
||
|
||
Если ни одно правило не совпало, используется встроенное правило по умолчанию: запросы A и AAAA направляются во встроенный DNS-модуль, а запросы других типов получают пустой ответ с RCODE `0`.
|
||
|
||
### RuleObject
|
||
|
||
```json
|
||
{
|
||
"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.md) для дальнейшей обработки. Это можно использовать для дополнительного разделения трафика через конфигурацию встроенного 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](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml).
|
||
|
||
> `rCode`: number
|
||
|
||
DNS RCODE, используемый при возврате ответа, в диапазоне от `0` до `65535`. Действует только когда `action` имеет значение `return`; если не указан, по умолчанию используется `0`.
|
||
|
||
> `domain`: [string]
|
||
|
||
Сопоставляет список доменов. Синтаксис такой же, как у [`domain` в правилах routing](../routing.md#ruleobject).
|