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

Причина в том, что у вас два интернета одновременно, а туннель закрывает только один.

Откуда берётся вторая дорога

Современные сети раздают адреса обеих версий: старый IPv4 и IPv6. Устройство получает оба, и дальше вступает в силу правило, прописанное в операционных системах: при наличии выбора предпочитается IPv6.

Механизм называется Happy Eyeballs. Система пробует оба варианта почти одновременно и берёт тот, что ответил быстрее, с преимуществом у шестой версии. Пользователь этого не видит.

Теперь представим, что туннель поднят так:

[Peer]
AllowedIPs = 0.0.0.0/0

0.0.0.0/0 — это весь IPv4 и только он. Для IPv6 маршрут в туннель не создаётся, и трафик к сайтам с адресами шестой версии уходит обычным путём, через провайдера. А таких сайтов давно много: крупные сервисы, соцсети, видеохостинги.

Почему это не всплывает при проверке

Большинство сайтов «узнай свой IP» отвечают по IPv4 — либо потому, что их собственный адрес только четвёртой версии, либо потому, что вы к ним обратились по нему. Проверка честно показывает адрес VPN-сервера, и создаётся ложное впечатление, что всё закрыто.

Утечка проявляется только на ресурсах, доступных по IPv6. Отсюда и коварство: результат проверки зависит от того, каким сайтом вы проверяете.

Проверять нужно средством, которое умеет обе версии и показывает их отдельно. Годится и командная строка:

curl -4 ifconfig.co
curl -6 ifconfig.co

Первая команда обязана показать адрес сервера. Вторая — либо ошибку «сеть недоступна», либо адрес сервера. Если она показывает ваш собственный адрес от провайдера — утечка есть.

Три способа закрыть

Завернуть IPv6 в туннель

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

[Interface]
Address = 10.0.0.2/32, fd00::2/128

[Peer]
AllowedIPs = 0.0.0.0/0, ::/0

Теперь маршрут по умолчанию создаётся для обеих версий, и утечки нет.

Отключить IPv6 на устройстве

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

Минус в том, что настройка глобальная: она действует и после отключения VPN. В сетях, где IPv6 нужен, это создаст свои проблемы.

Заблокировать IPv6 файрволом

Компромисс: шестая версия остаётся включённой, но правило запрещает исходящий трафик по ней мимо туннельного интерфейса. Логика та же, что у kill switch, и ошибка та же самая: правило, написанное только для IPv4, оставляет вторую дверь открытой.

Что делают готовые клиенты

Официальное приложение WireGuard при AllowedIPs = 0.0.0.0/0, ::/0 настраивает обе версии само. Многие клиенты дополнительно блокируют IPv6, если туннель его не поддерживает, — это разумное поведение по умолчанию.

Проблема чаще возникает при ручной настройке: конфигурация переносится в роутер или системный клиент частично, и вторая строка теряется. На роутерах и в OpenWrt за IPv6 отвечают отдельные настройки интерфейса и файрвола, которые легко пропустить.

Соседняя утечка: DNS

IPv6 — не единственный путь мимо туннеля. Запросы к именам могут уходить к резолверу провайдера, даже когда весь трафик закрыт. Формально данные не утекают, но список запрошенных доменов — это почти полная история посещений.

Механизм другой, проверка другая, и лечится отдельно — подробный разбор с командами в отдельной статье. Проверять стоит оба вектора: закрытый IPv6 при открытом DNS даёт немногим больше, чем ничего.

Короткий чеклист

  1. curl -6 ifconfig.co — показывает адрес провайдера? Утечка.
  2. В AllowedIPs есть ::/0? Если нет — либо добавить, либо блокировать IPv6.
  3. Проверять после каждой смены сети: дома IPv6 может не быть, а у мобильного оператора — быть.
  4. На роутере проверять отдельно: там настройки IPv4 и IPv6 живут в разных местах.

Коротко

0.0.0.0/0 закрывает только четвёртую версию протокола. Если у провайдера есть IPv6, система предпочтёт его — и часть трафика пойдёт напрямую, а обычная проверка этого не покажет, потому что отвечает по IPv4. Лечится строкой ::/0 в конфигурации, отключением IPv6 или правилом файрвола, покрывающим оба стека.