Runbook · Цепочка

Нода-мост

Клиент подключается к одной ноде, а она сама выбирает выходную из пула по загрузке. Балансировка целиком на сервере — клиент о выходных нодах не знает.

Xray 25.x Remnawave leastLoad VLESS chain

← Все руководства · Нода XHTTP SelfSteal · Хост с автовыбором

КЛИЕНТ Happ · INCY один vless:// МОСТ Нода-мост inbound + балансировщик BALANCER · LEASTLOAD exit-1 exit-2 exit-3 vless ВЫХОДНЫЕ НОДЫ Нода A Нода B Нода C Интернет
Мост терминирует соединение клиента и тут же открывает своё — к одной из выходных нод. Выбор делает балансировщик на мосту по замерам наблюдателя. Клиент видит один адрес и один vless://; адреса выходных нод знает только мост.

Чем отличается от клиентского балансировщика

Обе схемы дают автовыбор, но платят за него разным. Выбирать стоит осознанно — они не взаимозаменяемы.

Балансировщик у клиентаНода-мост
Где решениев приложении пользователяна сервере
Что нужно от клиентаподдержка Xray JSONничего — обычный vless://
Кто знает адреса выходоввсе пользователитолько мост
Смена состава выходовпереиздание подписокправка конфига моста
Задержкаклиент → выходклиент → мост → выход
Трафик мостасчитается дважды: вход и выход
Единая точка отказанетесть — упал мост, легли все

Мост берут, когда важнее простота на стороне клиента и скрытность выходных нод. Клиентский балансировщик — когда важнее задержка и отказоустойчивость.

Их можно совместить. Сделать два-три моста и раздать их клиентским балансировщиком — тогда пропадает единая точка отказа, а адреса выходов по-прежнему знают только мосты. Цена — обе задержки складываются.

Конвертер vless → outbound

Вставь ссылки выходных нод, по одной в строке. На выходе — куски, которые нужно домешать в твой существующий конфиг моста. В Remnawave такого конвертера нет, поэтому он здесь.

Куски для вставки в существующий конфиг. Ничего лишнего не добавляется.
результат
Вставь ссылки выше и нажми «Собрать».

Куда что класть. Результат — объект с четырьмя ключами верхнего уровня, и каждый мешается в свой раздел:

  • outboundsдобавить к существующему массиву. Твои direct и block остаются на месте, конвертер их не дублирует
  • burstObservatory — положить в корень конфига. Если он уже есть, допиши префикс в его subjectSelector
  • routing.balancers — добавить к массиву балансировщиков
  • routing.rules — правило с balancerTag ставится последним, после всех блокирующих
01

Что нужно

ЭлементТребование
Нода-мостОбычная нода Remnawave с рабочим инбаундом. К ней подключаются пользователи. Канал должен держать двойной объём трафика
Выходные нодыЛюбые серверы, к которым можно подключиться по vless:// — ноды Remnawave, отдельные Xray, 3x-ui. Менять их настройки не нужно
Доступ для мостаУчётные данные на каждой выходной ноде. В Remnawave это отдельный пользователь, см. фазу 02
СетьМост должен доставать выходные ноды напрямую. Если они за фильтрами — проверь до начала
Мост видит весь трафик

Он терминирует соединение пользователя и открывает новое. Внутри моста трафик существует в расшифрованном виде — ровно как на любой обычной ноде, но теперь через одну машину идёт всё.

Держи мост под тем же контролем, что и остальные ноды, и не арендуй его там, где не арендовал бы выходную.

02

Доступ для моста

Мост подключается к выходным нодам как обычный клиент, значит ему нужны свои учётные данные. Отдельные — не переиспользуй чужие.

В Remnawave

  1. Создай пользователя с понятным именем, например BRIDGE
  2. Дай ему сквад, в котором есть инбаунды всех выходных нод
  3. Открой его подписку и забери оттуда vless:// ссылки — по одной на каждую выходную ноду
  4. Ограничения по трафику и сроку либо сними, либо поставь с большим запасом
Лимиты этого пользователя — лимиты всей цепочки

Через него пойдёт трафик всех твоих пользователей разом. Квота в 100 ГБ на пользователе BRIDGE означает, что цепочка встанет, когда суммарно через неё пройдёт 100 ГБ.

То же с датой окончания: истечёт — мост отключится от всех выходов одновременно, и выглядеть это будет как полный отказ сети.

Если выходная нода вне Remnawave

Просто возьми vless:// из её панели — 3x-ui, Marzban, ручной Xray. Конвертеру всё равно, откуда ссылка.

Шлюз фазы

На руках столько vless:// ссылок, сколько выходных нод. Каждую стоит проверить обычным клиентом — подключиться и убедиться, что интернет есть. Сломанную ссылку проще найти сейчас, чем потом внутри цепочки.

03

Аутбаунды на выходы

Конфиг моста остаётся твой — инбаунд, ключи, блокирующие правила не трогаем. Добавляем только то, чего в нём нет.

Вставь ссылки в конвертер выше, нажми «Собрать» и разложи результат по разделам существующего конфига. Что куда — написано под конвертером.

Правило с balancerTag должно быть последним

Роутинг Xray идёт сверху вниз до первого совпадения. Если в твоём конфиге уже есть правило-перехватчик — скажем, {"network": "tcp,udp", "outboundTag": "direct"} — оно сработает раньше, и балансировщик не получит ничего.

Старый перехватчик нужно заменить новым, а не дописать после. Блокирующие правила — приватные сети, bittorrent — остаются выше, они должны срабатывать до балансировщика.

Что конвертер делает со ссылкой

