You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
9.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Fallback
> **Fallback - одна из самых мощных функций Xray, эффективно предотвращающая активное зондирование и позволяющая свободно настраивать совместное использование нескольких служб на часто используемых портах.**
Fallback обеспечивает Xray высокой степенью защиты от активного зондирования и имеет уникальный механизм резервирования первого пакета.
Fallback также может разделять трафик различных типов по пути, что позволяет совместно использовать один порт для нескольких служб.
В настоящее время вы можете использовать функцию fallback при использовании протоколов VLESS или Trojan, настроив `fallbacks`, и создавать очень разнообразные комбинации.
## Настройка `fallbacks`
```json
"fallbacks": [
{
"dest": 80
}
]
```
> `fallbacks`: \[ [FallbackObject](#fallbackobject) \]
Массив, содержащий серию мощных конфигураций резервирования и разделения трафика.
### FallbackObject
```json
{
"name": "",
"alpn": "",
"path": "",
"dest": 80,
"xver": 0
}
```
**`fallbacks` - это массив, здесь приведено описание конфигурации одного из его элементов.**
Элемент `fallbacks` является необязательным и может использоваться только для комбинации транспорта TCP+TLS.
- Если этот элемент имеет дочерние элементы, в [Inbound TLS](../transport.md#tlsobject) необходимо установить `"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](../transport.md#tlsobject) необходимо установить `"alpn":["h2","http/1.1"]` для поддержки доступа h2.
::: tip
`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](https://www.man7.org/linux/man-pages/man7/unix.7.html), `@@` - для обозначения abstract с заполнением.
Если указан только порт, можно использовать число или строку, например, `80`, `"80"`, обычно указывает на службу http в открытом виде (addr будет дополнен до `"127.0.0.1"`).
> `xver`: number
Отправка [PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt), специально для передачи реального исходного IP-адреса и порта запроса, заполняется версией 1 или 2, по умолчанию 0, то есть не отправляется. При необходимости рекомендуется указать 1.
В настоящее время при указании 1 или 2 функциональность полностью идентична, отличается только структура, причем первая может быть распечатана, а вторая - двоичная. Входящие TCP- и WS-соединения Xray уже поддерживают прием PROXY protocol.
::: warning
Если вы [настраиваете Nginx на прием PROXY protocol](https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/#configuring-nginx-to-accept-the-proxy-protocol), помимо установки `proxy_protocol`, необходимо также установить `set_real_ip_from`, иначе могут возникнуть проблемы.
:::
### Дополнительные замечания
- Будет выполнено сопоставление с наиболее точным дочерним элементом, порядок дочерних элементов не имеет значения. Если настроено несколько дочерних элементов с одинаковыми `alpn` и `path`, будет использоваться последний.
- Резервирование и разделение трафика - это переадресация на уровне TCP после дешифрования, а не на уровне HTTP, проверка PATH первого пакета выполняется только при необходимости.
- Вы можете просмотреть больше советов и рекомендаций по использованию Fallbacks:
- [Краткое описание функции Fallbacks](../../document/level-1/fallbacks-lv1)
## Теория Fallbacks <Badge text="В разработке" type="warning"/>