Kill switch (по-русски — аварийный выключатель) — это функция, которая перекрывает интернет целиком, если VPN-соединение разорвалось. Размен здесь такой: лучше остаться совсем без связи, чем незаметно выйти в сеть напрямую и не узнать об этом.

Звучит как одна кнопка, но за названием скрываются три разных механизма с разной надёжностью. И у каждого есть момент, когда он не срабатывает.

Зачем это нужно

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

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

Механизм первый: правило файрвола

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

В WireGuard это делается прямо в конфигурации, без сторонних средств:

[Interface]
PostUp = <правило, запрещающее выход мимо wg0>
PostDown = <снятие правила>

PostUp выполняется после подъёма интерфейса, PostDown — после его остановки. Плюс подхода в том, что правило живёт в ядре и не зависит от того, работает ли клиентское приложение: даже если оно аварийно завершится, запрет останется.

Минус — в том же самом. Если приложение упало, не выполнив PostDown, интернет останется перекрытым, и снимать правило придётся руками.

Механизм второй: маршрут-заглушка

Вариант попроще. Вместо запрета в файрволе в таблицу маршрутизации добавляется маршрут по умолчанию с большим приоритетом, ведущий «в никуда». Пока туннель поднят, его собственный маршрут перекрывает заглушку. Как только туннель падает, остаётся заглушка, и пакеты отбрасываются.

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

Механизм третий: системный флаг

В Android есть настройка «Блокировать соединения без VPN», в iOS — режим Always-On VPN в управляемых конфигурациях, в Windows — фильтрация на уровне платформы.

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

Где все три дают течь

Момент до подъёма туннеля. Между загрузкой системы и установлением соединения проходит время, и в это окно фоновые службы уже успевают сходить в сеть: синхронизация почты, проверка обновлений, телеметрия. Правило файрвола из PostUp в этот момент ещё не применено — оно появляется вместе с туннелем. Системный флаг здесь надёжнее: он действует с момента загрузки.

DNS-запросы. Классическая утечка, живущая отдельно от kill switch: трафик перекрыт, а имена продолжают разрешаться через резолвер провайдера. Формально утечки данных нет, но список запрошенных доменов — это почти вся история посещений. Разбор с проверками — в отдельной статье.

IPv6. Если правило написано только для IPv4, а у провайдера есть IPv6, трафик уйдёт по нему свободно. Правило обязано покрывать оба стека.

Локальная сеть. Большинство реализаций намеренно оставляют доступ к локальной сети — иначе перестанут работать принтеры и файловые хранилища. Это осознанный компромисс, но знать о нём стоит.

Как проверить, что он работает

Проверять надо фактом, а не наличием галочки:

  1. Поднимите туннель и запомните свой внешний адрес.
  2. Запустите непрерывный ping до любого внешнего адреса.
  3. Принудительно остановите туннель — не через кнопку «отключить» в клиенте, а жёстко: остановкой службы или отключением интерфейса.
  4. Смотрите на ping. Он обязан прекратиться. Если ответы продолжают идти — kill switch не сработал.

Разница между кнопкой «отключить» и жёсткой остановкой принципиальна: при штатном отключении клиент сам снимает правила, и проверка ничего не покажет.

Чего kill switch не делает

Он не имеет отношения к анонимности. Перекрытый канал не мешает сайту опознать вас по учётной записи, отпечатку браузера или cookie — это разные задачи, и решаются они разными средствами.

Он также не спасает от утечек внутри самого туннеля — например, когда часть трафика маршрутизируется мимо него намеренно, при раздельном туннелировании. Там это не сбой, а настройка.

Коротко

Kill switch — это правило файрвола, маршрут-заглушка или системный флаг. Первый надёжнее и проверяем, третий удобнее и работает с момента загрузки, второй самый слабый. Общие слепые зоны у всех: окно до подъёма туннеля, DNS и IPv6. Проверять нужно жёсткой остановкой туннеля, а не кнопкой в интерфейсе, — иначе проверяется вежливость клиента, а не сам механизм.