🔒 HWID-привязка и запрет «чужих» клиентов: как продавцы ограничивают выбор

О чём заметка

Разбор двух практик, которые встречаются у продавцов VPN-подписок: привязка подписки к идентификатору устройства (HWID) и ограничение списка допустимых клиентов. Здесь: как это устроено технически, почему прокси-ядра (mihomo, sing-box, Xray-core) об этом ничего не знают, что ограничение даёт продавцу и чем оборачивается для пользователя. Про сами клиенты — в обзоре оболочек и клиентах Xray.

TL;DR

  • Ни один прокси-протокол не знает, с какого устройства вы подключаетесь. Сервер аутентифицирует пользователя по UUID или паролю — и всё. HWID в VLESS, Trojan или Shadowsocks отсутствует как понятие.
  • Привязка живёт этажом выше — в HTTP-запросе за подпиской. Панель управления требует от клиента заголовок с идентификатором устройства (в Remnawave это x-hwid, плюс необязательные x-device-os, x-ver-os, x-device-model, user-agent), и без него отдаёт 404 — подписку нельзя ни добавить, ни обновить.
  • Отсюда и запрет «чужих» клиентов: заголовок умеют слать не все. По документации Remnawave это Happ, v2RayTun, Koala Clash, FlClashX, Prizrak-Box, Throne; в v2rayN, Hiddify и Passwall на июль 2026 висят открытые запросы на такую поддержку.
  • Вторая форма привязки — на стороне клиента: Happ поддерживает шифрованные подписки happ://crypto..., скрывающие адреса серверов, и настройку, запрещающую подписчику просматривать и редактировать конфигурацию.
  • У ограничений есть понятная цель — борьба с перепродажей одного аккаунта на десятки людей. Но у пользователя оно отнимает свободу выбора ядра, а продавцу отдаёт инвентарь ваших устройств и журнал их активности.
  • Этот проект такие ограничения не применяет: конфигурация выдаётся в открытом виде, HWID не собирается, конкретный клиент не навязывается.

Что вообще ограничивают

Стоит развести два разных механизма, которые в разговорах смешивают.

Первое — лимит устройств (HWID device limit). Подписка привязывается к идентификаторам устройств: сервер запоминает, с каких из них её загружали, и не даёт превысить установленное число. Формулировка задачи легитимная — один оплаченный доступ не должен работать у сорока человек одновременно.

Второе — ограничение выбора клиента. Прямое следствие первого: раз для работы нужен особый заголовок, годятся только те приложения, которые умеют его отправлять. Клиент без поддержки получает от панели ошибку и подписку добавить не может — независимо от того, оплачен ли доступ.

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

Проще говоря: сервер по-прежнему готов вас обслужить с любого клиента — просто вам не дают взять у него настройки. Ограничение построено не на протоколе, а на доступе к конфигу.

Как это работает технически

Разберём на примере панели Remnawave, где механизм задокументирован явно (HWID device limit).

Когда клиент идёт по ссылке подписки, он отправляет обычный HTTP-запрос. При включённом лимите панель ожидает в этом запросе набор заголовков:

  • x-hwid — идентификатор устройства, обязательный;
  • x-device-os, x-ver-os, x-device-model — операционная система, её версия и модель устройства;
  • user-agent — название и версия приложения.

Дальше логика простая. Заголовка x-hwid нет — панель отвечает 404, и пользователь не может ни добавить подписку, ни переподключить её заново. Заголовок есть — панель регистрирует устройство и сверяет, не превышен ли лимит.

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

Лимит устройств — не криптографическая защита

Механизм держится на добросовестности клиентского приложения: заголовок формирует и отправляет сам клиент. В апреле реализации встречались и ошибки в серверной части — в Remnawave, например, публиковалось предупреждение о состоянии гонки (race condition) в логике регистрации устройств, позволявшем зарегистрировать больше устройств, чем разрешено (GHSA-985p-44h5-v3pq). Конкретная ошибка исправлена, но общий вывод остаётся: лимит — административная мера, а не гарантия.

Что при этом делают ядра: ничего

Это ключевой раздел, ради которого заметка и написана.

Прокси-ядра к HWID-привязке непричастны. Ни mihomo, ни sing-box, ни Xray-core не имеют понятия «идентификатор устройства». Всё, что знает сервер при подключении, — это учётные данные: UUID пользователя в VLESS и VMess, хеш пароля в Trojan, ключ в Shadowsocks. В спецификациях протоколов поля «с какого устройства» просто нет.

Из этого следуют три практических вывода.

Конфиг работает где угодно. Если у вас на руках ссылка vless://…, она заведётся в любом ядре, поддерживающем нужный протокол и транспорт: в mihomo, в sing-box, в Xray-core, в клиенте на роутере. Сервер аутентифицирует вас по UUID и не различает приложения.

Ломается не подключение, а получение конфига. При включённом HWID-лимите вы упираетесь в стену на шаг раньше — на этапе загрузки подписки. Симптом узнаваемый: клиент сообщает об ошибке 404 или «подписка не найдена», хотя ссылка верная и оплата в порядке. Это не поломка ядра и не блокировка провайдером, а отказ панели отдать конфигурацию приложению без нужного заголовка.

Автообновление подписки становится точкой отказа. Даже если конфиг однажды получен вручную, при ротации серверов у продавца обновление не пройдёт — и узлы перестанут работать по мере смены адресов.

