mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-09-30 02:48:12 +03:00
* ECH and Sniffing: Explaining when to block QType 65 * Router: Clarifying the logic between GeoIP matchers * Explaining the impact of domainStrategy on happyEyeballs * Add link to inbound and outbound protocols * rewrite routing with dns tutorial + add images * rewrite dns page * Make proxySettings clearer * Metrics: Add goroutine pprof file requirement for memory issues * upd RU lang
90 lines
7.3 KiB
Markdown
90 lines
7.3 KiB
Markdown
# Freedom (fragment, noises)
|
|
|
|
Freedom — это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть.
|
|
|
|
## OutboundConfigurationObject
|
|
|
|
```json
|
|
{
|
|
"domainStrategy": "AsIs",
|
|
"redirect": "127.0.0.1:3366",
|
|
"userLevel": 0,
|
|
"fragment": {
|
|
"packets": "tlshello",
|
|
"length": "100-200",
|
|
"interval": "10-20" // единица измерения: мс
|
|
},
|
|
"noises": [
|
|
{
|
|
"type": "base64",
|
|
"packet": "7nQBAAABAAAAAAAABnQtcmluZwZtc2VkZ2UDbmV0AAABAAE=",
|
|
"delay": "10-16"
|
|
}
|
|
],
|
|
"proxyProtocol": 0
|
|
}
|
|
```
|
|
|
|
> `domainStrategy`: "AsIs"
|
|
> "UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"
|
|
> "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"
|
|
|
|
Значение по умолчанию — `"AsIs"`.
|
|
|
|
Все параметры по смыслу аналогичны `domainStrategy` в [sockopt](../transport.md#sockoptobject).
|
|
|
|
Только использование `AsIs` в этом разделе позволяет передать доменное имя в последующий модуль `sockopt`. Если установить значение, отличное от `AsIs`, домен будет разрешен в конкретный IP, что сделает последующие настройки `sockopt.domainStrategy` и связанный с ними механизм `happyEyeballs` недействительными. (Если вы не изменяли эти настройки, негативного влияния не будет).
|
|
|
|
По определенным причинам при отправке UDP протокол Freedom игнорирует `domainStrategy` в `sockopt` и по умолчанию принудительно отдает предпочтение IPv4.
|
|
|
|
> `redirect`: address_port
|
|
|
|
Freedom будет принудительно отправлять все данные на указанный адрес (а не на адрес, указанный во входящем соединении).
|
|
|
|
Значение — строка, например: `"127.0.0.1:80"`, `":1234"`.
|
|
|
|
Если адрес не указан, например `":443"`, Freedom не будет изменять исходный целевой адрес.
|
|
Если порт равен `0`, например `"xray.com: 0"`, Freedom не будет изменять исходный порт.
|
|
|
|
> `userLevel`: number
|
|
|
|
Уровень пользователя. Подключение будет использовать [локальную политику](../policy.md#levelpolicyobject), соответствующую этому уровню пользователя.
|
|
|
|
Значение `userLevel` соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию используется значение `0`.
|
|
|
|
> `fragment`: map
|
|
|
|
Несколько пар «ключ-значение», используемых для управления исходящей фрагментацией TCP. В некоторых случаях это может обмануть системы цензуры, например, обойти черные списки SNI.
|
|
`"length"` и `"interval"` относятся к типу [Int32Range](../../development/intro/guide.md#int32range)
|
|
|
|
`"packets"`: поддерживаются два режима фрагментации: "1-3" — фрагментация потока TCP, применяется к первым трем операциям записи данных на стороне клиента; "tlshello" — фрагментация пакета TLS-рукопожатия.
|
|
|
|
`"length"`: длина фрагмента (в байтах).
|
|
|
|
`"interval"`: интервал между фрагментами (в мс).
|
|
|
|
Если значение равно `0` и установлено `"packets": "tlshello"`, фрагментированный пакет Client Hello будет отправлен в одном TCP-пакете (если его исходный размер не превышает MSS или MTU, что приводит к автоматической фрагментации системой).
|
|
|
|
> `noises`: array
|
|
|
|
UDP-шум, используемый для отправки случайных данных в качестве "шума" перед установлением UDP-соединения. Наличие этой структуры считается включением. Это может обмануть снифферы, но также может нарушить нормальное соединение. Используйте на свой страх и риск. По этой причине он обходит порт 53, так как это нарушает работу DNS.
|
|
|
|
Массив, в котором можно определить несколько пакетов шума для отправки. Отдельный элемент массива определяется следующим образом:
|
|
|
|
`"type"`: тип пакета шума. В настоящее время поддерживаются `"rand"` (случайные данные), `"str"` (пользовательская строка) и `"base64"` (пользовательские двоичные данные, закодированные в Base64).
|
|
|
|
`"packet"`: содержимое пакета данных, основанное на предыдущем значении `type`.
|
|
|
|
- Если `type` равен `rand`, здесь указывается длина случайных данных. Это может быть фиксированное значение, например `"100"`, или диапазон значений, например `"50-150"`.
|
|
- Если `type` равен `str`, здесь указывается строка для отправки.
|
|
- Если `type` имеет значение `hex`, здесь указываются двоичные данные в шестнадцатеричном представлении.
|
|
- Если `type` равен `base64`, здесь указываются двоичные данные, закодированные в Base64.
|
|
|
|
`"delay"`: **задержка**, в миллисекундах. После отправки этого пакета шума ядро будет ждать указанное время, прежде чем отправить следующий пакет шума или реальные данные. По умолчанию ожидание отсутствует. Тип: [Int32Range](../../development/intro/guide.md#int32range)
|
|
|
|
> `proxyProtocol`: number
|
|
|
|
Протокол PROXY обычно используется в сочетании с `redirect` для перенаправления на сервер Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано.
|
|
|
|
`proxyProtocol` принимает значение номера версии протокола PROXY — `1` или `2`. Если не указано, по умолчанию используется значение `0` (протокол не используется).
|