В предыдущих двух частях (1 2) были рассмотрены простейшие варианты балансировщика Xray. В третьей части рассмотрим вариант совместной работы двух балансировщиков. Предположим, есть приоритетный прокси (proxy1), который должен использоваться большую часть времени, есть запасной прокси (proxy2) на случай недоступности первого и есть запасной прокси для запасного (proxy3), который будет использоваться только при недоступности первых двух.

Балансировщик в качестве fallbackTag не может использовать непосредственный переход в другой балансировщик, fallbackTag может направлять трафик только в другой outboundTag. Чтобы перенаправить этот трафик в следующий балансировщик, воспользуемся протоколом loopback (петля). Добавим такое исходящее подключение в файл outbounds.json. Настройки прокси-серверов при этом остаются теми же, что и во второй части цикла статей:

В первом балансировщике в качестве fallbackTag указываем тег нового исходящего подключения loopback. Второй балансировщик настраиваем как обычно:

Как видите, в правилах маршрутизации мы ловим трафик, который вернулся через петлю, и перенаправляем его во второй балансировщик. Обязательно поместите правило, перехватывающее inboundTag от петли (в примере это loopback-in), выше остальных правил маршрутизации. Xray читает правила сверху вниз. Если трафик из петли попадёт под какое-то нижестоящее правило, которое снова направит его в balancer1, вы получите бесконечный цикл, и роутер зависнет.

Использование observatory или burstObservatory абсолютно аналогично рассмотренному в предыдущих статьях. Важно только учитывать, чтобы система мониторила доступность реальных прокси, а не второго балансировщика через loopback-out. Ранее мы рассматривали observatory, в этот раз давайте попробуем burstObservatory:

Настройка выполнена. Пользуйтесь)