From 19b168503fe5df3752f753e217ec43ec48480ffe Mon Sep 17 00:00:00 2001 From: Nikita Korotaev Date: Sun, 14 Jul 2024 14:20:55 +0500 Subject: [PATCH] translate /config/routing.md --- docs/ru/config/routing.md | 357 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 docs/ru/config/routing.md diff --git a/docs/ru/config/routing.md b/docs/ru/config/routing.md new file mode 100644 index 0000000..2e0d39c --- /dev/null +++ b/docs/ru/config/routing.md @@ -0,0 +1,357 @@ +# Маршрутизация + +Модуль маршрутизации позволяет направлять входящие данные через разные исходящие подключения в соответствии с различными правилами, что позволяет реализовать проксирование по требованию. + +Например, распространенным сценарием использования является разделение трафика на внутренний и внешний. +Xray может определять трафик из разных регионов с помощью внутренних механизмов и отправлять его через разные исходящие подключения. + +Более подробное описание функции маршрутизации: [Введение в маршрутизацию (routing)](https://xtls.github.io/ru/document/level-1/routing-lv1-part1.html). + +## RoutingObject + +`RoutingObject` соответствует полю `routing` в конфигурационном файле. + +```json +{ + "routing": { + "domainStrategy": "AsIs", + "domainMatcher": "hybrid", + "rules": [], + "balancers": [] + } +} +``` + +> `domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand" + +Стратегия разрешения доменных имен. + +- `"AsIs"`: использовать только доменные имена для выбора маршрута. + Значение по умолчанию. +- `"IPIfNonMatch"`: если доменное имя не соответствует ни одному правилу, разрешить доменное имя в IP-адрес (запись A или AAAA) и снова выполнить сопоставление. + - Если у домена есть несколько записей A, Xray попытается сопоставить все записи A, пока одна из них не совпадет с каким-либо правилом. + - Разрешенный IP-адрес используется только для выбора маршрута, в пересылаемых пакетах данных по-прежнему используется исходное доменное имя. +- `"IPOnDemand"`: при сопоставлении с любым правилом, основанным на IP-адресе, доменное имя немедленно разрешается в IP-адрес для сопоставления. + +> `domainMatcher`: "hybrid" | "linear" + +Алгоритм сопоставления доменных имен. +Этот параметр влияет на все `RuleObject`, для которых не указан алгоритм сопоставления. + +- `"hybrid"`: использовать новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше памяти. + Значение по умолчанию. +- `"linear"`: использовать старый алгоритм сопоставления доменных имен. + +> `rules`: \[[RuleObject](#ruleobject)\] + +Массив, каждый элемент которого представляет собой правило. + +Для каждого соединения маршрутизатор проверяет правила сверху вниз. +Когда встречается первое подходящее правило, соединение перенаправляется на исходящее подключение, указанное в его `outboundTag` или `balancerTag`. + +::: tip +Если ни одно правило не подходит, трафик отправляется через первое исходящее подключение по умолчанию. +::: + +> `balancers`: \[ [BalancerObject](#balancerobject) \] + +Массив, каждый элемент которого представляет собой конфигурацию балансировщика нагрузки. + +Если правило указывает на балансировщик нагрузки, Xray выбирает исходящее подключение через этот балансировщик нагрузки и перенаправляет трафик через него. + +### RuleObject + +```json +{ + "domainMatcher": "hybrid", + "type": "field", + "domain": ["baidu.com", "qq.com", "geosite:cn"], + "ip": ["0.0.0.0/8", "10.0.0.0/8", "fc00::/7", "fe80::/10", "geoip:cn"], + "port": "53,443,1000-2000", + "sourcePort": "53,443,1000-2000", + "network": "tcp", + "source": ["10.0.0.1"], + "user": ["love@xray.com"], + "inboundTag": ["tag-vmess"], + "protocol": ["http", "tls", "bittorrent"], + "attrs": { ":method": "GET" }, + "outboundTag": "direct", + "balancerTag": "balancer" +} +``` + +::: danger +Если указано несколько атрибутов, правило применяется только в том случае, если **все** атрибуты совпадают. +::: + +> `domainMatcher`: "hybrid" | "linear" + +Алгоритм сопоставления доменных имен. +Этот параметр имеет приоритет над параметром `domainMatcher` в `RoutingObject`. + +- `"hybrid"`: использовать новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше памяти. + Значение по умолчанию. +- `"linear"`: использовать старый алгоритм сопоставления доменных имен. + +> `type`: "field" + +В настоящее время поддерживается только значение `"field"`. + +::: tip +В Xray-core v1.8.7 и более поздних версиях эту строку можно опустить. +::: + +> `domain`: \[string\] + +Массив, каждый элемент которого представляет собой шаблон доменного имени. +Доступны следующие форматы: + +- Простая строка: правило применяется, если эта строка соответствует любой части целевого доменного имени. + Например, "sina.com" соответствует "sina.com", "sina.com.cn" и "www.sina.com", но не соответствует "sina.cn". +- Регулярное выражение: начинается с `"regexp:"`, а остальная часть - это регулярное выражение. + Правило применяется, если это регулярное выражение соответствует целевому доменному имени. + Например, "regexp:\\\\.goo.\*\\\\.com\$" соответствует "www.google.com" или "fonts.googleapis.com", но не соответствует "google.com". +- Поддомен (рекомендуется): начинается с `"domain:"`, а остальная часть - это доменное имя. + Правило применяется, если это доменное имя является целевым доменным именем или его поддоменом. + Например, "domain:xray.com" соответствует "www.xray.com" и "xray.com", но не соответствует "wxray.com". +- Полное совпадение: начинается с `"full:"`, а остальная часть - это доменное имя. + Правило применяется, если это доменное имя полностью совпадает с целевым доменным именем. + Например, "full:xray.com" соответствует "xray.com", но не соответствует "www.xray.com". +- Предопределенный список доменов: начинается с `"geosite:"`, а остальная часть - это имя, например `geosite:google` или `geosite:cn`. + Список имен и доменов см. в разделе [Предопределенные списки доменов](#предопределенные-списки-доменов). +- Загрузка доменов из файла: имеет вид `"ext:file:tag"`, где `ext:` (в нижнем регистре) - префикс, за которым следует имя файла и тег. + Файл должен находиться в [каталоге ресурсов](./features/env.md#пути-к-файлам-ресурсов). + Формат файла такой же, как у `geosite.dat`. + Тег должен присутствовать в файле. + +::: tip +`"ext:geoip.dat:cn"` эквивалентно `"geoip:cn"`. +::: + +> `ip`: \[string\] + +Массив, каждый элемент которого представляет собой диапазон IP-адресов. +Правило применяется, если один из элементов соответствует целевому IP-адресу. +Доступны следующие форматы: + +- IP-адрес: например, `"127.0.0.1"`. +- [CIDR](https://ru.wikipedia.org/wiki/Бесклассовая_междоменная_маршрутизация): например, `"10.0.0.0/8"`. +- Предопределенный список IP-адресов: этот список включен в каждый установочный пакет Xray и называется `geoip.dat`. + Используйте формат `"geoip:cn"`, где `geoip:` (в нижнем регистре) - префикс, за которым следует двухбуквенный код страны. + Поддерживаются практически все страны с доступом в Интернет. + - Специальное значение: `"geoip:private"`, включает все частные IP-адреса, например `127.0.0.1`. + - Инверсия (!): `"geoip:!cn"` означает все IP-адреса, кроме тех, что указаны в `geoip:cn`. +- Загрузка IP-адресов из файла: имеет вид `"ext:file:tag"`, где `ext:` (в нижнем регистре) - префикс, за которым следует имя файла и тег. + Файл должен находиться в [каталоге ресурсов](./features/env.md#пути-к-файлам-ресурсов). + Формат файла такой же, как у `geoip.dat`. + Тег должен присутствовать в файле. + +> `port`: number | string + +Диапазон портов назначения. +Доступны следующие форматы: + +- `"a-b"`: `a` и `b` - положительные целые числа, меньшие 65536. + Диапазон является замкнутым, правило применяется, если целевой порт находится в этом диапазоне. +- `a`: `a` - положительное целое число, меньшее 65536. + Правило применяется, если целевой порт равен `a`. +- Комбинация двух вышеуказанных форматов, разделенных запятыми ",". + Например: `"53,443,1000-2000"`. + +> `sourcePort`: number | string + +Порт источника. +Доступны следующие форматы: + +- `"a-b"`: `a` и `b` - положительные целые числа, меньшие 65536. + Диапазон является замкнутым, правило применяется, если порт источника находится в этом диапазоне. +- `a`: `a` - положительное целое число, меньшее 65536. + Правило применяется, если порт источника равен `a`. +- Комбинация двух вышеуказанных форматов, разделенных запятыми ",". + Например: `"53,443,1000-2000"`. + +> `network`: "tcp" | "udp" | "tcp,udp" + +Допустимые значения: "tcp", "udp" или "tcp,udp". +Правило применяется, если тип сети соединения соответствует указанному значению. + +> `source`: \[string\] + +Массив, каждый элемент которого представляет собой диапазон IP-адресов. +Доступны следующие форматы: IP-адрес, CIDR, GeoIP и загрузка IP-адресов из файла. +Правило применяется, если один из элементов соответствует IP-адресу источника. + +> `user`: \[string\] + +Массив, каждый элемент которого представляет собой адрес электронной почты. +Правило применяется, если один из элементов соответствует пользователю источника. + +> `inboundTag`: \[string\] + +Массив, каждый элемент которого представляет собой тег. +Правило применяется, если один из элементов соответствует тегу входящего протокола. + +> `protocol`: \[ "http" | "tls" | "bittorrent" \] + +Массив, каждый элемент которого представляет собой протокол. +Правило применяется, если один из элементов соответствует типу протокола текущего соединения. + +::: tip +Для определения типа протокола соединения необходимо включить параметр `sniffing` во входящем подключении. +::: + +> `attrs`: object + +Объект JSON, где ключи и значения являются строками, используемый для проверки атрибутов трафика. +Правило применяется, если заголовки HTTP содержат все указанные ключи, а значения содержат указанные подстроки. +Ключи нечувствительны к регистру. +Значения могут быть регулярными выражениями. + +В настоящее время этот атрибут устанавливается только входящим прокси HTTP. + +Примеры: + +- Проверка HTTP GET: `{":method": "GET"}` +- Проверка пути HTTP: `{":path": "/test"}"` +- Проверка типа содержимого: `{"accept": "text/html"}"` + +> `outboundTag`: string + +Тег исходящего подключения. + +> `balancerTag`: string + +Тег балансировщика нагрузки. + +::: tip +Необходимо указать либо `balancerTag`, либо `outboundTag`. +Если указаны оба параметра, используется `outboundTag`. +::: + +### BalancerObject + +Настройки балансировщика нагрузки. +Когда балансировщик нагрузки активируется, он выбирает наиболее подходящее исходящее подключение из указанных и перенаправляет трафик через него. + +```json +{ + "tag": "balancer", + "selector": [], + "fallbackTag": "outbound", + "strategy": {} +} +``` + +> `tag`: string + +Тег этого балансировщика нагрузки, используемый для сопоставления с `balancerTag` в `RuleObject`. + +> `selector`: \[ string \] + +Массив строк, каждый элемент которого будет использоваться для сопоставления с префиксом тега исходящего подключения. +Например, для следующих тегов исходящих подключений: `[ "a", "ab", "c", "ba" ]`, `"selector": ["a"]` будет соответствовать `[ "a", "ab" ]`. + +Если найдено несколько совпадений, балансировщик нагрузки в настоящее время выбирает одно из них случайным образом. + +> `fallbackTag`: string + +Исходящее подключение, которое будет использоваться, если балансировщик нагрузки не сможет выбрать подходящее исходящее подключение. + +> `strategy`: [StrategyObject](#strategyobject) + +#### StrategyObject +```json +{ + "type": "roundRobin", + "settings": {} +} +``` +> `type` : "random" | "roundRobin" | "leastPing" | "leastLoad" + +- `random` (значение по умолчанию): случайный выбор из подходящих исходящих подключений. +- `roundRobin`: последовательный выбор из подходящих исходящих подключений. +- `leastPing`: выбор исходящего подключения с наименьшей задержкой на основе результатов мониторинга подключений. + Требуется настроить [observatory](./observatory.md#observatoryobject). +- `leastLoad`: выбор наиболее стабильного исходящего подключения на основе результатов мониторинга подключений. + Требуется настроить [burstObservatory](./observatory.md#burstobservatoryobject). + +> `settings`: [StrategySettingsObject](#strategysettingsobject) + +##### StrategySettingsObject + +Это необязательный параметр. Формат настройки зависит от стратегии балансировки нагрузки. +В настоящее время этот параметр можно использовать только со стратегией `leastLoad`. + +### Пример конфигурации балансировщика нагрузки + +```json + "routing": { + "rules": [ + { + "inboundTag": [ + "in" + ], + "balancerTag": "round" + } + ], + "balancers" : [ + { + "selector": [ + "out" + ], + "strategy": { + "type":"roundRobin" + }, + "tag": "round" + } + ] + } + + "inbounds": [ + { + // Настройки входящего подключения + "tag": "in" + } + ] + + "outbounds": [ + { + // Настройки исходящего подключения + "tag": "out1" + }, + { + // Настройки исходящего подключения + "tag": "out2" + } + ] +``` + +### Предопределенные списки доменов + +Этот список включен в каждый установочный пакет Xray и называется `geosite.dat`. +Этот файл содержит некоторые распространенные доменные имена. +Формат использования: `geosite:filename`, например `geosite:google` означает сопоставление с доменными именами, указанными в файле в разделе `google`, для маршрутизации или фильтрации DNS. + +Распространенные доменные имена: + +- `category-ads`: содержит доменные имена распространенных рекламных сервисов. +- `category-ads-all`: содержит доменные имена распространенных рекламных сервисов, а также доменные имена поставщиков рекламы. +- `cn`: эквивалентно объединению `geolocation-cn` и `tld-cn`. +- `apple`: содержит большинство доменных имен Apple. +- `google`: содержит большинство доменных имен Google. +- `microsoft`: содержит большинство доменных имен Microsoft. +- `facebook`: содержит большинство доменных имен Facebook. +- `twitter`: содержит большинство доменных имен Twitter. +- `telegram`: содержит большинство доменных имен Telegram. +- `geolocation-cn`: содержит доменные имена распространенных сайтов, расположенных в Китае. +- `geolocation-!cn`: содержит доменные имена распространенных сайтов, расположенных за пределами Китая, а также `tld-!cn`. +- `tld-cn`: содержит доменные имена верхнего уровня, управляемые CNNIC и используемые в Китае, например, домены, оканчивающиеся на `.cn`, `.中国`. +- `tld-!cn`: содержит доменные имена верхнего уровня, не используемые в Китае, например, домены, оканчивающиеся на `.hk` (Гонконг), `.tw` (Тайвань), `.jp` (Япония), `.sg` (Сингапур), `.us` (США), `.ca` (Канада) и т.д. + +Вы также можете просмотреть полный список доменов здесь: [Domain list community](https://github.com/v2fly/domain-list-community). + + + + + +