diff --git a/docs/.vuepress/config/sidebar/ru.ts b/docs/.vuepress/config/sidebar/ru.ts index fcc974592..9f7870bb3 100644 --- a/docs/.vuepress/config/sidebar/ru.ts +++ b/docs/.vuepress/config/sidebar/ru.ts @@ -64,9 +64,9 @@ export const sidebarRu: SidebarConfig = { text: 'Транспортный уровень', children: [ '/ru/config/transports/grpc.md', - '/ru/config/transports/h2.md', + '/ru/config/transports/http.md', '/ru/config/transports/mkcp.md', - '/ru/config/transports/tcp.md', + '/ru/config/transports/raw.md', '/ru/config/transports/websocket.md', '/ru/config/transports/httpupgrade.md', '/ru/config/transports/splithttp.md' diff --git a/docs/ru/config/outbounds/freedom.md b/docs/ru/config/outbounds/freedom.md index 6f2e43ebc..5fa89fbd2 100644 --- a/docs/ru/config/outbounds/freedom.md +++ b/docs/ru/config/outbounds/freedom.md @@ -62,6 +62,7 @@ Freedom будет принудительно отправлять все дан > `fragment`: map Несколько пар «ключ-значение», используемых для управления исходящей фрагментацией TCP. В некоторых случаях это может обмануть системы цензуры, например, обойти черные списки SNI. +`"length"` и `"interval"` относятся к типу [Int32Range](../../development/intro/guide.md#int32range) `"packets"`: поддерживаются два режима фрагментации: "1-3" — фрагментация потока TCP, применяется к первым трем операциям записи данных на стороне клиента; "tlshello" — фрагментация пакета TLS-рукопожатия. @@ -85,7 +86,7 @@ UDP-шум, используемый для отправки случайных - Если `type` равен `str`, здесь указывается строка для отправки. - Если `type` равен `base64`, здесь указываются двоичные данные, закодированные в Base64. -`"delay"`: задержка в миллисекундах. После отправки этого пакета шума ядро будет ожидать указанное время, прежде чем отправить следующий пакет шума или реальные данные. По умолчанию ожидание отсутствует. Можно установить целое число, например `100`, или строку с диапазоном значений, например `"50-150"`. +`"delay"`: **задержка**, в миллисекундах. После отправки этого пакета шума ядро будет ждать указанное время, прежде чем отправить следующий пакет шума или реальные данные. По умолчанию ожидание отсутствует. Тип: [Int32Range](../../development/intro/guide.md#int32range) > `proxyProtocol`: number diff --git a/docs/ru/config/transport.md b/docs/ru/config/transport.md index 1c4dd5611..01f0a4962 100644 --- a/docs/ru/config/transport.md +++ b/docs/ru/config/transport.md @@ -46,6 +46,9 @@ > `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp" Тип способа передачи, используемого потоком данных соединения, по умолчанию `"raw"` +::: tip +**Начиная с версии v24.9.30**, для более точного отражения фактического поведения, тип передачи `tcp` был переименован в `raw`. Для обеспечения совместимости `"network": "raw"` и `"network": "tcp"`, `rawSettings` и `tcpSettings` являются синонимами. +::: ::: tip "h2" можно записать как "http", "grpc" можно записать как "gun", "kcp" можно записать как "mkcp". @@ -83,9 +86,9 @@ Reality — это самое безопасное на данный момен Конфигурация WebSocket для текущего соединения, действительна только если это соединение использует WebSocket. -> `httpSettings`: [HttpObject](./transports/h2.md) +> `httpSettings`: [HttpObject](./transports/http.md) -Конфигурация HTTP/2 для текущего соединения, действительна только если это соединение использует HTTP/2. +Конфигурация HTTP для текущего соединения, действительна только если это соединение использует HTTP. > `grpcSettings`: [GRPCObject](./transports/grpc.md) diff --git a/docs/ru/config/transports/h2.md b/docs/ru/config/transports/h2.md deleted file mode 100644 index 92a9d9a30..000000000 --- a/docs/ru/config/transports/h2.md +++ /dev/null @@ -1,86 +0,0 @@ -# HTTP/2 - -Способ передачи данных на основе HTTP/2. - -Он полностью реализован в соответствии со стандартом HTTP/2 и может быть перенаправлен через другие HTTP-серверы (например, Nginx). - -В соответствии с рекомендациями HTTP/2, клиент и сервер должны одновременно включать TLS для нормальной работы этого способа передачи. - -HTTP/2 имеет встроенное мультиплексирование, не рекомендуется включать mux.cool при использовании HTTP/2. - -::: tip -Текущая версия способа передачи HTTP/2 **не требует**, чтобы **входящее соединение** (**сервер**) имело конфигурацию TLS. -Это позволяет в среде развертывания с разделением трафика для специальных целей использовать внешний шлюз для обработки TLS-соединения, в то время как Xray будет использоваться в качестве серверного приложения, а связь между шлюзом и Xray будет осуществляться по незашифрованному протоколу http/2, который называется `h2c`. -::: - -::: warning -⚠️ Если вы используете fallback, обратите внимание на следующие моменты: - -- Убедитесь, что (x)tlsSettings.alpn содержит h2, иначе HTTP/2 не сможет завершить TLS-рукопожатие. -- HTTP/2 не может быть разделен по пути, рекомендуется использовать SNI-разделение. - ::: - -## HttpObject - -`HttpObject` соответствует элементу `httpSettings` конфигурации передачи. - -```json -{ - "host": ["xray.com"], - "path": "/random/path", - "read_idle_timeout": 10, - "health_check_timeout": 15, - "method": "PUT", - "headers": { - "Header": ["value"] - } -} -``` - -> `host`: \[string\] - -Массив строк, каждый элемент которого является доменным именем. - -Клиент будет случайным образом выбирать доменное имя из списка для связи, а сервер будет проверять, находится ли доменное имя в списке. - -::: tip -Если не указать `"httpSettings"` или оставить значение `"host": []` пустым, то будет использоваться значение по умолчанию `"www.example.com"`. Для успешного подключения значение `"host"` должно быть одинаковым на обеих сторонах. `"host": [""]` не является пустым значением. -::: - -> `path`: string - -HTTP-путь, начинающийся с `/`, должен быть одинаковым у клиента и сервера. - -Значение по умолчанию: `"/"`. - -> `read_idle_timeout`: number - -Время в секундах, по истечении которого, если данные не были получены, будет выполнена проверка работоспособности. - -По умолчанию проверка работоспособности **не включена**. - -::: tip -Настройка требуется **только** на стороне **исходящего соединения** (**клиента**). -::: - -::: tip -Может решить некоторые проблемы с "обрывом" соединения. -::: - -> `health_check_timeout`: number - -Время ожидания ответа проверки работоспособности в секундах. Если в течение этого времени проверка работоспособности не будет завершена, она будет считаться неудачной. Значение по умолчанию: `15`. - -::: tip -Настройка требуется **только** на стороне **исходящего соединения** (**клиента**). -::: - -> `method`: string - -HTTP-метод. Значение по умолчанию: `"PUT"`. - -При настройке следует использовать значения, перечисленные [здесь](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods). - -> `headers`: map{ string: \[string\] } - -Пользовательские HTTP-заголовки, пара ключ-значение, где каждый ключ представляет собой имя HTTP-заголовка, а значение представляет собой массив. diff --git a/docs/ru/config/transports/http.md b/docs/ru/config/transports/http.md new file mode 100644 index 000000000..b61fecc8a --- /dev/null +++ b/docs/ru/config/transports/http.md @@ -0,0 +1,88 @@ +# HTTP + +Тип транспорта, основанный на HTTP/2 или HTTP/3. + +Он полностью реализован в соответствии со стандартом HTTP и может быть проксирован через другие HTTP-серверы (например, Nginx). + +Клиент должен включить TLS для корректной работы этого типа транспорта. + +HTTP/2 и 3 имеют встроенное мультиплексирование, поэтому не рекомендуется включать mux.cool при их использовании. + +::: tip +**В текущей версии для транспорта HTTP/2 не требуется обязательная настройка TLS на стороне сервера.** + +Это позволяет использовать Xray в качестве бэкенд-приложения в специальных сценариях развертывания с разделением трафика, где внешний шлюз обрабатывает TLS-соединение, а связь между шлюзом и Xray осуществляется по протоколу HTTP без шифрования. +::: + +::: tip +Этот транспорт будет работать в режиме h3, только если alpn содержит только `h3`. +::: + +::: warning +- HTTP/2 и HTTP/3 не могут быть разделены по путям отката Xray. Использование разделения по путям отката не рекомендуется. +::: + +## HttpObject + +`HttpObject` соответствует элементу `httpSettings` в конфигурации транспорта. + +```json +{ + "host": ["xray.com"], + "path": "/random/path", + "read_idle_timeout": 10, + "health_check_timeout": 15, + "method": "PUT", + "headers": { + "Header": ["value"] + } +} +``` + +> `host`: \[string\] + +Массив строк, каждый элемент которого является доменным именем. + +Клиент случайным образом выбирает доменное имя из списка для связи, а сервер проверяет, находится ли доменное имя в списке. + +::: tip +Если не указывать `"httpSettings"` или оставить `"host": []` пустым, будет использоваться значение по умолчанию `"www.example.com"`. Для успешного подключения необходимо, чтобы значения `"host"` на обеих сторонах совпадали. `"host": [""]` не является пустым значением. +::: + +> `path`: string + +Путь HTTP, начинающийся с `/`. Должен совпадать на клиенте и сервере. + +Значение по умолчанию: `"/"`. + +> `read_idle_timeout`: number + +Время ожидания чтения в секундах. Если в течение этого времени не получено никаких данных, будет выполнена проверка работоспособности. + +По умолчанию проверка работоспособности **отключена**. + +::: tip +Настраивается **только** на стороне **клиента**. +::: + +::: tip +Может помочь решить некоторые проблемы с "обрывом соединения". +::: + +> `health_check_timeout`: number + +Время ожидания проверки работоспособности в секундах. Если проверка работоспособности не будет завершена в течение этого времени, она считается неудачной. Значение по умолчанию: `15`. + +::: tip +Настраивается **только** на стороне **клиента**. +::: + +> `method`: string + +HTTP-метод. Значение по умолчанию: `"PUT"`. + +При настройке следует руководствоваться значениями, перечисленными [здесь](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods). + +> `headers`: map{ string: \[string\] } + +**Только для клиента.** Пользовательские HTTP-заголовки. Представляет собой пару ключ-значение, где каждый ключ является именем HTTP-заголовка, а значением является массив. diff --git a/docs/ru/config/transports/splithttp.md b/docs/ru/config/transports/splithttp.md index 9355a5a9b..5274bc470 100644 --- a/docs/ru/config/transports/splithttp.md +++ b/docs/ru/config/transports/splithttp.md @@ -87,7 +87,7 @@ > `xPaddingBytes`: int | string -Задает размер заполнения для запросов (исходящих) и ответов (входящих), чтобы уменьшить цифровой след запроса. Единица измерения — байты. Значение по умолчанию — `"100-1000"`, каждый раз будет выбираться случайное число из этого диапазона. Также может быть одним числом, например `"200"` или `200`. +Задает размер заполнения для запросов (исходящих) и ответов (входящих), используемый для уменьшения отпечатка запроса. Единица измерения: байты. Значение по умолчанию: `"100-1000"`. При каждом запросе случайным образом выбирается число из этого диапазона. Тип: [Int32Range](../../development/intro/guide.md#int32range) Значение `-1` полностью отключает заполнение. @@ -112,7 +112,7 @@ Объяснение терминов: - Потоки будут мультиплексироваться в физические соединения, например: Соединение 1 (Поток 1, Поток 2, Поток 3) Соединение 2 (Поток 4, Поток 5, Поток 6) ... и так далее. В других источниках вы можете встретить описание "соединение-подключение", это то же самое. -- Все поля, описанные ниже, имеют тип int/string и поддерживают как фиксированные значения (например, `16`), так и диапазоны значений (например, `"8-32"`). +- Все следующие поля имеют тип [Int32Range](../../development/intro/guide.md#int32range): > `maxConcurrency`: int/string diff --git a/docs/ru/development/intro/guide.md b/docs/ru/development/intro/guide.md index 5c2d01dd7..07382607d 100644 --- a/docs/ru/development/intro/guide.md +++ b/docs/ru/development/intro/guide.md @@ -130,6 +130,24 @@ Xray-core - Один файл должен содержать один основной тип и связанные с ним приватные функции. - Тестовые файлы, такие как Mock и другие утилиты, помещайте в подкаталог testing. +#### Int32Range + +**Для конечного пользователя** + +Значение, представляющее собой необязательный диапазон. Возможные варианты записи: + +- Отдельное число или диапазон, заключенные в кавычки: + - `""` (считается как 0). Обратите внимание, что полное отсутствие настройки поля и установка пустого значения могут иметь разное значение. + - `"114"` + - `"114-514"` +- Отдельное целое число (int). В этом случае возможно указать только одно число: + - `114` + +**Для разработчика** + +Если вам нужно использовать диапазон в файле конфигурации, используйте тип `Int32Range`. Для получения значений используйте `.From` и `.To` вместо использования строкового типа (`string`) и последующего ручного разбора. + +Метод `.EnsureOrder()` можно использовать для обмена значений From и To, если From больше, чем To (при необходимости).