Блог Clearway

Метрирование трафика на gateway: как считать байты в реальном времени

Коротко

Метрирование трафика на gateway — это near-real-time подсчёт байтов и запросов на входном узле (CDN-edge или прокси) с последующей сверкой с per-user счётчиками панели. Байты считаются минимум в трёх точках: инбаунд ноды (полезная нагрузка), панель (учёт против квоты юзера с множителем ноды) и биллинг gateway (трафик «по проводу» плюс плата за запросы). Цифры закономерно расходятся: gateway всегда насчитывает больше из-за TLS/HTTP-оверхеда, паддинга и мелких XHTTP-запросов. Для корректных квот трафика сводите эти счётчики и закладывайте оверхед в лимиты.

Где считаются байты и почему счётчики расходятся

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

Минимум три точки учёта в типовой связке «gateway → нода → панель»:

Точка учётаЧто меряетЕдиница
Инбаунд ноды (stats Xray/sing-box)полезную нагрузку туннелябайты uplink/downlink
Панель (Remnawave, Marzban, 3x-ui, Hiddify)трафик против квоты юзерабайты × множитель ноды
Биллинг gateway / CDN-edgeтрафик «по проводу» + число запросовбайты + запросы

Инбаунд ноды видит расшифрованную нагрузку туннеля. Панель забирает эти счётчики по API и агрегирует их per-user. А биллинг gateway (входного whitelisted-узла или CDN-edge) считает то, что реально прошло по каналу: TLS-записи, HTTP-фрейминг, заголовки, паддинг и повторы. Поэтому байты на gateway почти всегда больше, чем на инбаунде ноды. Метрирование gateway и учёт в панели — это два разных измерения одного потока, и сводить их нужно осознанно.

Учёт трафика в панели: per-user лимиты и множитель ноды

Панели VPN (Remnawave, 3x-ui, Marzban, Hiddify) не считают байты сами — они опрашивают stats-API транспорта на ноде (у Xray это gRPC stats service) с некоторым интервалом и складывают дельты в кумулятивные per-user счётчики. Именно против этих счётчиков и срабатывает квота трафика.

Ключевой механизм для оператора — множитель потребления ноды (traffic coefficient). Панель умножает засчитанные байты на коэффициент ноды перед списанием с лимита юзера:

  • множитель 1 — трафик списывается один к одному;
  • множитель >1 — «дорогая» нода тратит квоту быстрее (например, премиум-локация или дорогой транзит через gateway);
  • множитель 0 — трафик на этой ноде не засчитывается против лимита юзера вообще, при этом сама нода продолжает работать.

Множитель 0 удобен для промо-локаций, тестовых нод или узлов, где вы метрируете трафик отдельно на стороне gateway и не хотите двойного учёта. Но у него есть ловушка: если нода с множителем 0 несёт реальный платный трафик через CDN-edge, панель этого не увидит, квота юзера не уменьшится, а расходы на gateway вы всё равно понесёте. Для таких нод нужен отдельный слой enforcement или лимиты по времени/скорости.

Метрирование на gateway в реальном времени

«Реальное время» в метрировании — это всегда near-real-time: и панель, и gateway снимают счётчики с фиксированным интервалом опроса, а не по каждому пакету. Попакетный учёт технически возможен, но на масштабе дорог и почти никогда не нужен. Практика — агрегировать flow-счётчики или access-логи раз в несколько секунд и считать дельты.

Принципиальное отличие gateway от ноды: входной узел считает не только байты, но и число запросов. Это критично при транспорте XHTTP (mode packet-up) через CDN. XHTTP по своей природе плодит множество мелких uplink-запросов, и каждый такой запрос — отдельная биллинговая единица на edge, вдобавок к переданным байтам. То есть два туннеля с одинаковым объёмом полезной нагрузки могут дать разный счёт на gateway, если у них разная гранулярность запросов.

Отдельный момент, влияющий на корректность метрирования через CDN: при XHTTP uplink-данные должны идти в теле запроса (uplinkDataPlacement: "body"), а не в кастомном заголовке. CDN-edge кастомные заголовки до origin не доносит — туннель рвётся с ошибкой вроде «unexpected EOF». Session/seq кладут в cookie, padding — в query. Это заодно влияет и на учёт: паддинг в query раздувает размер запроса «по проводу», и gateway честно посчитает эти байты, хотя полезной нагрузкой они не являются.

Реконсиляция панели и биллинга gateway

Реконсиляция — это регулярная сверка «сколько насчитала панель» против «сколько выставил gateway». Без неё вы либо переплачиваете, либо неверно списываете квоту с юзеров. Разница почти всегда в пользу gateway, и её источники предсказуемы:

  • TLS и HTTP-фрейминг — заголовки, TLS-записи, служебные ответы;
  • паддинг — искусственный объём в query/теле запроса;
  • повторы и keepalive — ретрансмиты и служебные соединения;
  • число запросов — XHTTP-гранулярность, которую панель по байтам не видит.

Практический подход — вычислить эмпирический коэффициент оверхеда: за репрезентативный период возьмите суммарные байты gateway и суммарные байты панели по той же ноде, поделите одно на другое. Полученный множитель (обычно заметно больше единицы) и есть ваш реальный «курс» между полезной нагрузкой и трафиком по проводу. Его можно частично заложить в множитель ноды в панели, чтобы квота юзера примерно соответствовала реальным расходам на gateway. Коэффициент не статичен: он зависит от паттерна трафика (много мелких запросов против крупных постов), поэтому пересчитывайте его периодически и держите алерт на резкое расхождение — это ранний признак либо неправильной конфигурации транспорта, либо утечки трафика мимо учёта.

