RE:NODE

Сеть10 мин чтения

Kill switch и постоянный VPN: как не допустить утечек при переподключении

Как работают kill switch и постоянный VPN в Android, где трафик утекает при загрузке и переподключении, как настроить их на каждой платформе и как это проверить.

0 прочтений

Kill switch блокирует весь сетевой трафик, пока туннель VPN не поднят, поэтому через обычное подключение ничего не утекает, пока VPN запускается, переподключается или упал. Постоянный VPN (always-on) - вторая половина: он запускает VPN при загрузке и восстанавливает его после каждой смены сети, без вашего участия. В Android есть и то и другое прямо в настройках VPN: «Постоянная VPN» (Always-on VPN) и «Блокировать соединения без VPN». В Windows и macOS общесистемного переключателя нет, поэтому всё целиком зависит от клиента - в приложении WireGuard для Windows он есть, во многих других нет - или от правил файрвола, которые вы напишете сами. iOS где-то посередине. Что бы вы ни использовали, проверяйте это: выдерните подключение из-под VPN и посмотрите, что проходит.

Это важно из-за времени. Тест на утечки, запущенный в спокойный момент, показывает идеальный результат; утечки случаются в те секунды, когда вы будите ноутбук, переходите с wifi на мобильный интернет или перезапускается сервер.

Когда трафик проскальзывает наружу#

VPN-клиент - это программа, и бывают моменты, когда она не запущена или не подключена, а устройство при этом вполне в сети.

МоментЧто происходит без защиты
Загрузка или вход в системуПриложения начинают синхронизацию до запуска VPN-клиента
Подключение к новой сетиФоновые приложения подключаются в тот же миг, как появляется сеть
Переход с wifi на мобильный интернетТуннель падает; трафик идёт по новому маршруту по умолчанию, пока VPN не переподключится
Выход из снаТуннель устарел; ОС возобновляет трафик раньше, чем клиент это заметит
Перезапуск или недоступность сервераКлиент повторяет попытки; тем временем трафик идёт напрямую
Сбой или обновление клиентаМаршруты и настройки DNS могут быть сняты или оставлены наполовину

В каждом случае окно короткое - секунды, иногда минута, - но именно тогда почтовые клиенты, мессенджеры, облачная синхронизация и проверки обновлений отправляют первые запросы, и эти запросы раскрывают локальной сети ваш настоящий адрес и ваш DNS. Если вы пользуетесь VPN из-за сети, которой не доверяете, важны именно эти секунды. Что локальная сеть видит в это окно, объясняет статья VPN в публичном wifi.

Android: постоянный VPN и блокировка соединений без VPN#

Android правильно решает эту задачу начиная с Android 8. Любое VPN-приложение на системной службе VPN можно сделать постоянным, а блокировку обеспечивает сама система.

На Pixel и чистом Android: Настройки, Сеть и интернет, VPN, затем значок шестерёнки рядом с VPN-приложением. На телефонах Samsung список VPN находится в разделе Настройки, Подключения, Другие настройки, VPN. Другие производители переносят его; поиск «VPN» в настройках его найдёт.

Два переключателя:

  • Постоянная VPN - Android запускает VPN при загрузке и перезапускает, если он остановился. Постоянным может быть только одно приложение.
  • Блокировать соединения без VPN - режим блокировки (lockdown). Пока VPN не подключён, приложения не получают сети вообще.

Когда включены оба, приложение не может ничего отправить вне туннеля ни при загрузке, ни при смене сети, ни после сбоя; оно просто ждёт. Именно таким и должен быть kill switch.

VLESS-клиенты вроде v2rayNG и Hiddify работают с этим в режиме VPN, потому что в этом режиме они обычные VPN-приложения Android. В режиме только прокси - нет, и настройки постоянного VPN к ним не применяются.

Три оговорки:

  1. Captive-порталы перестают работать. При включённой блокировке страница входа отеля не может загрузиться, поэтому VPN никогда не подключится. Отключите блокировку, пройдите портал, подключитесь и включите её снова.
  2. Один VPN за раз. Постоянный VPN может быть вытеснен включением другого VPN-приложения, а файрвол или блокировщик рекламы, работающий как локальный VPN, будет с ним конфликтовать.
  3. Сам Android отправляет немного трафика вне туннеля. Исследователи показали, что даже в режиме блокировки Android отправляет часть собственного трафика - например, проверки подключения - мимо VPN. Google считает это задуманным поведением. Для большинства это несколько запросов к серверам Google; если ваша модель угроз не допускает никакого трафика вне туннеля, знайте, что он есть.

Windows: зависит от клиента#

В Windows нет встроенного kill switch для сторонних VPN-клиентов. Защита должна исходить от клиента - обычно он добавляет правила Windows Filtering Platform, блокирующие трафик вне туннеля.

