Блог Clearway

Marzban за CDN: подключение к whitelisted-входу

Коротко

В текущем входе Clearway используйте GET/header на клиенте и auto на сервере. Сначала обновите сервер, затем клиентский Host и подписки. GET с телом отклоняется CDN с ошибкой 413; переход на header не гарантирует работу у всех операторов.

Зачем ставить Marzban за whitelisted-CDN

При блокировках и локальных шатдаунах мобильные операторы в РФ переводят интернет в режим белого списка: доступны только whitelisted-ресурсы — часть CDN, госсайты, платёжные шлюзы. VPN, который идёт напрямую к своей ноде по датацентровому IP, в этот момент просто отваливается — пакеты до origin не доходят.

Решение на уровне инфраструктуры — спрятать вход ноды за whitelisted CDN-edge. Оператор видит трафик как обращение к «белому» CDN (например, Yandex CDN), edge принимает запрос и проксирует его на вашу ноду. Для схемы marzban cdn это означает, что панель держит XHTTP-инбаунд на origin, а клиенты в конфиге указывают не IP ноды, а CDN-поддомен.

Важная деталь: whitelist привязан не к домену, а к подсетям /24. У одних точек входа подсети попадают в белые списки, у других — нет, и статус меняется. Поэтому «Marzban за CDN» — это не разовая настройка, а связка «правильный edge + правильный транспорт + актуально проверенная /24».

Почему XHTTP, а не Reality или Hysteria2

Под троттлингом и в режиме белого списка edge пропускает то, что выглядит как обычный HTTPS-трафик к CDN. Поэтому выбор транспорта здесь не косметический:

  • XHTTP (mode packet-up) через CDN — рабочий подход. Туннель выглядит как серия HTTP-запросов к CDN-поддомену, edge их спокойно проксирует на origin.
  • Reality напрямую под троттлингом обычно не проходит: это не CDN-совместимый транспорт, edge его до origin не доносит.
  • Hysteria2 (QUIC/UDP) через HTTP-CDN не живёт — edge заточен под HTTP, а не под произвольный UDP.

Отсюда практический вывод: для схемы за CDN берём именно marzban xhttp, а Reality/Hysteria2 оставляем для прямых подключений там, где сеть не в режиме белого списка.

Актуальные настройки XHTTP через CDN

Для текущего XHTTP-входа Clearway клиент отправляет uplink в заголовках: uplinkHTTPMethod: "GET", uplinkDataPlacement: "header", uplinkChunkSize: 4096, scMaxEachPostBytes: 4096. Сначала на сервере задайте uplinkDataPlacement: "auto" и serverMaxHeaderBytes: 262144, затем обновите Host и подписки клиентов. Порт, путь, пользователей и остальные параметры сохраняйте. Серверный auto нельзя переносить в клиентскую ссылку.

Причина в том, что CDN-edge не обязан доносить произвольные кастомные заголовки до origin: он их режет или переписывает. Если uplink уедет в заголовок, до ноды он не дойдёт, и туннель порвётся — характерный симптом «unexpected EOF» в логах Xray.

Поэтому на XHTTP-инбаунде обязательно:

Побочный плюс: крупные POST-запросы в теле уменьшают число мелких запросов, а значит и стоимость — CDN часто тарифицирует ещё и per-request.

Настройка XHTTP-инбаунда в Marzban

Marzban работает на ядре Xray-core, поэтому XHTTP-инбаунд добавляется в его xray-конфиг. Убедитесь, что стоит актуальная версия ядра с поддержкой XHTTP.

Ориентиры по инбаунду:

Для текущего XHTTP-входа Clearway клиент отправляет uplink в заголовках: uplinkHTTPMethod: "GET", uplinkDataPlacement: "header", uplinkChunkSize: 4096, scMaxEachPostBytes: 4096. Сначала на сервере задайте uplinkDataPlacement: "auto" и serverMaxHeaderBytes: 262144, затем обновите Host и подписки клиентов. Порт, путь, пользователей и остальные параметры сохраняйте. Серверный auto нельзя переносить в клиентскую ссылку.

