Nikita Korotaev b8524c7437
sync RU docs (#581)
* update log.md

* update dns.md

* update routing.md

* update transport.md

* update socks.md

* update dns.md

* update freedom.md

* update vless.md

* update splithttp.md
2024-09-27 23:24:58 +05:00

9.5 KiB
Raw Blame History

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
}

domainStrategy: "AsIs"
"UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"
"ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"

Значение по умолчанию — "AsIs".

Когда целевым адресом является доменное имя, при настройке соответствующих значений Freedom будет вести себя следующим образом:

  • При использовании "AsIs" Xray будет напрямую использовать системный стек для установления соединения. Приоритет и выбор IP-адреса зависят от системных настроек. По некоторым причинам, UDP-соединения, использующие доменные имена, игнорируют системные настройки и отдают приоритет IPv4.
  • При указании других значений для разрешения будет использоваться встроенный DNS-сервер Xray-core. Если DNSObject не существует, будет использоваться системный DNS. Если имеется несколько подходящих IP-адресов, ядро случайным образом выберет один из них в качестве целевого IP-адреса.
  • "IPv4" означает попытку подключения только по IPv4, "IPv4v6" — попытку подключения по IPv4 или IPv6, но для доменных имен с двумя стеками будет использоваться IPv4 (аналогично для v4v6, не будем повторяться).
  • Если в настройках встроенного DNS указан "queryStrategy", фактическое поведение будет объединено с этим параметром, и будут разрешаться только те типы IP, которые указаны в обоих параметрах. Например, "queryStrategy": "UseIPv4" и "domainStrategy": "UseIP" фактически эквивалентны "domainStrategy": "UseIPv4".
  • При использовании параметров, начинающихся с "Use", если результат разрешения не соответствует требованиям (например, доменное имя имеет только запись A, но используется UseIPv6), будет выполнен откат к AsIs.
  • При использовании параметров, начинающихся с "Force", если результат разрешения не соответствует требованиям, соединение установить не удастся.

::: tip СОВЕТ 1 При использовании режимов "UseIP" или "ForceIP" и указании sendThrough в конфигурации исходящего соединения, Freedom будет автоматически определять необходимый тип IP-адреса (IPv4 или IPv6) на основе значения sendThrough. Если вручную указан только один тип IP-адреса (например, UseIPv4), но он не соответствует локальному адресу, указанному в sendThrough, подключение установить не удастся. :::

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.

"packets": поддерживаются два режима фрагментации: "1-3" — фрагментация потока TCP, применяется к первым трем операциям записи данных на стороне клиента; "tlshello" — фрагментация пакета TLS-рукопожатия.

"length": длина фрагмента (в байтах).

"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

Протокол PROXY обычно используется в сочетании с redirect для перенаправления на сервер Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано.

proxyProtocol принимает значение номера версии протокола PROXY — 1 или 2. Если не указано, по умолчанию используется значение 0 (протокол не используется).