Защита от утечек DNS (DNS Leaks) и настройка Killswitch в VPN
При разрыве или сбое VPN-соединения возникают критические утечки конфиденциальных данных:
- DNS-запросы продолжают уходить на DNS-серверы локального провайдера в открытом виде (DNS Leak).
- При кратковременном рестарте VPN клиентский софт на несколько секунд отправляет открытый рабочий трафик через публичный шлюз.
- Утечки IPv6 трафика в обход VPN-туннеля, если провайдер выдает нативный IPv6 префикс.
- WebRTC утечки реального IP-адреса в браузерах.
1. Архитектура надежного VPN Killswitch на базе Iptables (Linux)
Killswitch должен блокировать любой исходящий трафик через физический интерфейс (eth0), кроме самого зашифрованного UDP-туннеля, разрешая передачу данных только через интерфейс туннеля (wg0 / tun0):
#!/bin/bash
# Сброс правил
iptables -F
iptables -X
# Политика по умолчанию: ПОЛНЫЙ ДРОП ВСЕГО
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# 1. Разрешаем трафик на Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 2. Разрешаем установленные соединения внутри VPN туннеля (wg0):
iptables -A INPUT -i wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
# 3. Разрешаем физическому интерфейсу (eth0) ТОЛЬКО связь с VPN-сервером:
iptables -A OUTPUT -o eth0 -p udp -d 198.51.100.1 --dport 51820 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 198.51.100.1 --sport 51820 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 4. ПОЛНОЕ ОТКЛЮЧЕНИЕ IPv6 для предотвращения утечек:
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=12. Защита от утечек DNS в OpenVPN (.ovpn)
Добавьте директивы принудительной изоляции резолвера в конфигурацию клиента:
# Блокировка внешних DNS через Windows WFP (Windows Filtering Platform):
block-outside-dns
# Перенаправление всех шлюзов и DNS:
redirect-gateway def1 bypass-dhcp
dhcp-option DNS 10.8.0.13. Проверка на утечки (DNS & WebRTC Leak Test)
# Тест DNS через CLI:
curl https://raw.githubusercontent.com/macvk/dnsleaktest/master/dnsleaktest.sh | bash Частые вопросы (FAQ)
Что такое утечка DNS (DNS Leak)?
Это ситуация, когда пользовательский трафик шифруется и передается через VPN, но DNS-запросы на преобразование доменных имен продолжают отправляться в открытом виде на серверы интернет-провайдера (ISP), раскрывая посещаемые ресурсы.
Почему IPv6 часто вызывает утечки данных в VPN?
Многие VPN-серверы настроены только на маршрутизацию IPv4. Если домашний провайдер поддерживает IPv6, операционная система автоматически выбирает IPv6 как более приоритетный стек и пускает трафик в открытый интернет мимо VPN.
Как WebRTC раскрывает реальный IP-адрес даже при включенном VPN?
Технология WebRTC в браузерах использует протоколы STUN/ICE для прямого p2p-соединения в обход стандартного системного сетевого шлюза, считывая локальные IP со всех физических сетевых интерфейсов.
Чем Killswitch на базе брандмауэра лучше Killswitch на базе скрипта?
Программный скрипт реагирует на событие разрыва с задержкой в несколько миллисекунд (за это время сотни пакетов успевают утечь в сеть). Правила файрвола (Iptables/WFP) аппаратно блокируют любые пакеты вне туннеля на постоянной основе.