mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-11 16:58:22 +03:00
Xray-core: Add Lua script for dns and routing
https://github.com/XTLS/Xray-core/pull/6823
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
- На этапе маршрутизации: разрешение доменов в IP и сопоставление правил на основе полученных IP для разделения трафика.
|
||||
::: details Подробное объяснение
|
||||
Разрешение доменного имени для маршрутизации по IP зависит от значения `routing.domainStrategy`. Встроенный DNS-сервер может использоваться для запросов только при следующих значениях:
|
||||
|
||||
- `"IPIfNonMatch"`: если в первом проходе маршрутизации не сработало ни одно правило, разрешение выполняется при условии, что цель содержит доменное имя и хотя бы одно правило содержит условие `ip`.
|
||||
- `"IPOnDemand"`: разрешение выполняется, если цель содержит доменное имя и встречается правило с условием `ip`.
|
||||
|
||||
@@ -14,6 +15,7 @@
|
||||
|
||||
- На этапе исходящего подключения: разрешение целевых доменных имен для подключения или передачи удаленному прокси-серверу.
|
||||
::: details Подробное объяснение
|
||||
|
||||
- Например, если в исходящем подключении VLESS задать `targetStrategy` равным `UseIP`, целевой домен проксируемого запроса сначала разрешается локальным встроенным модулем DNS, затем полученный IP передается удаленному прокси-серверу.
|
||||
- Если в исходящем подключении VLESS задать `sockopt.domainStrategy` равным `UseIP`, домен сервера VLESS разрешается встроенным модулем DNS, затем устанавливается соединение с полученным IP.
|
||||
- Если в исходящем подключении Freedom задать `sockopt.domainStrategy` равным `UseIP`, целевой домен запроса разрешается встроенным модулем DNS, затем устанавливается соединение с полученным IP.
|
||||
@@ -23,6 +25,7 @@
|
||||
|
||||
- Перехват DNS-трафика в режиме TUN/прозрачного прокси с помощью маршрутизации и исходящего подключения DNS для направления запросов в этот модуль; либо использование [Tunnel](./inbounds/tunnel.md) для открытия порта 53 и работы в качестве рекурсивного DNS-сервера.
|
||||
::: details Подробное объяснение
|
||||
|
||||
- Поддерживаются только базовые IP-запросы (записи A и AAAA). Записи CNAME будут запрашиваться повторно до тех пор, пока не будет возвращена запись A/AAAA. Другие типы запросов не попадают во встроенный DNS-сервер, а либо отбрасываются, либо передаются другим серверам в зависимости от вашей конфигурации исходящего подключения.
|
||||
|
||||
:::
|
||||
@@ -31,6 +34,8 @@
|
||||
|
||||
Домен сначала проходит проверку сопоставления Hosts (см. поле `hosts`). Если нужный IP не найден, для запроса используется DNS-сервер.
|
||||
|
||||
Если настроен `script`, дальнейшие DNS-запросы передаются [скрипту Lua](../development/lua/guide/dns.md), а описанный ниже встроенный процесс обработки не выполняется.
|
||||
|
||||
Затем ядро начинает строить список серверов, сортируя их в зависимости от запрашиваемого домена по следующим правилам.
|
||||
|
||||
- Построение списка 1: содержит серверы, у которых поле `domains` успешно совпало с запрашиваемым доменом, в порядке их появления в конфигурационном файле.
|
||||
@@ -54,6 +59,7 @@
|
||||
"baidu.com": "127.0.0.1",
|
||||
"dns.google": ["8.8.8.8", "8.8.4.4"]
|
||||
},
|
||||
"script": "",
|
||||
"servers": [
|
||||
"8.8.8.8",
|
||||
"8.8.4.4",
|
||||
@@ -107,6 +113,10 @@
|
||||
|
||||
Формат сопоставления (`domain:`, `full:` и т.д.) аналогичен `domain` в системе [маршрутизации](./routing.md#ruleobject). Отличие в том, что без префикса здесь по умолчанию используется `full:` (аналогично стандартному файлу hosts).
|
||||
|
||||
> `script`: string
|
||||
|
||||
Путь к файлу скрипта Lua; по умолчанию пустая строка. Если задан, обработка встроенного DNS передаётся скрипту Lua. Использование описано в [руководстве по скриптам DNS](../development/lua/guide/dns.md).
|
||||
|
||||
> `servers`: \[string | [DnsServerObject](#dnsserverobject) \]
|
||||
|
||||
Список DNS-серверов. Поддерживаются два типа: адрес DNS (строка) и [DnsServerObject](#dnsserverobject).
|
||||
@@ -267,6 +277,7 @@ IP-адрес, используемый в расширении EDNS Client Subn
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "primary",
|
||||
"address": "1.2.3.4",
|
||||
"port": 5353,
|
||||
"domains": ["domain:xray.com"],
|
||||
@@ -281,6 +292,10 @@ IP-адрес, используемый в расширении EDNS Client Subn
|
||||
}
|
||||
```
|
||||
|
||||
> `id`: string
|
||||
|
||||
Идентификатор сервера; если не задан, используется пустая строка. Скрипты Lua обращаются к [`serverObj.ID`](../development/lua/reference/module-dns.md#id), чтобы определить вышестоящий сервер.
|
||||
|
||||
> `address`: address
|
||||
|
||||
Список DNS-серверов. Поддерживаются два типа: адрес DNS (строка) и DnsServerObject.
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [],
|
||||
"script": "",
|
||||
"balancers": []
|
||||
}
|
||||
}
|
||||
@@ -44,6 +45,10 @@
|
||||
Если ни одно правило не совпадает, трафик по умолчанию отправляется через первый исходящий канал.
|
||||
:::
|
||||
|
||||
> `script`: string
|
||||
|
||||
Путь к файлу скрипта Lua; по умолчанию пустая строка. Если задан, выбор исходящего подключения передаётся скрипту Lua. Использование описано в [руководстве по скриптам маршрутизации](../development/lua/guide/routing.md).
|
||||
|
||||
> `balancers`: \[ [BalancerObject](#balancerobject) \]
|
||||
|
||||
Массив, каждый элемент которого является конфигурацией балансировщика нагрузки.
|
||||
|
||||
Reference in New Issue
Block a user