КлиентKill switch в Windows
WireGuard for WindowsПараметр «Block untunneled traffic (kill-switch)», виден, когда туннель направляет весь трафик (0.0.0.0/0)
OpenVPNВстроенного нет; block-outside-dns блокирует только DNS на других адаптерах
VLESS-клиентыЗависит от клиента и версии; ищите в настройках режим TUN и параметр блокировки или strict route

Две вещи, которые стоит знать, какой бы клиент вы ни использовали:

  • Режим прокси - не VPN. Клиент в роли системного прокси ничего не может заблокировать; приложения, игнорирующие прокси, идут напрямую, запущен клиент или нет. Для kill switch нужен режим VPN или TUN клиента.
  • Kill switch может пережить клиент. Правила файрвола, блокирующие трафик вне туннеля, иногда остаются после сбоя, и вы остаётесь без интернета. Это переключатель делает свою работу; перезапуск клиента или его задокументированный сброс это снимает.

Более надёжный вариант своими руками - Брандмауэр Защитника Windows: запрет исходящего трафика по умолчанию, затем разрешение соединения VPN-клиента с адресом и портом сервера и разрешение всего на VPN-адаптере. Это работает, переживает сбой клиента и позволяет легко запереть самого себя, поэтому пробуйте на машине, к которой есть физический доступ.

macOS и iOS#

macOS системного kill switch тоже не имеет. Некоторые клиенты реализуют его через пакетный фильтр macOS (pf); многие просто этого не делают. Действует то же различие между прокси и VPN: клиент в роли системного прокси защищает только приложения, которые учитывают прокси.

iOS даёт VPN-приложениям правила подключения по требованию (on-demand), которые автоматически переподключают VPN при входе устройства в сеть, и более новую настройку, которая, если приложение её использует, должна направлять весь трафик через туннель и блокировать его, когда туннель не поднят. Использует ли их конкретное VPN-приложение, решает его разработчик, поэтому ищите в собственных настройках приложения параметры подключения по требованию или автоматического подключения. Давняя проблема iOS - соединения, уже открытые на момент запуска VPN, могут оставаться вне туннеля, пока не закроются; после подключения кратковременно включить и выключить режим полёта - грубый способ их сбросить.

Linux: напишите правило сами#

В Linux самый чистый kill switch - правило файрвола, которое разрешает исходящий трафик только через интерфейс туннеля, к самому VPN-серверу и в локальную сеть. С nftables:

/etc/nftables.d/killswitch.nft
table inet killswitch {  chain output {    type filter hook output priority 0; policy drop;    oifname "lo" accept    oifname "tun0" accept    ip daddr 203.0.113.10 tcp dport 443 accept    ip daddr 192.168.0.0/16 accept    udp dport 67 accept  }}

Замените tun0 именем интерфейса вашего туннеля (wg0 для WireGuard, а для клиента Xray - как он называет своё TUN-устройство), 203.0.113.10 и 443 - адресом и портом вашего сервера, а локальный диапазон - своим. Строка для DHCP позволяет продлевать аренду адреса. Поскольку политика - drop, всё, что не перечислено, блокируется независимо от того, запущен VPN-клиент или нет, - в этом и смысл, и поэтому же загружать правило стоит с консоли, до которой вы доберётесь, если что-то пойдёт не так. Правила с запретом по умолчанию в целом разобраны в статье правила файрвола, которые имеют значение.

Роутеры: один kill switch на всю сеть#

Некоторые устройства вообще не могут запустить VPN-клиент: смарт-телевизоры без магазина приложений, игровые консоли, старые приставки для стриминга. Для них единственный путь через VPN - роутер, который сам запускает клиент и отправляет их трафик в туннель. Это умеет прошивка роутеров вроде OpenWrt, а пакеты сообщества добавляют к ней Xray и sing-box наряду с WireGuard и OpenVPN.

На роутере kill switch - это решение файрвола, а не настройка приложения. Обычная схема - поместить интерфейс туннеля в отдельную зону файрвола и разрешить пересылку из локальной сети только в эту зону, а не в обычную, смотрящую в интернет. Если туннель падает, локальным устройствам некуда пересылать трафик, и он останавливается - это и есть kill switch. Собственный трафик роутера, например само соединение VPN и синхронизация времени, по-прежнему идёт обычным путём.

Два предостережения. Kill switch на роутере действует на каждое устройство за ним, поэтому, когда VPN не работает, без сети остаётся весь дом, а не один телефон. А CPU роутера часто самый медленный процессор в сети; шифрование, которое телефон делает незаметно, может ограничить дешёвый роутер долей скорости канала. Признаки, на которые стоит смотреть, - в статье почему VPN тормозит.

