Блог Clearway

Почему VPN отваливается под блокировкой оператора и что делать

Коротко

Когда мобильный оператор вводит ограничения или локальный шатдаун, сеть переходит в режим белого списка: наружу выпускается трафик только к whitelisted-ресурсам (часть CDN-платформ, госсайты). VPN, который идёт напрямую к вашей ноде в дата-центре, в этот момент отваливается — до произвольного IP пакеты просто не доходят. Рабочее инженерное решение для оператора — спрятать вход VPN за whitelisted CDN-edge: для сети это выглядит как обращение к «белому» CDN, а edge проксирует соединение на вашу ноду. Транспорт при этом — XHTTP в режиме packet-up через CDN; Reality и Hysteria2 напрямую под троттлингом обычно не проходят.

Что происходит с мобильным интернетом в режиме белого списка

Типичная картина в тикетах: у части абонентов VPN не подключается на мобильном интернете, хотя на Wi-Fi тот же профиль работает штатно. Почти всегда причина не в клиенте и не в самой ноде, а в режиме, в который оператор перевёл сеть.

При блокировках и локальных шатдаунах российские мобильные операторы переводят передачу данных в режим белого списка (whitelist). Абонент в этом режиме выходит наружу не куда угодно, а только к заранее разрешённым ресурсам: часть CDN-платформ, госсайты, отдельные сервисы. Всё остальное — включая прямые обращения к произвольным IP в дата-центрах — не выпускается либо троттлится до неработоспособности.

Для VPN-сервиса это выглядит так: клиент устанавливает соединение, проходит рукопожатие и почти сразу теряет канал, потому что пакеты до вашего сервера не проходят через шлюз оператора. Отсюда характерный признак — сервис отваливается именно в сотовой сети конкретного региона, тогда как через другого оператора или домашний интернет тот же профиль работает нормально. Это сразу локализует проблему на границе сети оператора, а не в вашей инфраструктуре.

Почему прямое подключение к ноде отваливается

Момент, который часто упускают: под белым списком проблема не в протоколе шифрования, а в том, *куда* и *как* уходит первый пакет. Оператор фильтрует по назначению и по характеру трафика на границе сети — ещё до того, как ваш транспорт успеет что-либо «доказать» о себе.

Поэтому транспорты, которые уверенно держатся против DPI в обычных условиях, под белым списком ведут себя иначе:

ТранспортНапрямую к ноде под троттлингомЧерез whitelisted CDN-edge
Reality (TCP/TLS к ноде)обычно не проходитedge такой трафик не пропускает
Hysteria2 (QUIC/UDP)обычно не проходитedge такой трафик не пропускает
XHTTP, mode packet-upне рассчитан на прямой входрабочий подход

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

Решение: спрятать вход за whitelisted CDN-edge

Идея решения простая. Раз наружу выпускают обращения к «белому» CDN — значит, вход в VPN нужно поставить *за* этим CDN. Тогда с точки зрения оператора абонент обращается к whitelisted CDN-домену, а CDN-edge проксирует соединение дальше — на вашу ноду (origin).

Схема связности:

  • Клиент обращается к CDN-поддомену — он же прописывается как Address / SNI / Host в конфиге.
  • CDN-edge стоит в whitelisted-подсети, поэтому оператор его пропускает.
  • Edge проксирует запрос на ваш origin — ноду с XHTTP-инбаундом.
  • Нода (Remnawave, 3x-ui, Marzban, Hiddify — любая панель с поддержкой XHTTP) терминирует туннель.

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

Такой whitelisted-вход можно строить самому или брать как готовый слой. Clearway (clear-way.pro) даёт операторам именно «белый» edge-слой без продажи серверов: ноды остаются у оператора, а домен *.whitechannel-x1-cdn.ru ставится перед ними отдельным слоем.

Whitelist живёт на уровне подсетей /24

Whitelist — это не про конкретный домен и не про «хорошего хостера вообще». Разрешение привязано к подсетям /24: у одного провайдера часть блоков в белых списках, у другого — нет, и статус со временем меняется.

Ориентиры по наблюдениям (без гарантий, статус всегда проверяйте актуально):

ХостерПодсети в whitelist
Selectelнередко whitelisted
cloud.ru / SberCloudчасто НЕ whitelisted

Отсюда практическое следствие: нельзя один раз «выбрать правильного провайдера» и забыть. Перед тем как ставить edge или origin в конкретный блок адресов, проверяйте каждую /24 отдельно и перепроверяйте периодически — подсеть, которая выпускалась вчера, завтра может выпасть из белого списка. Один выпавший блок — и часть абонентов снова упирается в то, что трафик до ноды не проходит, хотя ещё вчера всё работало.

XHTTP через CDN: где именно рвётся туннель

Рабочий транспорт за CDN — XHTTP в режиме packet-up. Но здесь есть неочевидная деталь, из-за которой корректно собранный на вид туннель падает с unexpected EOF.

