Диагностика

Пустой outbounds: подключение есть, а трафика нет

Reality-хендшейк проходит, панель зелёная, но страницы не грузятся — расшифрованному трафику некуда выйти. Диагностика и фикс без гаданий.

7 мин чтения

Симптом: всё зелёное, а страницы не грузятся

Клиент подключается, панель показывает online/connected, пинг до ноды живой, Reality-хендшейк проходит — openssl s_client отдаёт сертификат маскировочной цели. Но наружу трафик не выходит: страницы не грузятся, спидтест показывает «n/a», всё висит. Железо ноды при этом исправно: curl https://… с самой ноды возвращает 200, ip_forward = 1, MASQUERADE на месте.

Это классический симптом пустого outbounds в config-профиле.

Механизм

В профиле Xray-конфигурация имеет "outbounds": [] или пустой routing. Reality-инбаунд принимает и расшифровывает соединение — поэтому панель видит online. Но Xray некуда деть расшифрованный трафик: нет outbound freedom. Пакеты входят и умирают на ноде.

Рабочий профиль обязан иметь оба выхода:

"outbounds": [
  { "tag": "DIRECT", "protocol": "freedom" },
  { "tag": "BLOCK",  "protocol": "blackhole" }
]

Как это заносят: автоматический проход добавлял один инбаунд и передал PATCH с полным config, в котором не было блока outbounds. Профиль перезаписался целиком — выход затёрся для всех нод этого профиля разом.

Диагностика (только чтение)

Прогнать все профили и найти те, где инбаунды есть, а outbounds пуст:

для каждого профиля: inb = инбаунды кроме 'api', ob = outbounds
если inb непуст, а ob пуст → ПУСТО, чинить

Два обманчивых момента. Реальная конфигурация на ноде в файле не лежит — панель держит её в памяти, поэтому проверять надо через API профиля, а не cat на ноде. И «всё живо» с самой ноды ничего не доказывает: curl с ноды идёт мимо xray-инбаунда, его 200 не говорит о туннеле ничего.

Фикс

GET свежего профиля → снапшот → добавить оба outbounds → PATCH → пересинк ноды. Пересинк надёжнее делать полным рестартом контейнера ноды (docker restart): панельный restart отдаёт eventSent: true, но xray на ноде не всегда реально перезапускается — PID не меняется, порт не поднимается. Проверка: ss -tlnp | grep <порт> показывает инбаунд.

Подводные камни

Вывод. «Online, но трафик не идёт» при живом Reality-хендшейке — это пустой outbounds в профиле: расшифрованному трафику некуда выйти. Причина почти всегда — перезапись профиля целиком при добавлении инбаунда. Правило: только append к свежему config через GET, снапшот до PATCH, пересинк через полный рестарт контейнера ноды.

Как подключиться за 2 минуты
Частые вопросы

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

Почему подключение online, а страницы не грузятся при живом Reality?
Это классический симптом пустого outbounds в config-профиле: Reality-инбаунд принимает и расшифровывает соединение, поэтому панель видит online, но Xray некуда деть расшифрованный трафик — нет outbound freedom, и пакеты умирают на ноде.
Какие outbounds обязательно должны быть в рабочем профиле Xray?
Профиль обязан иметь тег DIRECT с протоколом freedom и тег BLOCK с протоколом blackhole — без этого расшифрованному трафику некуда выйти.
Из-за чего чаще всего пропадает блок outbounds в профиле?
Обычно это происходит, когда автоматический проход добавляет инбаунд и передаёт PATCH с полным config, где не было блока outbounds — профиль перезаписывается целиком, и выход стирается для всех нод этого профиля разом.
Как найти профили с пустым outbounds среди всех нод?
Нужно проверить каждый профиль через API: если инбаунды (кроме api) есть, а outbounds пуст — это и есть искомая проблема. Проверять нужно именно через API профиля, а не через cat на самой ноде, потому что реальная конфигурация хранится в памяти панели.
Почему панельный restart не всегда чинит пустой outbounds?
Панельный restart отдаёт eventSent: true, но xray на ноде не всегда реально перезапускается — PID не меняется, порт не поднимается. Надёжнее пересинк через полный docker restart контейнера ноды, с проверкой через ss -tlnp по нужному порту.
Похожее

Ещё в базе знаний

Подключите рабочий VPN

Инструкции базы знаний написаны под ключи VPN PRO: ключ выдаёт Telegram-бот за минуту, работоспособность гарантируем. Промокод VPN10 — 10 дней бесплатно, без карты.

Промокод VPN10 — 10 дней бесплатно · до 31 августа · передавайте друзьям