update freedom.md

pull/581/head
iambabyninja 2024-09-27 22:59:57 +05:00
parent dbadd75ccb
commit fd777f524f
1 changed files with 49 additions and 28 deletions

View File

@ -1,6 +1,6 @@
# Freedom # Freedom (fragment, noises)
Freedom - это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть. Freedom это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть.
## OutboundConfigurationObject ## OutboundConfigurationObject
@ -12,8 +12,15 @@ Freedom - это исходящий протокол, который можно
"fragment": { "fragment": {
"packets": "tlshello", "packets": "tlshello",
"length": "100-200", "length": "100-200",
"interval": "10-20" // в миллисекундах "interval": "10-20" // единица измерения: мс
}, },
"noises": [
{
"type": "base64",
"packet": "7nQBAAABAAAAAAAABnQtcmluZwZtc2VkZ2UDbmV0AAABAAE=",
"delay": "10-16"
}
],
"proxyProtocol": 0 "proxyProtocol": 0
} }
``` ```
@ -22,52 +29,66 @@ Freedom - это исходящий протокол, который можно
> "UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"<br> > "UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"<br>
> "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" > "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"
Значение по умолчанию: `"AsIs"`. Значение по умолчанию `"AsIs"`.
Если целевой адрес является доменным именем, настройте соответствующее значение для режима работы Freedom: Когда целевым адресом является доменное имя, при настройке соответствующих значений Freedom будет вести себя следующим образом:
- При использовании `"AsIs"` Xray будет напрямую использовать системный стек для установления соединения, приоритет и выбор IP будут зависеть от системных настроек. По некоторым причинам UDP-соединения, использующие доменные имена, будут игнорировать системные настройки и отдавать приоритет IPv4. - При использовании `"AsIs"` Xray будет напрямую использовать системный стек для установления соединения. Приоритет и выбор IP-адреса зависят от системных настроек. По некоторым причинам, UDP-соединения, использующие доменные имена, игнорируют системные настройки и отдают приоритет IPv4.
- При указании других значений для разрешения будет использоваться [встроенный DNS-сервер](../dns.md) Xray-core. Если DNSObject отсутствует, будет использоваться системный DNS. Если существует несколько подходящих IP-адресов, ядро случайным образом выберет один IP-адрес в качестве целевого. - При указании других значений для разрешения будет использоваться [встроенный DNS-сервер](../dns.md) Xray-core. Если `DNSObject` не существует, будет использоваться системный DNS. Если имеется несколько подходящих IP-адресов, ядро случайным образом выберет один из них в качестве целевого IP-адреса.
- `"IPv4"` означает попытку подключения только с использованием IPv4, `"IPv4v6"` - попытку подключения с использованием IPv4 или IPv6, но с предпочтением IPv4 для доменных имен с поддержкой обоих протоколов. (То же самое относится и к v4v6, но в обратном порядке, поэтому здесь не приводится). - `"IPv4"` означает попытку подключения только по IPv4, `"IPv4v6"` — попытку подключения по IPv4 или IPv6, но для доменных имен с двумя стеками будет использоваться IPv4 (аналогично для v4v6, не будем повторяться).
- Если в настройках встроенного DNS указан параметр `"queryStrategy"`, фактическое поведение будет объединено с этой опцией, и будут разрешаться только те типы IP, которые включены в обе опции. Например, `"queryStrategy": "UseIPv4"` и `"domainStrategy": "UseIP"` фактически эквивалентны `"domainStrategy": "UseIPv4"`. - Если в настройках встроенного DNS указан `"queryStrategy"`, фактическое поведение будет объединено с этим параметром, и будут разрешаться только те типы IP, которые указаны в обоих параметрах. Например, `"queryStrategy": "UseIPv4"` и `"domainStrategy": "UseIP"` фактически эквивалентны `"domainStrategy": "UseIPv4"`.
- При использовании опций, начинающихся с `"Use"`, если результаты разрешения не соответствуют требованиям (например, доменное имя имеет только результат разрешения IPv4, но используется UseIPv6), будет выполнен откат к AsIs. - При использовании параметров, начинающихся с `"Use"`, если результат разрешения не соответствует требованиям (например, доменное имя имеет только запись A, но используется `UseIPv6`), будет выполнен откат к `AsIs`.
- При использовании опций, начинающихся с `"Force"`, если результаты разрешения не соответствуют требованиям, соединение не будет установлено. - При использовании параметров, начинающихся с `"Force"`, если результат разрешения не соответствует требованиям, соединение установить не удастся.
::: tip СОВЕТ 1 ::: tip СОВЕТ 1
При использовании режимов `"UseIP"` или `"ForceIP"` и указании `sendThrough` в [конфигурации исходящего соединения](../outbound.md#outboundobject) Freedom будет автоматически определять необходимый тип IP (IPv4 или IPv6) на основе значения `sendThrough`. Если вручную указать один тип IP (например, UseIPv4), но он не совпадает с локальным адресом, указанным в `sendThrough`, соединение не будет установлено. При использовании режимов `"UseIP"` или `"ForceIP"` и указании `sendThrough` в [конфигурации исходящего соединения](../outbound.md#outboundobject), Freedom будет автоматически определять необходимый тип IP-адреса (IPv4 или IPv6) на основе значения `sendThrough`. Если вручную указан только один тип IP-адреса (например, `UseIPv4`), но он не соответствует локальному адресу, указанному в `sendThrough`, подключение установить не удастся.
::: :::
> `redirect`: адрес_порт > `redirect`: address_port
Freedom будет принудительно отправлять все данные на указанный адрес (а не на адрес, указанный во входящем соединении). Freedom будет принудительно отправлять все данные на указанный адрес (а не на адрес, указанный во входящем соединении).
Его значение представляет собой строку, например: `"127.0.0.1:80"`, `":1234"`. Значение — строка, например: `"127.0.0.1:80"`, `":1234"`.
Если адрес не указан, например, `":443"`, Freedom не будет изменять исходный целевой адрес. Если адрес не указан, например `":443"`, Freedom не будет изменять исходный целевой адрес.
Если порт равен `0`, например, `"xray.com: 0"`, Freedom не будет изменять исходный порт. Если порт равен `0`, например `"xray.com: 0"`, Freedom не будет изменять исходный порт.
> `userLevel`: number > `userLevel`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя. Уровень пользователя. Подключение будет использовать [локальную политику](../policy.md#levelpolicyobject), соответствующую этому уровню пользователя.
Значение userLevel соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0. Значение `userLevel` соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию используется значение `0`.
> `fragment`: map > `fragment`: map
Некоторые пары "ключ-значение" для управления исходящей TCP-фрагментацией, которые в некоторых случаях могут обмануть систему цензуры, например, обойти черный список SNI. Несколько пар «ключ-значение», используемых для управления исходящей фрагментацией TCP. В некоторых случаях это может обмануть системы цензуры, например, обойти черные списки SNI.
`"packets"`: поддерживаются два режима фрагментации: "1-3" - это фрагментация потока TCP, применяемая к первым трем операциям записи данных на стороне клиента. "tlshello" - это фрагментация пакета TLS-рукопожатия. `"packets"`: поддерживаются два режима фрагментации: "1-3" — фрагментация потока TCP, применяется к первым трем операциям записи данных на стороне клиента; "tlshello" — фрагментация пакета TLS-рукопожатия.
`"length"`: длина фрагмента пакета (в байтах). `"length"`: длина фрагмента (в байтах).
`"interval"`: интервал фрагментации (в миллисекундах). `"interval"`: интервал между фрагментами (в мс).
Если значение равно `0` и установлено `"packets": "tlshello"`, фрагментированный пакет Client Hello будет отправлен в одном TCP-пакете (если его исходный размер не превышает MSS или MTU, что приводит к автоматической фрагментации системой).
> `noise`: array
UDP-шум, используемый для отправки случайных данных в качестве "шума" перед установлением UDP-соединения. Наличие этой структуры считается включением. Это может обмануть снифферы, но также может нарушить нормальное соединение. Используйте на свой страх и риск. По этой причине он обходит порт 53, так как это нарушает работу DNS.
Массив, в котором можно определить несколько пакетов шума для отправки. Отдельный элемент массива определяется следующим образом:
`"type"`: тип пакета шума. В настоящее время поддерживаются `"rand"` (случайные данные), `"str"` (пользовательская строка) и `"base64"` (пользовательские двоичные данные, закодированные в Base64).
`"packet"`: содержимое пакета данных, основанное на предыдущем значении `type`.
- Если `type` равен `rand`, здесь указывается длина случайных данных. Это может быть фиксированное значение, например `"100"`, или диапазон значений, например `"50-150"`.
- Если `type` равен `str`, здесь указывается строка для отправки.
- Если `type` равен `base64`, здесь указываются двоичные данные, закодированные в Base64.
`"delay"`: задержка в миллисекундах. После отправки этого пакета шума ядро будет ожидать указанное время, прежде чем отправить следующий пакет шума или реальные данные. По умолчанию ожидание отсутствует. Можно установить целое число, например `100`, или строку с диапазоном значений, например `"50-150"`.
> `proxyProtocol`: number > `proxyProtocol`: number
Протокол PROXY обычно используется в сочетании с `redirect` для перенаправления на Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано. Протокол PROXY обычно используется в сочетании с `redirect` для перенаправления на сервер Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано.
Значение proxyProtocol - это номер версии протокола PROXY, возможные значения: `1` или `2`. Если не указано, используется значение по умолчанию - `0` (протокол не используется).
`proxyProtocol` принимает значение номера версии протокола PROXY — `1` или `2`. Если не указано, по умолчанию используется значение `0` (протокол не используется).