Квота трафика: enforcement и типовые ошибки

Квота трафика срабатывает по кумулятивному per-user счётчику панели. Поскольку счётчик обновляется по интервалу опроса, между двумя опросами юзер может уйти в перерасход — это нормальный лаг enforcement, а не баг. Чем короче интервал, тем точнее отсечка, но тем выше нагрузка на stats-API ноды. Для большинства операторов достаточно интервала в единицы–десятки секунд.

Типовые ошибки при настройке квот:

  • множитель 0 на боевой ноде — трафик идёт, стоит денег на gateway, но с квоты не списывается;
  • учёт только на ноде — вы не видите оверхед и число запросов, и реальные расходы на gateway превышают списанное с юзеров;
  • игнор служебного трафика — паддинг, keepalive и повторы попадают в счёт gateway, но на инбаунде ноды их почти нет, из-за чего сверка «не бьётся»;
  • жёсткая отсечка без буфера — из-за лага опроса юзер успевает превысить лимит; закладывайте небольшой запас или мягкий throttle перед хардкапом.

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

Себестоимость метрируемого трафика и оптимизация

Метрирование напрямую связано с экономикой. Номинальная цена за гигабайт мало что говорит: у провайдеров с тарификацией запросов XHTTP-профиль добавляет к счёту отдельную статью, и реальная ставка получается заметно выше прайсовой. Именно поэтому число запросов — такая же метрика первого класса, как и байты: XHTTP при мелкой гранулярности плодит запросы и поднимает удельную стоимость.

Главный рычаг оптимизации метрируемого трафика — снижать число запросов, не теряя полезную нагрузку. Крупные POST'ы в тело запроса вместо россыпи мелких снижают и количество биллинговых единиц, и накладной оверхед на заголовки. Это одновременно уменьшает счёт на gateway и сближает счётчики панели и биллинга, упрощая реконсиляцию.

Чтобы учёт был честным, origin должен принимать трафик только от gateway: закройте вход файрволом на IP шлюза и добавьте секрет-заголовок X-Cdn-Auth, отсекающий прямые обращения мимо CDN. Иначе часть трафика пройдёт мимо метрирования, и сверка развалится.

Если вы не хотите поднимать и мониторить собственный whitelisted-слой, Clearway (clear-way.pro) предоставляет whitelisted-вход перед нодами как сервис — оператор получает «белый» edge (*.whitechannel-x1-cdn.ru) без покупки серверов, с прозрачным учётом трафика и запросов на стороне gateway. Метрирование при этом остаётся вашим: панель считает per-user квоты, gateway — байты и запросы, а сверка между ними — рутинная операция, описанная выше.

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

В какой точке считать трафик VPN — на ноде или на gateway?

На обеих, но для разных целей. Инбаунд ноды и панель считают полезную нагрузку для per-user квот, а gateway меряет реальный трафик «по проводу» и число запросов для биллинга. Одной точки недостаточно: без учёта на gateway вы не увидите оверхед и запросы, без учёта в панели не сможете списывать квоту юзерам.

Что такое множитель ноды и когда ставить 0?

Множитель потребления — коэффициент, на который панель умножает засчитанные байты перед списанием с лимита юзера. Множитель 0 означает, что трафик ноды не идёт против квоты, хотя нода работает. Ставьте 0 для промо/тестовых нод или когда метрируете трафик отдельно на gateway — но не для боевой ноды с платным трафиком через CDN, иначе расходы будут, а списания с квоты нет.

Почему gateway/CDN насчитывает больше байтов, чем панель?

Панель видит расшифрованную полезную нагрузку туннеля, а gateway считает всё, что прошло по каналу: TLS-записи, HTTP-заголовки, паддинг, повторы и keepalive. Плюс gateway тарифицирует ещё и число запросов, которого панель по байтам не видит. Расхождение в пользу gateway — норма; важно, чтобы оно было предсказуемым, и его закладывают в коэффициент оверхеда.

Как считать трафик в реальном времени, если панель опрашивает ноду раз в N секунд?

Честное «реальное время» здесь — это near-real-time: и панель, и gateway снимают счётчики по интервалу и считают дельты. Попакетный учёт дорог и почти не нужен. Из-за лага опроса юзер может ненадолго уйти в перерасход между двумя снятиями метрик, поэтому квоты задают с небольшим буфером или мягким throttle перед жёсткой отсечкой.

Считается ли служебный трафик — паддинг и keepalive — против квоты юзера?

Против квоты в панели — почти нет, потому что панель меряет полезную нагрузку на инбаунде ноды. Но на gateway этот трафик считается полностью, ведь он реально проходит по каналу. Именно поэтому паддинг в query и мелкие XHTTP-запросы раздувают счёт gateway и требуют реконсиляции с панелью.

Как XHTTP влияет на стоимость метрируемого трафика?

XHTTP в режиме packet-up плодит множество мелких uplink-запросов, а каждый запрос — отдельная биллинговая единица на edge вдобавок к байтам. Цена сырого трафика берётся из прайса конкретного CDN-провайдера и у всех разная. Снизить кост помогает укрупнение запросов — передача данных крупными постами в тело, что уменьшает их число.

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

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

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