Fallback

Fallback - одна из самых мощных функций Xray, эффективно предотвращающая активное зондирование и позволяющая свободно настраивать совместное использование нескольких служб на часто используемых портах.

Fallback обеспечивает Xray высокой степенью защиты от активного зондирования и имеет уникальный механизм резервирования первого пакета.

Fallback также может разделять трафик различных типов по пути, что позволяет совместно использовать один порт для нескольких служб.

В настоящее время вы можете использовать функцию fallback при использовании протоколов VLESS или Trojan, настроив fallbacks, и создавать очень разнообразные комбинации.

Настройка fallbacks

  "fallbacks": [
    {
      "dest": 80
    }
  ]

fallbacks: [ FallbackObject ]

Массив, содержащий серию мощных конфигураций резервирования и разделения трафика.

FallbackObject

{
  "name": "",
  "alpn": "",
  "path": "",
  "dest": 80,
  "xver": 0
}

fallbacks - это массив, здесь приведено описание конфигурации одного из его элементов.

Элемент fallbacks является необязательным и может использоваться только для комбинации транспорта TCP+TLS.

  • Если этот элемент имеет дочерние элементы, в Inbound TLS необходимо установить "alpn":["http/1.1"].

Обычно сначала нужно настроить набор резервных путей по умолчанию с опущенными или пустыми alpn и path, а затем настроить другие разделения по мере необходимости.

VLESS будет перенаправлять трафик с длиной первого пакета после дешифрования TLS менее 18 байт, неверной версией протокола или неудачной аутентификацией на адрес, указанный в dest.

Для других комбинаций транспорта необходимо удалить элемент fallbacks или все его дочерние элементы. В этом случае Fallback не будет включен, VLESS будет ждать считывания необходимой длины, а в случае неверной версии протокола или сбоя аутентификации соединение будет немедленно разорвано.

name: string

Попытка сопоставить TLS SNI (указание имени сервера), любое значение или пустая строка, по умолчанию "".

alpn: string

Попытка сопоставить результат согласования TLS ALPN, любое значение или пустая строка, по умолчанию "".

При необходимости VLESS попытается прочитать результат согласования TLS ALPN, и в случае успеха выведет в лог realAlpn =. Назначение: решает проблему несовместимости службы h2c Nginx с http/1.1, для которой в Nginx требуется написать две строки listen, по одной для 1.1 и h2c. Примечание: если в fallbacks alpn присутствует "h2", в Inbound TLS необходимо установить "alpn":["h2","http/1.1"] для поддержки доступа h2.

Подсказка

alpn, установленный в Fallback, соответствует фактически согласованному ALPN, а alpn, установленный в Inbound TLS, - это список дополнительных ALPN во время рукопожатия. Это разные вещи.

path: string

Попытка сопоставить HTTP-путь первого пакета, любое значение или пустая строка, по умолчанию пустая строка, если не пустая, то должна начинаться с /, h2c не поддерживается.

Интеллектуальность: при необходимости VLESS попытается просмотреть PATH (не более 55 байт; самый быстрый алгоритм, не выполняет полный разбор HTTP) и в случае успеха выведет в INFO-лог realPath =. Назначение: разделение трафика WebSocket или HTTP-маскировки для других входящих соединений, без лишней обработки, чистая переадресация трафика, теоретически более высокая производительность, чем у Nginx.

Примечание: входящее соединение, в котором находится fallbacks, должно быть TCP+TLS, это необходимо для разделения трафика на другие входящие соединения WS, входящие соединения, на которые разделяется трафик, не нуждаются в настройке TLS.

dest: string | number

Определяет, куда перенаправляется TCP-трафик после дешифрования TLS, в настоящее время поддерживаются два типа адресов (это поле является обязательным, иначе запуск невозможен):

  1. TCP, формат "addr:port", где addr поддерживает IPv4, доменное имя, IPv6, если указано доменное имя, TCP-соединение будет установлено напрямую (без использования встроенного DNS).
  2. Unix domain socket, формат - абсолютный путь, например, "/dev/shm/domain.socket", в начале можно добавить @ для обозначения abstractОткрыть в новой вкладке, @@ - для обозначения abstract с заполнением.

Если указан только порт, можно использовать число или строку, например, 80, "80", обычно указывает на службу http в открытом виде (addr будет дополнен до "127.0.0.1").

xver: number

Отправка PROXY protocolОткрыть в новой вкладке, специально для передачи реального исходного IP-адреса и порта запроса, заполняется версией 1 или 2, по умолчанию 0, то есть не отправляется. При необходимости рекомендуется указать 1.

В настоящее время при указании 1 или 2 функциональность полностью идентична, отличается только структура, причем первая может быть распечатана, а вторая - двоичная. Входящие TCP- и WS-соединения Xray уже поддерживают прием PROXY protocol.

Внимание

Если вы настраиваете Nginx на прием PROXY protocolОткрыть в новой вкладке, помимо установки proxy_protocol, необходимо также установить set_real_ip_from, иначе могут возникнуть проблемы.

Дополнительные замечания

  • Будет выполнено сопоставление с наиболее точным дочерним элементом, порядок дочерних элементов не имеет значения. Если настроено несколько дочерних элементов с одинаковыми alpn и path, будет использоваться последний.
  • Резервирование и разделение трафика - это переадресация на уровне TCP после дешифрования, а не на уровне HTTP, проверка PATH первого пакета выполняется только при необходимости.
  • Вы можете просмотреть больше советов и рекомендаций по использованию Fallbacks:

Теория Fallbacks В разработке