MAATRIX / Блог / Kill switch для VPN: блокируем утечку IP при обрыве

Kill switch для VPN: блокируем утечку IP при обрыве

Kill switch для VPN: не утечь при обрыве туннеля
Блог MAATRIX · 2026-07-07

Обрыв VPN на долю секунды — и трафик уходит в открытую сеть с реальным IP. Kill switch закрывает эту дыру: если туннель падает, весь трафик режется на уровне фаервола. Разберём три рабочих способа — для WireGuard, OpenVPN и универсальный на nftables.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем нужен kill switch

VPN-клиент — это обычный процесс. Он может упасть, потерять соединение, переподключаться. В эти секунды маршрут по умолчанию возвращается на реальный интерфейс, и всё, что летит в сеть (браузер, torrent, cron-задачи), уходит с настоящим IP провайдера.

Kill switch — не функция VPN, а правило фаервола: «разрешён исходящий трафик только через туннель или только к серверу VPN, всё остальное — DROP». Даже если VPN-процесс мёртв, ядро само не пустит пакеты мимо.

  • DNS-утечки — отдельная беда: запросы могут идти в обход туннеля
  • IPv6-утечки — многие забывают, что VPN гонит только IPv4
  • Переподключение — самый частый момент утечки

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для своего VPN

Kill switch для WireGuard одной строкой

У WireGuard есть встроенный механизм через PostUp/PostDown и таблицы маршрутизации. Но самый надёжный вариант — жёсткие правила в конфиге. Добавляем в секцию [Interface]:

[Interface]
PrivateKey = <ваш_ключ>
Address = 10.8.0.2/32
DNS = 10.8.0.1
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PostDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Эти правила разрешают исходящий трафик только через интерфейс WireGuard (%i) и к локальным адресам. Как только туннель упадёт и правило снимется PostDown — но если процесс убит некорректно, правило останется висеть и продолжит блокировать. Это и есть безопасное поведение.

Поднимаем и проверяем:

wg-quick up wg0
curl -s https://ifconfig.co   # должен показать IP сервера VPN
wg-quick down wg0
curl -s --max-time 5 https://ifconfig.co   # должен зависнуть/упасть, а не показать реальный IP

Универсальный kill switch на nftables

Если хочется независимости от VPN-клиента, задаём политику фаервола отдельно. Разрешаем только: loopback, локальную сеть, эндпоинт VPN-сервера и трафик через tun/wg-интерфейс. Пример для сервера VPN 203.0.113.10:51820:

#!/usr/sbin/nft -f
flush ruleset
table inet killswitch {
  chain output {
    type filter hook output priority 0; policy drop;
    oifname "lo" accept
    ip daddr 192.168.0.0/16 accept
    ip daddr 203.0.113.10 udp dport 51820 accept
    oifname { "wg0", "tun0" } accept
    ct state established,related accept
  }
}

Сохраняем в /etc/nftables-killswitch.conf и применяем через nft -f. Пока файл активен, ни один пакет не уйдёт мимо туннеля, кроме handshake с самим VPN-сервером.

Закрываем IPv6 и DNS

Даже с рабочим kill switch IPv6 способен всё испортить. Если VPN не тоннелирует IPv6 — полностью его блокируем:

ip6tables -P OUTPUT DROP
ip6tables -A OUTPUT -o lo -j ACCEPT
ip6tables -A OUTPUT -o wg0 -j ACCEPT

DNS фиксируем на адрес внутри туннеля (в примере выше DNS = 10.8.0.1). Проверить отсутствие утечек удобно на dnsleaktest.com — должны светиться только резолверы VPN-провайдера.

Свой VPN — свой контроль

Публичные VPN-сервисы делят один IP на сотни клиентов, логируют и попадают под блокировки. Разворачивая WireGuard на собственном VPS, вы получаете выделенный IP и полный контроль над kill switch и правилами.

MAATRIX даёт зарубежный VPS (локации UK, США и РФ) с root-доступом на AMD EPYC + NVMe от $8/мес, с оплатой картой РФ, СБП, криптой или токеном MAAT — то, чего не сделать у иностранных провайдеров, не принимающих карты РФ. Ставите WireGuard за 10 минут, включаете kill switch по инструкции выше и получаете туннель, который никому не отдаёт.

apt update && apt install -y wireguard
# генерация ключей и конфига — 5 минут

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для своего VPN

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Kill switch замедляет соединение?

Нет. Это правила фаервола, они почти не нагружают ядро. Скорость определяется самим туннелем, а не блокировкой.

Что если VPN-процесс упал, а правило PostDown не сработало?

Это ожидаемое безопасное поведение: правило остаётся, трафик блокируется. Снять его можно вручную через iptables -D или перезагрузкой.

Нужен ли отдельный VPS под VPN?

Да, если важен выделенный IP, отсутствие логов и контроль. На общих сервисах вы делите IP и доверяете чужой инфраструктуре.