From 26d1056b3cfe06e371a8014d1387af651484770b Mon Sep 17 00:00:00 2001 From: Nikita Korotaev Date: Sun, 14 Jul 2024 16:41:25 +0500 Subject: [PATCH] translate /config/features/*.md --- docs/ru/config/features/env.md | 2 +- docs/ru/config/features/fallback.md | 102 ++++++++++++++++++++ docs/ru/config/features/multiple.md | 138 ++++++++++++++++++++++++++++ 3 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 docs/ru/config/features/fallback.md create mode 100644 docs/ru/config/features/multiple.md diff --git a/docs/ru/config/features/env.md b/docs/ru/config/features/env.md index b4b3487..27fb1b9 100644 --- a/docs/ru/config/features/env.md +++ b/docs/ru/config/features/env.md @@ -1,4 +1,4 @@ -## Переменные среды +# Переменные среды Xray предоставляет следующие переменные среды для изменения некоторых базовых настроек Xray. diff --git a/docs/ru/config/features/fallback.md b/docs/ru/config/features/fallback.md new file mode 100644 index 0000000..3bcdffa --- /dev/null +++ b/docs/ru/config/features/fallback.md @@ -0,0 +1,102 @@ +# Fallback + +> **Fallback - одна из самых мощных функций Xray, эффективно предотвращающая активное зондирование и позволяющая свободно настраивать совместное использование нескольких служб на часто используемых портах.** + +Fallback обеспечивает Xray высокой степенью защиты от активного зондирования и имеет уникальный механизм резервирования первого пакета. + +Fallback также может разделять трафик различных типов по пути, что позволяет совместно использовать один порт для нескольких служб. + +В настоящее время вы можете использовать функцию fallback при использовании протоколов VLESS или Trojan, настроив `fallbacks`, и создавать очень разнообразные комбинации. + +## Настройка `fallbacks` + +```json + "fallbacks": [ + { + "dest": 80 + } + ] +``` + +> `fallbacks`: \[ [FallbackObject](#fallbackobject) \] + +Массив, содержащий серию мощных конфигураций резервирования и разделения трафика. + +### FallbackObject + +```json +{ + "name": "", + "alpn": "", + "path": "", + "dest": 80, + "xver": 0 +} +``` + +**`fallbacks` - это массив, здесь приведено описание конфигурации одного из его элементов.** + +Элемент `fallbacks` является необязательным и может использоваться только для комбинации транспорта TCP+TLS. + +- Если этот элемент имеет дочерние элементы, в [Inbound TLS](../transport.md#tlsobject) необходимо установить `"alpn":["http/1.1"]`. + +Обычно сначала нужно настроить набор резервных путей по умолчанию с опущенными или пустыми `alpn` и `path`, а затем настроить другие разделения по мере необходимости. + +VLESS будет перенаправлять трафик с длиной первого пакета после дешифрования TLS менее 18 байт, неверной версией протокола или неудачной аутентификацией на адрес, указанный в `dest`. + +Для других комбинаций транспорта необходимо удалить элемент `fallbacks` или все его дочерние элементы. В этом случае Fallback не будет включен, VLESS будет ждать считывания необходимой длины, а в случае неверной версии протокола или сбоя аутентификации соединение будет немедленно разорвано. + +> `name`: string + +Попытка сопоставить TLS SNI (указание имени сервера), любое значение или пустая строка, по умолчанию "". + +> `alpn`: string + +Попытка сопоставить результат согласования TLS ALPN, любое значение или пустая строка, по умолчанию "". + +При необходимости VLESS попытается прочитать результат согласования TLS ALPN, и в случае успеха выведет в лог `realAlpn =`. +Назначение: решает проблему несовместимости службы h2c Nginx с http/1.1, для которой в Nginx требуется написать две строки listen, по одной для 1.1 и h2c. +Примечание: если в `fallbacks alpn` присутствует `"h2"`, в [Inbound TLS](../transport.md#tlsobject) необходимо установить `"alpn":["h2","http/1.1"]` для поддержки доступа h2. + +::: tip +`alpn`, установленный в Fallback, соответствует фактически согласованному ALPN, а `alpn`, установленный в Inbound TLS, - это список дополнительных ALPN во время рукопожатия. Это разные вещи. +::: + +> `path`: string + +Попытка сопоставить HTTP-путь первого пакета, любое значение или пустая строка, по умолчанию пустая строка, если не пустая, то должна начинаться с `/`, h2c не поддерживается. + +Интеллектуальность: при необходимости VLESS попытается просмотреть PATH (не более 55 байт; самый быстрый алгоритм, не выполняет полный разбор HTTP) и в случае успеха выведет в INFO-лог `realPath =`. +Назначение: разделение трафика WebSocket или HTTP-маскировки для других входящих соединений, без лишней обработки, чистая переадресация трафика, теоретически более высокая производительность, чем у Nginx. + +Примечание: **входящее соединение, в котором находится fallbacks, должно быть TCP+TLS**, это необходимо для разделения трафика на другие входящие соединения WS, входящие соединения, на которые разделяется трафик, не нуждаются в настройке TLS. + +> `dest`: string | number + +Определяет, куда перенаправляется TCP-трафик после дешифрования TLS, в настоящее время поддерживаются два типа адресов (это поле является обязательным, иначе запуск невозможен): + +1. TCP, формат `"addr:port"`, где addr поддерживает IPv4, доменное имя, IPv6, если указано доменное имя, TCP-соединение будет установлено напрямую (без использования встроенного DNS). +2. Unix domain socket, формат - абсолютный путь, например, `"/dev/shm/domain.socket"`, в начале можно добавить `@` для обозначения [abstract](https://www.man7.org/linux/man-pages/man7/unix.7.html), `@@` - для обозначения abstract с заполнением. + +Если указан только порт, можно использовать число или строку, например, `80`, `"80"`, обычно указывает на службу http в открытом виде (addr будет дополнен до `"127.0.0.1"`). + +> `xver`: number + +Отправка [PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt), специально для передачи реального исходного IP-адреса и порта запроса, заполняется версией 1 или 2, по умолчанию 0, то есть не отправляется. При необходимости рекомендуется указать 1. + +В настоящее время при указании 1 или 2 функциональность полностью идентична, отличается только структура, причем первая может быть распечатана, а вторая - двоичная. Входящие TCP- и WS-соединения Xray уже поддерживают прием PROXY protocol. + +::: warning +Если вы [настраиваете Nginx на прием PROXY protocol](https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/#configuring-nginx-to-accept-the-proxy-protocol), помимо установки `proxy_protocol`, необходимо также установить `set_real_ip_from`, иначе могут возникнуть проблемы. +::: + +### Дополнительные замечания + +- Будет выполнено сопоставление с наиболее точным дочерним элементом, порядок дочерних элементов не имеет значения. Если настроено несколько дочерних элементов с одинаковыми `alpn` и `path`, будет использоваться последний. +- Резервирование и разделение трафика - это переадресация на уровне TCP после дешифрования, а не на уровне HTTP, проверка PATH первого пакета выполняется только при необходимости. +- Вы можете просмотреть больше советов и рекомендаций по использованию Fallbacks: + - [Краткое описание функции Fallbacks](../../document/level-1/fallbacks-lv1) + +## Теория Fallbacks + + diff --git a/docs/ru/config/features/multiple.md b/docs/ru/config/features/multiple.md new file mode 100644 index 0000000..d2fd099 --- /dev/null +++ b/docs/ru/config/features/multiple.md @@ -0,0 +1,138 @@ +# Настройка с помощью нескольких файлов + +Программа Xray поддерживает использование нескольких файлов конфигурации. + +Основная цель использования нескольких файлов конфигурации — разделение настроек модулей с разными функциями для удобства управления и обслуживания. + +Эта функция в основном предназначена для обогащения экосистемы Xray. Например, для клиентских GUI обычно реализуются только фиксированные функции, такие как выбор узла, и слишком сложные конфигурации трудно реализовать графически. Можно оставить только один пользовательский каталог конфигурации `confdir` для настройки сложных функций. Для сценариев развертывания сервера достаточно добавить файлы в `confdir` для настройки различных протоколов. + +## Запуск с несколькими файлами + +::: tip +В информации о запуске будет указан каждый считываемый файл конфигурации. Убедитесь, что порядок считывания соответствует ожидаемому. Вы можете контролировать порядок, добавляя префиксы с номерами к именам файлов. Например, `01_имя_файла`, `02_имя_файла`, чем больше число, тем позже файл будет обработан. +::: + +```shell +$ xray run -confdir /etc/xray/confs +``` + +Также можно использовать `Xray.location.confdir` или `Xray_LOCATION_CONFDIR` для указания `confdir`. + +Параметр `-confdir` имеет приоритет над переменной среды. Если параметр указывает на допустимый каталог, значение переменной среды игнорируется. + +## Правила + +### Обычные объекты (`{}`) + +Последующие объекты верхнего уровня перезаписывают или дополняют предыдущие. + +### Массивы (`[]`) + +В конфигурации JSON `inbounds` и `outbounds` имеют структуру массива, для них действуют особые правила: + +- Поиск существующего элемента с тем же `tag` для перезаписи. Если элемент не найден: + - Для `inbounds`: добавляется в конец (порядок элементов в `inbounds` не имеет значения). + - Для `outbounds`: добавляется в начало (по умолчанию используется первый выход в `outbounds`); но если имя файла содержит `tail` (регистр не имеет значения), элемент добавляется в конец. + +## Пример конфигурации + +Предположим, что в папке `confs` есть следующие три файла конфигурации: + +- 01.json + +```json +{ + "log": { + "loglevel": "warning" + }, + "inbounds": [ + { + "tag": "socks", + "protocol": "socks", + "listen": "0.0.0.0", + "port": 8888 + } + ], + "outbounds": [ + { + "tag": "direct", + "protocol": "freedom" + } + ] +} +``` + +- 02.json + +```json +{ + "log": { + "loglevel": "debug" + }, + "inbounds": [ + { + "tag": "socks", + "protocol": "socks", + "listen": "127.0.0.1", + "port": 1080 + } + ], + "outbounds": [ + { + "tag": "block", + "protocol": "blackhole" + } + ] +} +``` + +- 03_tail.json + +```json +{ + "outbounds": [ + { + "tag": "direct2", + "protocol": "freedom" + } + ] +} +``` + +Три конфигурации будут объединены следующим образом: + +```json +{ + "log": { + "loglevel": "debug" // объект верхнего уровня перезаписывает предыдущий + }, + "inbounds": [ + { + "tag": "socks", // перезапись элемента с тем же tag + "protocol": "socks", + "listen": "127.0.0.1", + "port": 1080 + } + ], + "outbounds": [ + { + "tag": "block", // добавлено в начало outbounds + "protocol": "blackhole" + }, + { + "tag": "direct", + "protocol": "freedom" + }, + { + "tag": "direct2", // добавлено в конец, так как имя файла 03_tail.json содержит tail + "protocol": "freedom" + } + ] +} +``` + +::: tip +Вы можете использовать команду `xray run -confdir=./confs -dump` для просмотра объединенной конфигурации. Однако, поскольку ядро использует формат данных protobuf, формат вывода конфигурации для параметра `-dump` будет отличаться. +::: + +