В прошлой статье я разбирал, как операторы связи определяют VPN через DPI и ТСПУ. Но за последнюю неделю ситуация изменилась радикально: теперь VPN определяют не только операторы, но и сами приложения — Wildberries, Ozon, ВкусВилл, Шоколадница и другие.
Wildberries показывает плашку: «У вас включен VPN? Лучше его отключить». Ozon выдаёт «Что-то с интернетом». Карточки товаров не грузятся, фото пропадают, оформить заказ нельзя. Выключаешь VPN — всё работает.
Это не случайный баг. Минцифры в конце марта провело закрытое совещание с 20+ компаниями (Яндекс, Сбер, VK, Ozon, Wildberries, Авито, X5, HeadHunter, ЦИАН и другие) и выдало методичку: к 15 апреля ограничить доступ пользователям с VPN. Кто не выполнит — рискует вылететь из «белых списков».
Давайте разберём, как технически приложение на вашем телефоне определяет, что VPN включен. Это другой уровень по сравнению с DPI на стороне оператора.
Раньше vs сейчас: кто определяет VPN
До апреля 2026 всё работало так: ТСПУ на стороне оператора анализирует трафик и блокирует VPN-протоколы. Приложения ничего не знали.
Сейчас добавился второй эшелон: приложение само определяет VPN и ограничивает функциональность. Даже если ТСПУ пропустило ваш трафик — приложение может вас поймать самостоятельно.
Это принципиально меняет расклад. DPI можно обойти обфускацией протокола. Приложение на вашем телефоне — обойти сложнее, потому что оно работает внутри устройства.
Метод 1: проверка сетевых интерфейсов (Android)
Самый простой и распространённый способ. На Android любое приложение может проверить наличие активного VPN-интерфейса через ConnectivityManager или NetworkInterface:
// Способ через ConnectivityManager val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetwork = cm.activeNetwork val caps = cm.getNetworkCapabilities(activeNetwork) val isVpn = caps?.hasTransport( NetworkCapabilities.TRANSPORT_VPN ) == true // Способ через NetworkInterface val interfaces = NetworkInterface.getNetworkInterfaces() while (interfaces.hasMoreElements()) { val iface = interfaces.nextElement() if (iface.name.startsWith("tun") || iface.name.startsWith("ppp")) { // VPN обнаружен } }
VPN-приложения создают виртуальный сетевой интерфейс — обычно tun0. Его наличие — прямой признак VPN. Не нужен root, не нужны специальные разрешения. Любое приложение может это проверить.
Мессенджер Max (бывший VK Мессенджер) уже использует этот метод и, по данным экспертов, передаёт информацию о VPN-подключениях, которая используется для блокировки IP-адресов VPN-серверов.
Метод 2: проверка IP-адреса через серверную сторону
Приложение при каждом запросе отправляет на свой сервер IP-адрес клиента. Сервер проверяет его по базам данных VPN/прокси-IP (MaxMind, IP2Proxy и аналоги).
Это тот же метод, который используют Netflix и стриминги. Но теперь его применяют российские маркетплейсы.
Плюс для разработчика: не нужно менять код приложения. Достаточно добавить проверку на бэкенде. Минус: если VPN-сервер использует «чистый» резидентный IP — проверка не сработает.
Метод 3: DNS-leak и рассинхронизация данных
Приложение может сравнить несколько источников информации о геолокации пользователя:
IP-адрес → определяет одну страну
GPS → определяет другую
SIM-карта (MCC/MNC) → определяет третью
Язык системы, часовой пояс → четвёртый и пятый сигнал
Если IP говорит «Нидерланды», а SIM-карта — «Россия», GPS — «Москва» и язык системы — русский, вывод очевиден: VPN.
Каждый сигнал по отдельности ненадёжен, но в совокупности — работает точно. Именно поэтому некоторые приложения «ловят» VPN даже когда IP-адрес не в базе VPN-серверов.
Метод 4: анализ маршрутизации (iOS — сложнее)
На iOS Apple ограничивает доступ приложений к сетевым интерфейсам. Проверить tun0 напрямую нельзя. Минцифры признаёт, что на iPhone реализовать детекцию VPN сложнее.
Но есть обходные пути: проверка через getifaddrs() (C-функция, доступная из Swift), анализ времени ответа (VPN добавляет задержку), проверка DNS-резолвинга. Менее надёжно, чем на Android, но работает.
Метод 5: белые списки и «методичка Минцифры»
Самое интересное — «белые списки». Это перечень из 120+ российских сервисов (Госуслуги, банки, маркетплейсы, СМИ, онлайн-кинотеатры), которым ТСПУ не мешает. Трафик к этим сервисам не фильтруется и не замедляется.
Условие попадания в белый список: сервис должен сам ограничивать VPN-пользователей. Если не ограничивает — может вылететь из списка. А вылететь из белого списка значит попасть под общую фильтрацию ТСПУ — замедление, перебои, жалобы пользователей.
То есть Минцифры создало экономический стимул: хочешь стабильную работу своего сервиса — борись с VPN за нас.
Что это значит для разработчиков
Если вы разрабатываете приложение для российского рынка и оно попадёт в белые списки — вам придётся внедрять VPN-детекцию. Это уже не рекомендация, а условие стабильной работы.
С технической точки зрения реализация простая — 10 строк кода на Android, чуть сложнее на iOS. Вопрос скорее этический: хотите ли вы, чтобы ваше приложение определяло VPN у пользователя и передавало эту информацию.
Что делать пользователям
Если вы пользуетесь VPN и российскими сервисами одновременно — варианты:
Split tunneling. Настройте VPN так, чтобы трафик к российским сервисам шёл напрямую, а через VPN — только то, что нужно. Большинство VPN-клиентов поддерживают это (исключения по приложениям или по домену).
Два профиля. На Android можно использовать рабочий профиль или Island/Shelter для изоляции приложений. В одном профиле — VPN и то, что нужно через VPN. В другом — российские приложения без VPN.
Отключать перед заходом. Самый простой вариант, который и предлагают сами приложения.
Что будет дальше
Дедлайн — 15 апреля. После этого все 120+ сервисов из белого списка должны ограничивать VPN-пользователей. К 1 мая — плата за международный трафик свыше 15 ГБ у операторов.
39% россиян пользуются VPN — это плюс 8 процентных пунктов с начала 2026 года. Запросы «VPN» в Яндексе достигли 3 миллионов в неделю — уровень весны 2022-го.
Парадокс тот же, что и с ТСПУ: чем агрессивнее борьба с VPN, тем больше людей его используют. Только теперь в эту борьбу включились не только операторы, но и сами приложения.
Ваши приложения уже показывают предупреждение о VPN? Как решаете — split tunneling, отключение, или что-то другое?