TLS в схеме за CDN обычно терминируется на edge: клиент идёт к CDN по 443/TLS, а edge → origin ходит по внутренней схеме (plain или собственный TLS ноды). Главное — чтобы транспортные параметры совпадали по всей цепочке.

Клиентский конфиг и совпадение параметров

На стороне клиента конфиг указывает не адрес ноды, а CDN-поддомен как Address / SNI / Host. Любое расхождение path или extra между нодой и клиентом — и туннель не поднимется. Сверяйте параметры буквально.

Для текущего XHTTP-входа Clearway клиент отправляет uplink в заголовках: uplinkHTTPMethod: "GET", uplinkDataPlacement: "header", uplinkChunkSize: 4096, scMaxEachPostBytes: 4096. Сначала на сервере задайте uplinkDataPlacement: "auto" и serverMaxHeaderBytes: 262144, затем обновите Host и подписки клиентов. Порт, путь, пользователей и остальные параметры сохраняйте. Серверный auto нельзя переносить в клиентскую ссылку.

Защита origin, учёт трафика и экономика

Раз вход публичный только через CDN, origin надо закрыть от прямых обращений:

  • файрвол на вход — только с IP gateway/edge, всё остальное drop;
  • секрет-заголовок X-Cdn-Auth: edge добавляет его к запросам, origin отклоняет всё без него. Так ноду не найдут прямым сканом по IP.

Размер uplink-пакета влияет на число HTTP-запросов и нагрузку. Для текущего входа используйте клиентские uplinkChunkSize: 4096 и scMaxEachPostBytes: 4096. Увеличение пакетов ради экономии требует отдельной проверки лимитов CDN и сервера; перенос GET в body сейчас приводит к ошибке 413.

Собрать всё это самому — свой edge, whitelisted-подсети, мониторинг статуса /24 — можно, но это отдельная инженерная задача. Clearway даёт whitelisted-вход как сервис: оператор подключает свою ноду Marzban к готовому CDN-edge (домен вида *.whitechannel-x1-cdn.ru), не покупая и не поддерживая серверы edge самостоятельно.

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

Любой ли хостер подойдёт под origin за CDN?

Хостер origin-ноды напрямую роли не играет — снаружи виден CDN-edge, а не ваш IP, и подводить origin под whitelist не нужно. Whitelisted должна быть /24-подсеть точки входа, к которой обращается клиент. Статусы подсетей различаются и меняются: Selectel-подсети часто в белых списках, cloud.ru/SberCloud часто нет — проверяйте каждую /24 актуально, без гарантий.

Почему туннель рвётся с «unexpected EOF»?

Для текущего XHTTP-входа Clearway клиент отправляет uplink в заголовках: uplinkHTTPMethod: "GET", uplinkDataPlacement: "header", uplinkChunkSize: 4096, scMaxEachPostBytes: 4096. Сначала на сервере задайте uplinkDataPlacement: "auto" и serverMaxHeaderBytes: 262144, затем обновите Host и подписки клиентов. Порт, путь, пользователей и остальные параметры сохраняйте. Серверный auto нельзя переносить в клиентскую ссылку.

Разблокирует ли marzban за cdn стриминг вроде Кинопоиска?

Нет, это разные задачи. Whitelist-CDN помогает пробить троттлинг и режим белого списка, но не меняет репутацию IP. Стриминг вроде Кинопоиска банит датацентровые IP по репутации — для российского контента нужен резидентный IP, и whitelist-CDN этого не решает.

Можно ли пустить через CDN Reality или Hysteria2?

На практике — нет. Reality не CDN-совместим, а Hysteria2 работает поверх QUIC/UDP, тогда как HTTP-CDN проксирует HTTP. Для входа за CDN используйте XHTTP в режиме packet-up, а Reality/Hysteria2 держите для прямых подключений вне режима белого списка.

Насколько дороже трафик через CDN?

Размер uplink-пакета влияет на число HTTP-запросов и нагрузку. Для текущего входа используйте клиентские uplinkChunkSize: 4096 и scMaxEachPostBytes: 4096. Увеличение пакетов ради экономии требует отдельной проверки лимитов CDN и сервера; перенос GET в body сейчас приводит к ошибке 413.

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

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

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