В ссылкеВ аутбаунде
uuid@host:portsettings.vnext[0] — адрес, порт, id пользователя
typestreamSettings.network
securityreality или tls
sni · fp · pbk · sid · spxrealitySettings: serverName, fingerprint, publicKey, shortId, spiderX
path · host · modexhttpSettings или wsSettings
flowusers[0].flow — только для raw/tcp
#подписьигнорируется, тег берётся из префикса
Проверь, нет ли в конфиге блока dns

Правило-перехватчик отправляет в балансировщик всё подряд. Если в конфиге есть dns, запросы на резолв адресов выходных нод попадут туда же — замкнутый круг: чтобы отрезолвить выход, нужен выход.

На мосту этот блок лучше убрать совсем: пусть резолвит системным резолвером, мимо роутинга. Конвертер dns не генерирует намеренно.

Можно убрать резолв совсем. Замени в готовых аутбаундах address на IP выходной ноды, оставив serverName доменом. Reality проверяет SNI, а не адрес подключения, так что соединение не сломается — зато мост перестанет зависеть от DNS вообще.

04

Проверка

1 · Мост поднялся

на мосту
docker logs --tail 50 remnanode
ss -tlnp | grep :443

Ошибок разбора конфига нет, на 443 слушает rw-core.

2 · Трафик выходит через выходную ноду

Подключись клиентом к мосту и проверь внешний IP:

с подключённого клиента
curl -s https://api.ipify.org
Главный признак, что цепочка работает

Должен вернуться IP выходной ноды, а не моста. Если пришёл IP моста — балансировщик до пула не достучался и трафик ушёл в fallbackTag.

3 · Переключение

Выключи ту выходную ноду, чей IP увидел, подожди до минуты и повтори curl. IP должен смениться на другой выход.

Повтори для каждой ноды по очереди — так проверяются все аутбаунды сразу, а не только тот, что выбрался первым.

Скорость переключения

Если при падении выходной ноды интернет пропадает на полминуты и только потом восстанавливается — дело в двух параметрах.

expected — главный

expected задаёт размер набора кандидатов, из которого балансировщик выбирает случайно. Поставишь его равным числу нод — кандидатами станут все, и выбор фактически станет случайным.

Последствие при отказе: пока наблюдатель не пометил упавшую ноду, часть новых соединений продолжает уходить на неё. При трёх нодах это примерно треть. Страницы грузятся наполовину, и выглядит это как «интернета нет», хотя две живые ноды работают.

Ставь expected: 1

Балансировщик будет держаться одной лучшей ноды и переключаться только когда она деградирует. Отказ тогда даёт чистое переключение, а не полосу частичных сбоев.

Поднимать выше единицы имеет смысл, только если нужно размазать нагрузку по выходам намеренно. За это платишь тем, что часть трафика всегда идёт не через лучшую ноду.

Окно наблюдателя

interval × sampling определяет, как быстро мёртвая нода выпадет из пула.

intervalsamplingОдна потеряРеакция на отказ
30s617%до 30 с — одной пробы хватает, но ждать её долго
10s1010%около 20 с, и одиночная потеря пакета ноду не выбивает
5s128%около 10 с, но проб втрое больше

Конвертер ставит interval: "10s", sampling: 10, timeout: "3s". При tolerance: 0.15 одна проваленная проба даёт 10% и прощается, две подряд дают 20% и нода выбывает — то есть примерно за 20 секунд, и от случайного джиттера это защищено.

Уже открытые соединения не спасти

Балансировщик решает, куда направить новое соединение. TCP-сессии, установленные к упавшей ноде до отказа, будут висеть, пока приложение не сдастся по своему таймауту — это не чинится настройками прокси.

Поэтому после переключения страница может висеть, а её перезагрузка уже работает. Судить о скорости восстановления стоит по новым запросам, а не по зависшей вкладке.

Цена решения

ЧтоНасколько
ЗадержкаСкладываются два плеча. Мост рядом с пользователями и выходы подальше — разумно; наоборот — нет
Трафик мостаУдваивается. 1 ТБ пользовательского трафика — 2 ТБ на счётчике моста
Пропускная способностьПотолок цепочки — канал моста, делённый на два
ОтказоустойчивостьМост — единая точка отказа. Выходы резервируются балансировщиком, мост ничем
ШифрованиеДвойное: клиент→мост и мост→выход. Процессору моста это заметно на гигабитных скоростях

Отсюда практическое правило: мост стоит брать с запасом по каналу и процессору, даже если выходные ноды слабые. Он работает за двоих буквально.

Если встало

СимптомЧто смотреть
curl отдаёт IP мостаПул пуст, сработал fallbackTag. Смотри логи моста при loglevel: warning и проверь ссылки поодиночке обычным клиентом
Нет интернета вообщеfallbackTag: "block" при пустом пуле. Временно поставь direct — если интернет появился с IP моста, причина в аутбаундах
При падении ноды интернет пропадает на полминутыexpected больше единицы: часть соединений уходит на мёртвую ноду, пока наблюдатель её не отбраковал. См. «Скорость переключения»
Работает через разТо же самое: часть аутбаундов битая, а выбор случайный по всему набору кандидатов
Все выходы разом отвалилисьКончился трафик или срок у пользователя BRIDGE. Проверь его карточку в панели
Мост не стартуетОшибка в JSON. docker logs remnanode покажет строку
Скорость вдвое ниже ожидаемойЭто не поломка, а свойство схемы. Смотри «Цена решения»
Конвертер ругается на ссылкуСсылка обрезана при копировании либо это не vless://. Транспорты кроме raw, xhttp, ws и grpc конвертер не разбирает

Чек-лист


Конвертер разбирает ссылку по схеме параметров VLESS и собирает аутбаунд по структуре Xray-core. Поддерживаются транспорты raw/tcp, xhttp, ws и grpc с security none, tls и reality. Состояние чек-листа хранится только в этом браузере.