Как проверить, включена ли привязка

Откройте ссылку подписки обычным браузером или запросите её через curl. Если возвращается конфигурация — HWID-лимита нет, и вы свободны в выборе ядра. Если приходит 404 или пустой ответ, а в «правильном» клиенте подписка работает — значит, панель фильтрует запросы по заголовкам. Отдельный признак — ссылка вида happ://crypto...: это шифрованная подписка, рассчитанная на конкретное приложение.

Привязка на стороне клиента

Второй слой ограничений реализован не панелью, а самим приложением. У Happ, по его документации, есть шифрованные подписки (ссылки начинаются с happ://crypto…), которые скрывают настройки серверов и сам адрес подписки, и настройка, отключающая просмотр и редактирование конфигурации для подписчиков — причём как для уже добавленных подписок, так и для будущих.

Оценивать это стоит без демонизации: Happ — просто клиент, он не продаёт доступ, а даёт продавцам инструменты, и те решают, включать их или нет. Вопрос не к приложению, а к тому, кто продаёт вам подписку с такими настройками.

Но следствие для пользователя однозначное: вы не видите, к какому серверу подключаетесь. Нельзя проверить адрес и страну выхода, нельзя перенести доступ в другое ядро, нельзя посмотреть, какие параметры маскировки вам выдали. Доверие к продавцу перестаёт быть проверяемым — а в теме обхода блокировок это дорого стоит: именно возможность посмотреть конфигурацию отличает «сервис, которому я доверился осознанно» от «чёрного ящика с моим трафиком внутри».

Что это значит для приватности

HWID — стабильный идентификатор, который приложение отправляет при каждом обращении за подпиской. Вместе с сопутствующими заголовками продавец получает:

  • список ваших устройств — сколько их, какие операционные системы, версии и модели;
  • журнал обращений — когда и с какого устройства подписка обновлялась, то есть косвенную картину вашей активности и смены устройств;
  • устойчивую связку «аккаунт ↔ конкретные устройства», которая переживает смену IP-адреса.

Ничего из этого не требуется для того, чтобы прокси работал. Это данные, собираемые ради контроля за перепродажей — и, как любые собранные данные, они могут утечь, быть переданы или запрошены. Общая логика тут та же, что и в остальных заметках про слежку: чем меньше стабильных идентификаторов вы раздаёте, тем меньше связок можно построить; про механику таких связок в вебе — в разборе локальной слежки Meta и Яндекса.

Обратная сторона: у ограничений есть причина

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

Позиция этого проекта

Ограничения выше — не отраслевая необходимость, а решение конкретного продавца. Практика проекта, в рамках которого ведётся это хранилище, противоположная. VPN-подписка выдаётся через Telegram-бота @zapretvpns_bot (подробный разбор — в заметке Zapret VPN-бот), и правила там такие:

  • Клиент выбирает пользователь. Приложения не фильтруются ни по названию, ни по заголовку User-Agent: Happ, INCY или другой «обязательный» клиент не требуется. Подойдёт любое ядро, поддерживающее нужный протокол — mihomo с его оболочками, sing-box, Xray-core, клиент на роутере.
  • Подписка — не единственный вход. Кроме готового профиля формата mihomo выдаются прямые стандартные конфигурации: строка vless://…, файл WireGuard/AWG, параметры Hysteria 2. Не понимает ваше приложение подписку — берите прямой конфиг.
  • HWID не собирается. Аппаратный идентификатор устройства не запрашивается, заголовок x-hwid при выдаче не требуется, инвентарь ваших устройств не ведётся. «Слот устройства» в интерфейсе — это просто номер конфига, который вы сами подписываете («телефон», «роутер»), а Fingerprint у VLESS — TLS-профиль браузера для маскировки; ни то, ни другое к железу отношения не имеет.
  • Конфигурация открыта. Адрес сервера и параметры видны: их можно проверить, сохранить у себя и перенести на другое устройство и в другое ядро, не спрашивая разрешения.
  • Единственное реальное условие — техническое: клиент должен понимать нужный протокол и формат конфига. Если не понимает — это вопрос совместимости, а не политика сервиса.

Проще говоря: доступ, который вы оплатили, остаётся вашим, а не работает только внутри одобренного приложения.

Это не значит, что вопрос доверия снимается: любой VPN-оператор технически видит адреса, к которым вы подключаетесь, — отсутствие HWID лишь сокращает объём собираемых о вас данных. Честные оговорки на этот счёт собраны в самой заметке о боте.

Что делать пользователю

  • Спрашивайте до оплаты, есть ли лимит устройств и требуется ли конкретный клиент. Это нормальный вопрос, и уклончивый ответ сам по себе информативен.
  • Проверяйте ссылку подписки запросом из браузера или curl (см. подсказку выше) — так вы узнаете реальное положение дел, а не рекламное.
  • Избегайте шифрованных подписок, если для вас важна проверяемость: скрытый конфиг означает, что вы не можете убедиться даже в стране выхода.
  • Держите конфиг у себя. Сохранённая ссылка vless://… или выгруженный YAML — это ваша страховка на случай, когда клиент перестанет обновляться или продавец сменит правила.
  • Если ограничение уже мешает — помните, что упирается оно в получение конфигурации, а не в протокол: имея на руках параметры узла, вы вольны использовать любое ядро.

📚 См. также


🤖 Эти статьи открыты — можно обучать на них ИИ

При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.