Обзор функции Fallback
При использовании Xray вы наверняка много раз слышали о функции "fallback". В этой статье мы кратко рассмотрим логику этой функции и способы ее применения.
1. Что такое Fallback в простых словах
Если вы использовали конфигурацию Xray из нашего руководства и настроили автоматическое перенаправление HTTP на HTTPS, то у вас уже есть простой fallback на основе протокола VLESS:
{
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
// ... ...
],
"decryption": "none",
"fallbacks": [
{
"dest": 8080 // По умолчанию перенаправлять на прокси-сервер, защищенный от сканирования
}
]
},
"streamSettings": {
// ... ...
}
}
]
}
Как объяснить этот фрагмент конфигурации простыми словами?
Xrayпрослушивает порт[inbound port]443Это означает, что
Xrayотвечает за прослушивание трафикаHTTPSна порту443.Xrayиспользует протокол[inbound protocol]vlessТолько трафик протокола
vlessбудет обрабатыватьсяXrayи перенаправляться на исходящие модули.Внимание
Примечание: Легковесный протокол
VLESSбыл разработан с целью добавления функции fallback вxray,v2flyи другие ядра, а также для уменьшения избыточных проверок/шифрования. (Конечно, на данный момент протоколtrojanвxrayтакже полностью поддерживает функцию fallback.)Целевой порт fallback
[fallback dest]-8080После того, как
Xrayполучает входящий трафик на порт443, трафик протоколаvlessобрабатывается внутренне и перенаправляется на исходящий модуль. Другой трафик, не относящийся к протоколуvless, перенаправляется на порт8080.Внимание
Вопрос: Использовать единственное или множественное число?
Ответ: Внимательные читатели, должно быть, заметили, что в файле конфигурации используются множественные числа
inbounds,fallbacks, но почему я использую единственное число:inbound,fallback?Потому что множественное число в файле конфигурации означает, что
xrayподдерживает N элементов одного уровня (т.е. N входящих, M резервных и т.д.), а в приведенном выше примере анализа используется только один, поэтому я использовал единственное число.Трафик, перенаправляемый на порт
8080, обрабатывается последующей программойВ нашем примере порт
8080обрабатываетсяNginx, который находит и отображает страницу с маленькой пандой в соответствии с конфигурацией.В итоге, полный маршрут данных в нашем примере выглядит следующим образом:
2. Что такое Fallback (ЧТО, КАК v1)
Основываясь на приведенном выше примере, вы должны понять, что такое fallback (Что) и как он работает (Как), проще говоря, вот эти несколько элементов:
- Fallback происходит после того, как трафик поступает на порт прослушивания
Xray. - Fallback основывается на таких характеристиках трафика, как тип протокола.
- Целью fallback является определенный порт.
- Трафик, для которого выполнен fallback, обрабатывается программой, прослушивающей порт fallback.
3. Зачем нужен Fallback (ЗАЧЕМ v1)
Изначально он был предназначен для защиты от активного зондирования (Active Probing).
Активное зондирование: Проще говоря, это означает, что внешние злоумышленники отправляют определенные сетевые запросы и интерпретируют ответы сервера, чтобы определить, запущены ли на сервере такие прокси-инструменты, как xray, v2fly, shadowsocks и т.д. Если это удается точно определить, сервер может подвергнуться атаке или блокировке.
Интерпретировать ответы сервера можно потому, что полный запрос данных на самом деле состоит из множества этапов обмена данными, и на каждом этапе генерируются определенные характеристики программного обеспечения. Проще говоря:
- Ответ обычного сайта обязательно будет содержать характеристики таких инструментов веб-сервиса и базы данных, как
Nginx,Apache,MySQLи т.д. - Ответ обычного сайта не будет содержать характеристики таких прокси-инструментов, как
xray,v2fly,shadowsocksи т.д.
Таким образом, когда мы предоставляем Xray функцию "fallback" (как в приведенном выше примере, fallback на Nginx), любой запрос, используемый для зондирования, приводит к следующему:
- Зондирующий трафик не может получить доступ к вашим параметрам
VLESSи поэтому будет перенаправлен наNginx. - Весь зондирующий трафик перенаправляется на
Nginx, поэтому ответ VPS-сервера обязательно будет содержать характеристикиNginx. - Поскольку сам
Xrayне отвечает на зондирующий трафик, ответ VPS не будет содержать характеристикиXray.
Таким образом, функция "fallback" решает проблему безопасности активного зондирования сервера с точки зрения логики взаимодействия данных.
4. Полное понимание Fallback (ЧТО, ЗАЧЕМ, КАК v2)
Почему нужно снова говорить о fallback? Потому что выше мы рассмотрели только первую версию fallback, основанную на "протоколе" и защите от активного зондирования.
В процессе постоянного развития и обновления протокола VLESS и функции fallback командой RPRX постепенно выяснилось, что fallback может быть более гибким и мощным. При условии обеспечения защиты от активного зондирования можно в полной мере использовать информацию, содержащуюся в первом пакете данных, для реализации многоэлементного и многоуровневого fallback (например, path, alpn и т.д.).
Основываясь на этой концепции разработки, функция "fallback" постепенно превратилась в то, чем она является сейчас, - в механизм, реализующий полную маскировку --> ws-разделение --> многопротокольное и многопараметрическое разделение. Финальная версия даже полностью заменила функцию разделения, которую раньше выполняли веб-серверы и другие инструменты. А поскольку описанная выше обработка "fallback/разделения" выполняется на этапе определения первого пакета за миллисекунды и не связана с какими-либо операциями с данными, она практически не приводит к потерям производительности.
Таким образом, сейчас полноценная функция "fallback" в Xray обладает следующими свойствами:
- Безопасность: полная защита от атак активного зондирования.
- Эффективность: практически полное отсутствие потерь производительности.
- Гибкость: гибкое разделение данных, повторное использование часто используемых портов (например, 443).
Подсказка
Хотя такой подробный подход может показаться несколько утомительным, только он позволяет в полной мере раскрыть уникальные преимущества полноценного "fallback".
5. Пример и описание многоуровневого fallback
Теперь, когда мы понимаем, что такое "полноценный fallback", мы можем приступить к настройке многоуровневого fallback.
5.1 Сначала скопируем фрагмент конфигурации прослушивания порта 443 на стороне сервера:
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "", // Укажите свой UUID
"flow": "xtls-rprx-vision",
"level": 0,
"email": "love@example.com"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 1310, // По умолчанию перенаправлять на протокол Trojan Xray
"xver": 1
},
{
"path": "/websocket", // Обязательно укажите свой путь
"dest": 1234,
"xver": 1
},
{
"path": "/vmesstcp", // Обязательно укажите свой путь
"dest": 2345,
"xver": 1
},
{
"path": "/vmessws", // Обязательно укажите свой путь
"dest": 3456,
"xver": 1
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"alpn": ["http/1.1"],
"certificates": [
{
"certificateFile": "/path/to/fullchain.crt", // Укажите путь к вашему сертификату, абсолютный путь
"keyFile": "/path/to/private.key" // Укажите путь к вашему закрытому ключу, абсолютный путь
}
]
}
}
}
Как объяснить этот фрагмент конфигурации простыми словами?
Xrayпрослушивает порт (inbound port)443Это означает, что
Xrayотвечает за прослушивание трафикаHTTPSна порту443и использует сертификатTLS, указанный вcertificates, для аутентификации.Xrayиспользует протокол (inbound protocol)vlessТрафик протокола
vlessнапрямую передается вXrayдля дальнейшей обработки.Трафик, не относящийся к протоколу
VLESS, перенаправляется на 4 различных порта fallback:- Трафик с
path, равнымwebsocket, перенаправляется на порт1234для дальнейшей обработки. - Трафик с
path, равнымvmesstcp, перенаправляется на порт2345для дальнейшей обработки. - Трафик с
path, равнымvmessws, перенаправляется на порт3456для дальнейшей обработки. - Весь остальной трафик перенаправляется на порт
1310для дальнейшей обработки.
- Трафик с
xver, равный1, означает, что функцияproxy protocolвключена, и реальный IP-адрес источника будет передан дальше.Структура fallback показана на рисунке ниже:
Куда делся fallback на веб-страницу?
Верно, внимательные читатели должны были заметить, что
fallback на nginx, защищающий от активного зондирования, исчез!!! Почему? Не опасно ли это? Не волнуйтесь, давайте разбираться дальше:
5.2 Фрагмент конфигурации, отвечающий за обработку fallback:
Трафик, перенаправляемый на порт
1310, обрабатывается в соответствии со следующей конфигурацией:{ "port": 1310, "listen": "127.0.0.1", "protocol": "trojan", "settings": { "clients": [ { "password": "", // Укажите свой пароль "level": 0, "email": "love@example.com" } ], "fallbacks": [ { "dest": 80 // Или перенаправлять на другой прокси-сервер, защищенный от сканирования } ] }, "streamSettings": { "network": "tcp", "security": "none", "tcpSettings": { "acceptProxyProtocol": true } } }Смотрите, произошло чудо, в протоколе
trojanпоявился новыйfallbacks. Как уже говорилось ранее, протоколtrojanвxrayтакже обладает полной функциональностью fallback, поэтому на этом этапе протоколtrojanможет снова выполнять проверку и fallback (это и есть легендарный "fallback в fallback"):- Весь трафик протокола
trojanпередается вXrayдля дальнейшей обработки. - Весь остальной трафик перенаправляется на порт
80. Защита от активного зондирования реализована!
- Весь трафик протокола
Трафик, перенаправляемый на порт
1234, на самом деле являетсяvless+ws:{ "port": 1234, "listen": "127.0.0.1", "protocol": "vless", "settings": { "clients": [ { "id": "", // Укажите свой UUID "level": 0, "email": "love@example.com" } ], "decryption": "none" }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "acceptProxyProtocol": true, // Напоминание: если вы используете Nginx/Caddy и т.д. для обратного проксирования WS, удалите эту строку "path": "/websocket" // Обязательно укажите свой путь, он должен совпадать с путем разделения } } }Трафик, перенаправляемый на порт
2345, на самом деле является прямым подключениемvmess:{ "port": 2345, "listen": "127.0.0.1", "protocol": "vmess", "settings": { "clients": [ { "id": "", // Укажите свой UUID "level": 0, "email": "love@example.com" } ] }, "streamSettings": { "network": "tcp", "security": "none", "tcpSettings": { "acceptProxyProtocol": true, "header": { "type": "http", "request": { "path": [ "/vmesstcp" // Обязательно укажите свой путь, он должен совпадать с путем разделения ] } } } } }Трафик, перенаправляемый на порт
3456, на самом деле являетсяvmess+ws(+cdn).Внимание
Да, вы не ослышались, это одна из комбинаций, рекомендованных v2fly, и она полностью поддерживает
CDN. Теперь она добавлена в наш идеальный набор fallback!{ "port": 3456, "listen": "127.0.0.1", "protocol": "vmess", "settings": { "clients": [ { "id": "", // Укажите свой UUID "level": 0, "email": "love@example.com" } ] }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "acceptProxyProtocol": true, // Напоминание: если вы используете Nginx/Caddy и т.д. для обратного проксирования WS, удалите эту строку "path": "/vmessws" // Обязательно укажите свой путь, он должен совпадать с путем разделения } } }Теперь мы можем нарисовать полную схему fallback:
6. Заключение
На этом обзор функции "fallback" в Xray завершен. Надеемся, что эта статья поможет вам лучше понять возможности Xray.
7. Дополнительное задание
Позвольте мне нагло оставить вам дополнительное задание: есть ли что-то, что можно оптимизировать в шаблоне VLESS-TCP-XTLS-WHATEVER, описанном в этой статье?
Подсказка: автоматическое перенаправление HTTP на HTTPS.