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, трафик уйдёт по нему свободно. Правило обязано покрывать оба стека.
Локальная сеть. Большинство реализаций намеренно оставляют доступ к локальной сети — иначе перестанут работать принтеры и файловые хранилища. Это осознанный компромисс, но знать о нём стоит.
Как проверить, что он работает
Проверять надо фактом, а не наличием галочки:
- Поднимите туннель и запомните свой внешний адрес.
- Запустите непрерывный
pingдо любого внешнего адреса. - Принудительно остановите туннель — не через кнопку «отключить» в клиенте, а жёстко: остановкой службы или отключением интерфейса.
- Смотрите на
ping. Он обязан прекратиться. Если ответы продолжают идти — kill switch не сработал.
Разница между кнопкой «отключить» и жёсткой остановкой принципиальна: при штатном отключении клиент сам снимает правила, и проверка ничего не покажет.
Чего kill switch не делает
Он не имеет отношения к анонимности. Перекрытый канал не мешает сайту опознать вас по учётной записи, отпечатку браузера или cookie — это разные задачи, и решаются они разными средствами.
Он также не спасает от утечек внутри самого туннеля — например, когда часть трафика маршрутизируется мимо него намеренно, при раздельном туннелировании. Там это не сбой, а настройка.
Коротко
Kill switch — это правило файрвола, маршрут-заглушка или системный флаг. Первый надёжнее и проверяем, третий удобнее и работает с момента загрузки, второй самый слабый. Общие слепые зоны у всех: окно до подъёма туннеля, DNS и IPv6. Проверять нужно жёсткой остановкой туннеля, а не кнопкой в интерфейсе, — иначе проверяется вежливость клиента, а не сам механизм.