CDN-edge не доносит кастомные заголовки до origin. Значит, uplink-данные обязаны идти в *теле* запроса, а не в кастомном хедере:

  • uplinkDataPlacement: "body" — обязательно. Если оставить полезную нагрузку в кастомном заголовке (например, X-Payload), edge его срежет, origin не получит данные, и туннель порвётся.
  • session / seq — кладите в cookie.
  • padding — выносите в query-параметры.

Второе типовое место обрыва — рассинхрон конфигов. path и extra-параметры на клиенте и на ноде должны совпадать точь-в-точь: любое расхождение, вплоть до одного слэша, и туннель не поднимается. На ноде XHTTP-инбаунд слушает свой порт (например, 25454), а клиентский конфиг указывает CDN-поддомен как Address / SNI / Host.

Ещё один эффект packet-up, который стоит заложить заранее: он порождает много мелких HTTP-запросов. Крупные POST в body уменьшают их число — а это влияет и на устойчивость туннеля, и на стоимость трафика, о которой ниже.

Экономика трафика и защита origin

Считать по прайсу за гигабайт нельзя: CDN тарифицирует ещё и количество запросов, а XHTTP плодит много мелких обращений — итоговый счёт расходится с номиналом ₽/ГБ тем сильнее, чем интерактивнее трафик абонентов. Реальная удельная стоимость выводится только из собственного биллинга: она зависит от профиля трафика абонентов и от того, тарифицирует ли провайдер запросы. Крупные POST в теле запроса снижают число запросов — и вместе с ним стоимость. Это тот параметр, который стоит считать заранее при выборе между собственной дистрибуцией и managed-слоем.

МетрикаОриентир
Сырой трафикзависит от провайдера
С учётом платы за запросы (на масштабе)зависит от провайдера

Защита origin. Как только edge начинает проксировать на ноду, origin нельзя оставлять открытым — иначе его найдут и будут ходить напрямую, мимо CDN, обнуляя смысл whitelisted-входа. Два обязательных механизма:

  • Файрвол на входе — принимать соединения только с IP gateway (edge), остальное дропать.
  • Секрет-заголовок X-Cdn-Auth на origin — отсекать обращения, пришедшие не через ваш CDN.

Учёт трафика. В панели (например, Remnawave) есть множитель потребления ноды и per-user лимиты. Множитель 0 на конкретной ноде означает, что её трафик не засчитывается против лимита пользователя, при этом нода продолжает работать, — удобно для fallback-входа, который не должен «съедать» квоту абонента.

Чего whitelist-CDN не решает

Важно не смешивать две разные задачи, иначе ожидания разойдутся с результатом.

Восстановить связность под троттлингом (вернуть канал под белым списком) и разблокировать стриминг — это не одно и то же. Российские стриминги вроде Кинопоиска банят IP дата-центров по репутации: чтобы стабильно отдавать такой контент, нужен резидентный IP, а не «белый» вход. Whitelist-CDN эту проблему не закрывает — это отдельная инфраструктурная задача с другим решением.

Иначе говоря, whitelisted CDN-edge отвечает ровно на вопрос «почему VPN отваливается под блокировкой оператора и как вернуть канал», но не заменяет резидентные выходы для контента, чувствительного к репутации IP. Эти слои проектируйте раздельно.

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

Почему VPN работает на Wi-Fi, но отваливается на мобильном интернете?

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

Почему Reality и Hysteria2 перестают работать под блокировкой, хотя обычно устойчивы?

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

Туннель через CDN рвётся с ошибкой unexpected EOF. В чём причина?

Чаще всего uplink-данные отправляются в кастомном заголовке, а CDN-edge такие заголовки до origin не доносит. Нужно задать uplinkDataPlacement: body, session и seq класть в cookie, padding — в query. Вторая частая причина — рассинхрон path или extra между клиентом и нодой: они должны совпадать точь-в-точь, вплоть до слэша.

Как выбрать хостер, подсети которого попадают в whitelist?

Ориентироваться на конкретные блоки /24, а не на бренд провайдера: whitelist привязан к подсетям и меняется со временем. По наблюдениям у Selectel блоки нередко whitelisted, у cloud.ru и SberCloud — часто нет, но это не гарантия. Проверяйте каждую /24 перед развёртыванием и периодически перепроверяйте.

Нужно ли менять VPN-панель, чтобы завести whitelisted CDN-вход?

Нет, подход работает поверх существующих панелей — Remnawave, 3x-ui, Marzban, Hiddify. Нода держит XHTTP-инбаунд на своём порту, а перед ней ставится whitelisted CDN-edge. Меняется не панель, а транспорт и путь трафика: в клиентском конфиге CDN-поддомен прописывается как Address/SNI/Host, а path и extra синхронизируются с нодой.

Whitelist-CDN разблокирует Кинопоиск и другие российские стриминги?

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

Как защитить origin, чтобы к ноде не ходили мимо CDN?

Закрыть origin файрволом на вход и принимать соединения только с IP gateway (edge), а всё остальное дропать. Дополнительно повесить секрет-заголовок X-Cdn-Auth, чтобы отсекать прямые обращения, пришедшие не через ваш CDN. Так ноду не получится обнаружить и нагрузить в обход whitelisted-входа.

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

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

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