В прошлой статье я разбирал, как операторы связи определяют 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, отключение, или что-то другое?