Безопасность
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 — настройка, влияющая на стабильность туннеля.