Freedom (fragment, noises)
Freedom — это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть.
OutboundConfigurationObject
{
"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
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
domainStrategy: "AsIs" "UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4" "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"
Значение по умолчанию — "AsIs".
Все параметры по смыслу аналогичны domainStrategy в sockopt.
Только использование 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
Уровень пользователя. Подключение будет использовать локальную политику, соответствующую этому уровню пользователя.
Значение userLevel соответствует значению level в policy. Если не указано, по умолчанию используется значение 0.
fragment: map
Несколько пар «ключ-значение», используемых для управления исходящей фрагментацией TCP. В некоторых случаях это может обмануть системы цензуры, например, обойти черные списки SNI. "length" и "interval" относятся к типу 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
proxyProtocol: number
Протокол PROXY обычно используется в сочетании с redirect для перенаправления на сервер Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано.
proxyProtocol принимает значение номера версии протокола PROXY — 1 или 2. Если не указано, по умолчанию используется значение 0 (протокол не используется).