Средний вариант, которым пользуются многие семьи: роутер туннелирует только устройства, которые не могут запустить клиент, а телефоны и ноутбуки запускают свой клиент со своими настройками постоянного VPN.

Проверка kill switch#

Не верьте галочке на слово. Проверяйте те моменты, когда случаются утечки. На ноутбуке цикл, который каждую секунду печатает ваш публичный адрес, делает пробелы видимыми:

bash
$ while true; do curl -s --max-time 3 https://ifconfig.me; echo; sleep 1; done
  1. Подключите VPN и запустите цикл или держите открытой страницу, показывающую ваш публичный адрес, и обновляйте её.
  2. Заставьте туннель упасть. Любым способом: завершите процесс VPN-клиента, заблокируйте адрес сервера на роутере, переключитесь с wifi на мобильный интернет или переведите устройство в сон и разбудите.
  3. Смотрите на вывод. С работающим kill switch вы увидите адрес сервера, затем таймауты, пока туннель лежит, затем снова адрес сервера. Без него в промежутке появится ваш настоящий адрес.
  4. Повторите при загрузке: перезапустите устройство и проверьте, что делают первые запросы, в идеале по логу файрвола или DNS на роутере.

На Android проверка проще: при включённой блокировке остановите VPN из уведомления и попробуйте загрузить любую страницу. Должно не получиться.

Руководство по проверке утечек DNS охватывает постоянные утечки; эта проверка - кратковременные. Чистыми должны быть и те и другие.

Компромиссы#

Kill switch намеренно делает VPN единой точкой отказа. Когда сервер недоступен, у вас нет интернета. Приемлемо ли это, зависит от того, зачем вы пользуетесь VPN.

  • В недоверенных сетях или там, где сеть блокирует трафик или следит за ним, закрываться при отказе - именно то, что нужно. Несколько минут без связи лучше, чем несколько минут, когда всё на виду.
  • Дома, для обычной приватности от провайдера, постоянный VPN без блокировки - разумная середина: VPN возвращается сам, а короткий разрыв не отрезает вас от сети.
  • Для локальных устройств проверьте, что правило пропускает вашу локальную сеть, иначе принтер, NAS и трансляция на экран будут переставать работать каждый раз, когда VPN отключён.

Что бы вы ни выбрали, это не анонимность. Kill switch гарантирует лишь то, что трафик не уходит мимо туннеля; он не меняет того, кто может видеть его на дальнем конце. Кроме того, в некоторых странах использование VPN ограничено; узнайте правила там, где вы находитесь.

С приватным VPN-сервером#

В линейке приватных VPN RE:NODE сервер работает на Xray с VLESS и Reality, со своим адресом и ключом, и больше никого на нём нет. Защита от утечек - дело клиентской стороны, поэтому она обеспечивается на устройстве: на Android переведите v2rayNG или Hiddify в режим VPN и включите «Постоянную VPN» с блокировкой; на iPhone используйте параметры автоматического подключения клиента; на Windows приложение Renode VPN подключается по ссылке, которую выдаёт сервер, а описанный выше подход с файрволом добавляет слой, закрывающийся при отказе, если он вам нужен. Это один сервер в одном месте - в Германии, поэтому, когда он недоступен (ваша сеть блокирует его адрес, сервер перезапускается, путь не работает), kill switch сделает ровно то, что обещает, и задержит ваш трафик, пока сервер не вернётся. Импорт ссылки в каждое приложение описан в руководстве по настройке клиентов.

FAQ#

Чем kill switch отличается от постоянного VPN?

Постоянный VPN следит за тем, чтобы VPN работал: запускается при загрузке и переподключается после обрывов. Kill switch следит за тем, чтобы ничего не уходило, когда VPN не работает: трафик в промежутках блокируется. Нужны оба: постоянный VPN, чтобы свести промежутки к минимуму, и kill switch, чтобы их закрыть.

Почему после сбоя VPN-приложения у меня нет интернета?

Kill switch всё ещё блокирует трафик вне туннеля - для этого он и нужен. Перезапустите VPN-клиент, и он переподключится или снимет свои правила. На Android отключение параметра «Блокировать соединения без VPN» вернёт доступ, если VPN не может подключиться.

Останавливает ли «Блокировать соединения без VPN» в Android все утечки?

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

Можно ли использовать kill switch в wifi отеля?

Да, но сначала нужно пройти страницу входа, а kill switch её блокирует. Отключите блокировку, примите условия портала, подключите VPN, затем снова включите блокировку.

Замедляет ли kill switch соединение?

Нет. Добавленные им правила файрвола для операционной системы проверять тривиально. Единственная цена - доступность: когда VPN не работает, не работает и ваше подключение.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000