3x-ui устроен иначе, чем Remnawave: панель не разделяет «инбаунд на сервере» и «адрес для клиента» — она считает, что клиент подключается напрямую туда же, где стоит сервер. Мы подключаемся через CDN-домен, поэтому нужен один ручной шаг, которого в Remnawave нет.
path) у вас будет не литеральным /api/v1/sync/, а случайным — например /api/v1/x7k2p9qr/sync/. Это не секрет для авторизации (доступ проверяется UUID клиента, а не путём) — так каждый оператор получает уникальный traffic-паттерн, и DPI не может заблокировать всех разом по одной сигнатуре. Везде ниже подставляйте значение из вашего реального ответа регистрации.
3x-ui → Inbounds → Add Inbound: Protocol — VLESS, Listening IP — 0.0.0.0, Port — значение из inbound_json.port, Network — xhttp.
У нашего инбаунда есть XHTTP-параметры в поле extra (режим packet-up, аплинк через тело запроса), под которые в обычной форме 3x-ui нет полей. Не ищите их в GUI — переключите редактор инбаунда в режим JSON (иконка </> рядом с формой) и вставьте inbound_json целиком:
{
"tag": "CLEARWAY",
"listen": "0.0.0.0",
"port": 25454,
"protocol": "vless",
"settings": { "clients": [], "decryption": "none" },
"streamSettings": {
"network": "xhttp",
"security": "none",
"xhttpSettings": { "mode": "packet-up", "path": "/api/v1/sync/", "extra": { "...": "..." } }
}
}
Сохраните. security: "none" здесь верно — TLS терминирует CDN-edge, а не ваш сервер.
В этом же инбаунде, вкладка Clients → Add Client → создайте UUID как обычно. 3x-ui покажет свою автогенерированную ссылку — не используйте её, она ведёт на IP вашего сервера напрямую, без CDN.
Возьмите UUID из шага 2 и подставьте вместо {UUID}, а {subdomain} замените на значение subdomain из ответа регистрации:
vless://{UUID}@{subdomain}:443?encryption=none&security=tls&type=xhttp&mode=packet-up&path=%2Fapi%2Fv1%2Fsync%2F&host={subdomain}&sni={subdomain}&fp=chrome&alpn=h2%2Chttp%2F1.1#Clearway
vless://a1b2c3d4-e5f6-7890-abcd-ef1234567890@a7f3k2.whitechannel-x1-cdn.ru:443?encryption=none&security=tls&type=xhttp&mode=packet-up&path=%2Fapi%2Fv1%2Fsync%2F&host=a7f3k2.whitechannel-x1-cdn.ru&sni=a7f3k2.whitechannel-x1-cdn.ru&fp=chrome&alpn=h2%2Chttp%2F1.1#Clearway
Вставьте строку в клиент (v2rayNG, Happ, NekoBox — любой, поддерживающий импорт по vless://-ссылке или QR). Шаблон собирается один раз на инбаунд — для новых клиентов меняется только {UUID}, остальное одинаково для всех.
Уникальный путь защищает от DPI-фингерпринтинга, но не от прямого обращения к серверу мимо CDN — если порт открыт всему интернету, до него можно достучаться напрямую по IP. Настройте файрвол так, чтобы порт принимал соединения только с нашего gateway 159.194.204.83 — именно он обращается к вашей ноде (не Yandex CDN напрямую). На работу через CDN это не влияет.
curl http://ваш_IP:порт/api/v1/sync/ снаружи должен вернуть HTTP-ответ (даже 400/404), не connection refused.{subdomain} из шага 3.noSSEHeader в extra инбаунда; если edge буферизует SSE-поток, переключите false → true (параметры самой ссылки при этом не меняются).