В продолжение первой части статьи рассмотрим вариант настройки xray с несколькими прокси, из которых автоматически выбирается сервер с наименьшим временем отклика, а в случае недоступности всех серверов, произойдёт переключение линка на провайдера, т.е. напрямую, либо на резервное подключение. Файлы конфигурации будут практически такие же, за исключением пары нюансов. Приступаем.
Все настройки, как и в первой части, выполняем локально на роутере или компьютере и используем крайнюю версию xray-core. Настройки подключений к прокси-серверам у вас могут быть прописаны, как в одном файле 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": "vless", "settings": { // подключение к первому серверу // }, "tag": "proxy1" }, { "protocol": "vless", "settings": { // подключение ко второму серверу // }, "tag": "proxy2" }, { "protocol": "vless", "settings": { // подключение к третьему серверу // }, "tag": "proxy3" }, { "protocol": "freedom", "tag": "direct" }, { "protocol": "blackhole", "tag": "block" } ] } |
так и пофайлово (outbounds_1.json, outbounds_2.json, outbounds_3.json, …), в этом случае теги direct и block можете оставить только в одном из файлов, но это не обязательное условие. Так же можно объединить все файлы конфигурации в единый config.json, если вам удобно.
Условимся, что подключениям к прокси-серверам в outbounds присвоены теги proxy1, proxy2, proxy3, …, а прямое подключение имеет тег direct. Добавим в роутинг настройки балансира и заменим направляющий в прокси параметр outboundTag на параметр balancerTag. Для контроля IP-адреса будем использовать ресурс ip.me
routing.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 |
{ "routing": { // Начало настроек балансира // "balancers": [ { "tag": "balancer", "selector": ["proxy"], "fallbackTag": "direct", "strategy": { "type": "leastPing" } } ], // Кончало настроек балансира // "rules": [ { "domain": [ "ip.me" ], "balancerTag": "balancer" // Меняем "outboundTag" на "balancerTag" // }, { "network": "tcp,udp", "outboundTag": "direct" } ] } } |
В параметре selector можно перечислить через запятую все теги прокси-подключений:
1 |
"selector": ["proxy1","proxy2","proxy3"], |
а можно, как в примере, указать только префикс proxy согласно документации:
В параметре fallbackTag, как следует из его названия, указано запасное подключение, на случай если ни один прокси недоступен. Разумеется, тут можно использовать не только direct, но и резервное прокси-подключение, а так же можно пустить трафик через wireguard.
В предлагаемом примере используется стратегия leastPing, по которой приоритет получает наиболее быстро ответивший прокси-сервер. Остальные стратегии смотрите в документации xray, я не заостряю на них внимание, чтобы не раздувать статью.
Следующим шагом создадим конфигурацию обсерватории, позволяющую автоматизировать переключение между серверами и запасным каналом, а так же вернуться к прокси-подключению, когда хотя бы одно из них станет доступным:
observatory.json
1 2 3 4 5 6 7 8 |
{ "observatory": { "subjectSelector":["proxy"], "probeUrl": "https://www.google.com/generate_204", "probeInterval": "60s", "enableConcurrency": true } } |
В этом конфиге проверяем доступность прокси-серверов из массива subjectSelector, пытаясь каждые 60 секунд подключиться через них к адресу, указанному в параметре probeUrl (в subjectSelector так же можно перечислить все теги серверов, а можно, как и в роутинге, использовать префикс proxy). В отличие конфигурации с одним сервером в конфиг добавлен параметр enableConcurrency, который разрешает проверять прокси не по очереди, а одновременно. Как только один из серверов «оживёт», балансировщик переключит маршрутизацию с запасного direct направления на него.
Кроме режима observatory, можно использовать burstObservatory. Оба режима взаимозаменяемы и какого-либо преимущества перед друг другом не имеют, разница заключается в методе мониторинга подключений. Observatory это фоновый мониторинг подключений, а burstObservatory это мониторинг параллельных подключений. Выберите какой-то один режим и не используйте одновременно оба. Подробности настройки burstObservatory смотрите в официальной документации xray, я не заостряю на ней внимание по выше обозначенной причине.