Kill switch приложения против kill switch файрвола: что блокирует каждый
Один kill switch закрывает приложения, другой ставит фильтры пакетов. Пройдите эти проверки по порядку и остановитесь на первой, на которую не можете честно ответить.
Kill switch в списке функций почти ничего не говорит о том, что происходит при падении туннеля. Одна реализация закрывает выбранные процессы, другая устанавливает фильтры пакетов на границе операционной системы, а третья просто пытается переподключиться. Разница проявляется в секундах после сбоя, а не на экране настроек. Пройдите эти проверки по порядку и остановитесь на первой, на которую не можете честно ответить, потому что именно там заканчивается ваше реальное покрытие.
Сначала назовите механизм принуждения
Завершение процессов — это функция жизненного цикла приложения. Она находит выбранные программы после обнаруженного сбоя туннеля и закрывает их. Всё, что не является главным процессом, выживает: вспомогательные службы, фоновая синхронизация и любое приложение, запущенное секундой позже, имеют свой жизненный цикл и своё время.
Фильтрация пакетов — это функция операционной системы. Она отказывает трафику, который не идёт по разрешённому пути, что является более сильным обещанием, но только в пределах того, что действительно покрывает правило. Семейство адресов, интерфейс, исключённые приложения и исключения решают это, а не надпись в клиенте.
Переживает ли блокировка клиента?
Задайте четыре вопроса в этом порядке: что происходит при падении, при ручном выходе, при выходе из системы и при перезагрузке. Правило, которое поддерживает сам клиент, обычно удаляется при корректном завершении и часто остаётся после падения. Правило, установленное в хранилище платформы, может вести себя наоборот: переживать и клиента, и иногда удаление.
Закройте клиент посреди долгой загрузки и посмотрите, останавливается передача или продолжается.
Ищите стандартные дыры
IPv6 — первая. Правило, написанное для адресов IPv4, оставляет трафик IPv6 нетронутым, и многие клиенты пишут только половину v4. Вторая — интерфейс: USB-тетеринг, второй Wi-Fi адаптер и сотовый модем могут не входить в правило, ограниченное основным подключением. Исключённые приложения и исключения локальной сети — третья.
В Windows можно прочитать установленные правила вместо того, чтобы доверять переключателю: Get-NetFirewallRule -DisplayName '*VPN*' и netsh wfp show filters оба показывают, что существует. В Linux iptables -S, ip6tables -S и nft list ruleset покрывают обычные случаи, и сравнение всех трёх и есть суть.
DNS — обычная утечка
Блокировка TCP при открытом UDP 53 даёт очень убедительный kill switch, который всё ещё отвечает на каждый запрос имени хоста. То же самое происходит, когда DNS передаётся резолверу на другом интерфейсе, или когда клиент блокирует только v4, а резолвер доступен через v6.
При упавшем туннеле разрешите одно известное имя и посмотрите, возвращается ли ответ. Если возвращается, трафик не заблокирован полностью, что бы ни говорил значок состояния.
Проверяйте переход, а не переключатель
Выключение VPN из его собственного меню — это корректное завершение, и корректный случай каждая реализация обрабатывает хорошо. Важен грубый переход: убейте процесс туннеля, выдерните сеть, дайте серверу перестать отвечать. Затем запустите запрос и посмотрите, провалится он или тихо использует физический канал.
Результат с одного ноутбука не переносится на телефон или роутер. Разные API платформ, разные значения по умолчанию, а в Android разница резкая: always-on с блокировкой применяет система, а не клиент, поэтому он продолжает работать, когда клиент не работает. Руководство по VPN для Android описывает это разделение.
Оставьте путь назад
Блокировка на уровне системы имеет обратный режим отказа. Фильтры, переживающие клиента, могут оставить машину совсем без сети после удаления, а это обращение в поддержку без очевидной причины. Прежде чем включать любой kill switch, который пишет правила платформы, отметьте, как он удаляется, и держите путь восстановления от поставщика там, где сможете его найти.
Если вы не можете ответить на проверки падения, IPv6, DNS и перехода для своего клиента, относитесь к нему как к переключателю уровня приложения с известными дырами и планируйте соответственно.