Народный

Безопасность

Kill Switch

Механизм VPN-клиента, который полностью блокирует выход в интернет при разрыве VPN-туннеля. Предотвращает утечку реального IP и DNS-запросов.

Определение

Kill Switch — это функция VPN-клиента, при которой весь интернет-трафик устройства блокируется на firewall-уровне, если VPN-туннель не активен. Цель — гарантировать, что данные пользователя никогда не покидают устройство в открытом виде, даже если туннель обрывается на доли секунды. Реализуется через iptables / nftables (Linux), Windows Filtering Platform (Windows), pf (macOS, FreeBSD), Network Extension API (iOS).

Без Kill Switch при разрыве туннеля система автоматически переключается на дефолтный gateway — что для пользователя в РФ означает прямое соединение через сеть оператора с DNS-запросами через ISP.

Зачем нужен

Реальная задача Kill Switch — предотвратить три типа утечек: IP, DNS и WebRTC. Сценарии:

  • Туннель обрывается при переключении сетей (Wi-Fi → 4G, между точками доступа). Без kill switch браузер мгновенно отправляет запросы через дефолтный интерфейс, передавая реальный IP.
  • VPN-приложение крашится или его убивает Android Battery Optimizer. Без kill switch устройство продолжает работать без защиты — пользователь не замечает.
  • VPN-сервер недоступен (DDoS, регламент). Без kill switch — снова прямое соединение.

Для пользователя из России это критично: один пакет к Google DNS (8.8.8.8) через сеть МТС, и ТСПУ может зафиксировать факт DNS-запроса к запрещённому домену.

Виды Kill Switch

Различают «системный» (system-level) и «прикладной» (application-level) Kill Switch.

  • System-level Kill Switch — правила в firewall ОС блокируют весь исходящий трафик, кроме интерфейса VPN-туннеля. Самый надёжный вариант: работает, даже если VPN-приложение упало. Минус — требует прав администратора. Реализован в Mullvad, IVPN, ProtonVPN (Windows/Linux).
  • Application-level Kill Switch — клиент мониторит состояние туннеля и закрывает приложения (браузер, торрент) при разрыве. Слабее: между разрывом и остановкой приложения проходит секунда-две, и пакеты успевают уйти. Реализован в старых клиентах ExpressVPN, NordVPN.
  • Per-app Kill Switch — блокирует только указанные приложения, остальные могут идти через дефолтный gateway. Используется при split tunneling.

Реализация на разных ОС

Технически Kill Switch — это набор firewall-правил, которые активируются при подключении VPN и снимаются при ручном отключении.

Linux (iptables):

# Запретить весь outbound, кроме tun0 и DHCP к локальной сети
iptables -P OUTPUT DROP
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT  # DHCP

Windows (PowerShell + WFP): клиенты VPN используют Windows Filtering Platform для прозрачного блока всего, кроме интерфейса VPN. Не видно в Control Panel — спрятано в драйвере.

iOS / Android: через NetworkExtension API на iOS и VpnService.Builder.setAlwaysOnVpn() на Android. Это и есть «Always-On VPN» — стандартный термин Android.

Kill Switch и DNS

Kill Switch обязан блокировать DNS-запросы тоже, иначе утечка через DNS остаётся. Конкретно:

  • При разрыве туннеля браузер не знает об этом и продолжает делать DNS-запросы. Системный resolver автоматически уходит на DNS-серверы оператора.
  • Без блокировки DNS — ТСПУ видит запросы пользователя в открытом виде.
  • Правильная имплементация Kill Switch перехватывает DNS на firewall-уровне: разрешён только DNS-сервер VPN-провайдера через туннель.

Mullvad, IVPN, Proton VPN это делают корректно. Многие «второсортные» VPN-сервисы Kill Switch заявляют, но DNS не блокируют — это видно через тесты на ipleak.net и dnsleaktest.com.

Ограничения

Kill Switch не защищает от всего. Известные дыры:

  • При загрузке системы до старта VPN-приложения трафик уже идёт. Решение — boot-time firewall-правила, которые блокируют интернет до запуска VPN. Mullvad CLI это умеет.
  • WebRTC в браузере может обходить VPN на уровне приложения. Решение — отключить WebRTC в browser settings.
  • Системные обновления Windows могут запрашивать сеть через bypassing-механизмы. Редко, но фиксировалось.

Источники

  • Mullvad VPN documentation — секция Network Lock / Always Require VPN.
  • Android Developer Guide — VpnService.Builder.setAlwaysOnVpn().
  • iOS NetworkExtension Programming Guide.

Связанные термины

  • Split Tunneling — обратная функциональность.
  • WireGuard — обычно требует Kill Switch обвязки.
  • OpenVPN — родной Kill Switch отсутствует, нужен сторонний.
  • MTU — настройка, влияющая на стабильность туннеля.