В предыдущих двух частях (1 2) были рассмотрены простейшие варианты балансировщика Xray. В третьей части рассмотрим вариант совместной работы двух балансировщиков. Предположим, есть приоритетный прокси (proxy1), который должен использоваться большую часть времени, есть запасной прокси (proxy2) на случай недоступности первого и есть запасной прокси для запасного (proxy3), который будет использоваться только при недоступности первых двух.
Балансировщик в качестве fallbackTag не может использовать непосредственный переход в другой балансировщик, fallbackTag может направлять трафик только в другой outboundTag. Чтобы перенаправить этот трафик в следующий балансировщик, воспользуемся протоколом loopback (петля). Добавим такое исходящее подключение в файл outbounds.json. Настройки прокси-серверов при этом остаются теми же, что и во второй части цикла статей:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ "outbounds": [ { "protocol": "loopback", "tag": "loopback-out", "settings": { "inboundTag": "loopback-in" // Тег, с которым трафик вернется в роутинг } }, // Подключения к прокси-серверам { "protocol": "vless", "settings": { // подключение к первому серверу // }, "tag": "proxy1" }, { "protocol": "vless", "settings": { // подключение ко второму серверу // }, "tag": "proxy2" }, { "protocol": "vless", "settings": { // подключение к третьему серверу // }, "tag": "proxy3" } ] } |
В первом балансировщике в качестве fallbackTag указываем тег нового исходящего подключения loopback. Второй балансировщик настраиваем как обычно:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
{ "routing": { // Начало настроек балансира // "balancers": [ { "tag": "balancer1", "selector": ["proxy1"], // Если первый прокси недоступен, направляем трафик в loopback "fallbackTag": "loopback-out", "strategy": { "type": "leastPing" } }, { "tag": "balancer2", "selector": ["proxy2"], "fallbackTag": ""proxy3"", "strategy": { "type": "leastPing" } } ], // Кончало настроек балансира // "rules": [ // Перехватываем трафик, пришедший из loopback, и отправляем во второй балансировщик { "type": "field", "inboundTag": ["loopback-in"], "balancerTag": "balancer2" }, { // Общее правило для трафика "balancerTag": "balancer1" } ] } } |
Как видите, в правилах маршрутизации мы ловим трафик, который вернулся через петлю, и перенаправляем его во второй балансировщик. Обязательно поместите правило, перехватывающее inboundTag от петли (в примере это loopback-in), выше остальных правил маршрутизации. Xray читает правила сверху вниз. Если трафик из петли попадёт под какое-то нижестоящее правило, которое снова направит его в balancer1, вы получите бесконечный цикл, и роутер зависнет.
Использование observatory или burstObservatory абсолютно аналогично рассмотренному в предыдущих статьях. Важно только учитывать, чтобы система мониторила доступность реальных прокси, а не второго балансировщика через loopback-out. Ранее мы рассматривали observatory, в этот раз давайте попробуем burstObservatory:
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "burstObservatory": { "subjectSelector": ["proxy"], "pingConfig": { "destination": "https://www.google.com/generate_204", "connectivity": "https://www.google.com/generate_204", "interval": "1m", "sampling": 2 } } } |
Настройка выполнена. Пользуйтесь)