Блог Clearway

Автопереключение между входами в Xray: observatory, balancer и проверка через туннель

Коротко

Чтобы клиент сам уходил с упавшего входа, в Xray нужен balancer поверх нескольких outbound (например, два CDN-входа на каждый сервер) и observatory, который проверяет каждый outbound настоящим HTTP-запросом через туннель, а не пингом. Проверка по URL вроде https://www.gstatic.com/generate_204 отсекает случай «соединение есть, а трафик не идёт». Стратегия leastPing выбирает самый быстрый живой маршрут, fallbackTag задаёт вход, на который уходить, если проверки не прошли у всех.

Почему пинга недостаточно

Через CDN соединение может устанавливаться, а данные — не идти: TLS до узла CDN проходит, а дальше узел отвечает ошибкой или рвёт поток. Пинг до CDN-домена (или TCP-проверка) такой маршрут считает живым.

Надёжный признак — настоящий HTTP-запрос через весь туннель: от клиента через CDN-вход, шлюз и ноду до внешнего сайта. Если запрос к generate_204 вернулся — маршрут рабочий целиком.

Схема: outbound-ы, observatory, balancer

  1. Outbound на каждый маршрут. Для каждого сервера — по outbound на каждый вход, с понятными тегами: cw-de-entry2, cw-de-entry1 и т. д.
  2. Observatory периодически проверяет каждый outbound запросом через него.
  3. Balancer выбирает outbound по результатам проверки.
  4. Routing отправляет трафик не в конкретный outbound, а в balancer.

Пример конфига

"burstObservatory": {
  "subjectSelector": ["cw-"],
  "pingConfig": {
    "destination": "https://www.gstatic.com/generate_204",
    "interval": "30s",
    "sampling": 3,
    "timeout": "5s"
  }
},
"routing": {
  "balancers": [
    {
      "tag": "cw-balancer",
      "selector": ["cw-"],
      "strategy": { "type": "leastPing" },
      "fallbackTag": "cw-de-entry2"
    }
  ],
  "rules": [
    { "type": "field", "network": "tcp,udp", "balancerTag": "cw-balancer" }
  ]
}
  • subjectSelector и selector выбирают outbound-ы по префиксу тега.
  • burstObservatory делает несколько проб (sampling) — устойчивее к единичным потерям, чем обычный observatory.
  • fallbackTag — вход, на который уходить, если проверки не прошли нигде. Ставьте самый надёжный.
  • Вместо leastPing можно взять leastLoad с ограничением maxRTT (например, 1500ms): тогда маршруты медленнее порога не выбираются вовсе.

Частые ошибки

  • Слишком частые пробы. interval 5–10 секунд на десятке outbound-ов у тысяч абонентов — это заметная нагрузка и лишний трафик. 30–60 секунд достаточно.
  • Проба через DNS, который недоступен в белых списках. Если домены входов резолвятся через 1.1.1.1, проверка будет падать на мобильном интернете не из-за маршрута, а из-за DNS — см. разбор про DNS в режиме белых списков.
  • Проба на «тяжёлый» URL. Используйте лёгкий ответ без тела, вроде generate_204, а не главную страницу сайта.
  • Нет fallbackTag. Если все пробы упали (например, кратковременно пропала сеть), без fallback balancer может не выбрать ничего.

Частые вопросы

observatory или burstObservatory?

burstObservatory: он делает несколько проб за интервал и меньше реагирует на единичные потери. Для мобильных сетей это важно.

Какой URL использовать для проверки?

Лёгкий ответ без тела, доступный из-за выхода ноды: https://www.gstatic.com/generate_204 или аналог. Проверка идёт через туннель, поэтому доступность URL из России не важна.

Можно ли так собрать оба входа Clearway?

Да: по outbound на каждый вход каждого сервера, fallbackTag — на «Вход 2».

Whitelisted-вход для вашего VPN-сервиса

Clearway даёт «белый» CDN-вход перед вашей нодой — устойчивый к троттлингу операторов. Первые 10 ГБ бесплатно, без карты.

Попробовать →