Настройка OpenVPN в режиме Dual-Stack: маршрутизация IPv4 и IPv6
- Утечка реального IPv6-адреса пользователя (IPv6 DNS/Traffic Leak) при включенном VPN-соединении.
- Клиенты теряют доступ к современным веб-ресурсам, работающим исключительно по IPv6.
- Ошибки инициализации адаптера:
TUN: unable to add IPv6 address to interface. - Отсутствие сквозной маршрутизации глобальных префиксов IPv6 в корпоративную сеть.
1. Архитектура Dual-Stack OpenVPN
В режиме Dual-Stack сервер OpenVPN выделяет каждому клиенту как приватный адрес IPv4 (из подсети RFC 1918), так и адрес IPv6 (из маршрутизируемого пула /64 или приватного Unique Local Address fd00::/8). Это исключает обход туннеля через стек IPv6 локального провайдера.
2. Конфигурация сервера (/etc/openvpn/server.conf)
proto udp6
port 1194
dev tun0
# Настройки IPv4 пула
server 10.9.0.0 255.255.255.0
topology subnet
# Настройки IPv6 пула (ULA префикс или публичный /64)
server-ipv6 fd42:42:42:1000::/64
# Перенаправление всего трафика (Default Gateway)
push "redirect-gateway def1"
push "redirect-gateway-ipv6 ipv6-flag"
# DNS серверы Dual-Stack
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS6 2606:4700:4700::1111"
# Защита от утечек и оптимизация
block-outside-dns
keepalive 10 60
cipher AES-128-GCM3. Включение IPv6 Forwarding и NAT66 в Linux
Отредактируйте /etc/sysctl.d/99-ipv6-vpn.conf:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1sysctl --system4. Настройка правил межсетевого экрана (iptables / ip6tables)
# Трансляция IPv4 (NAT44)
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
# Трансляция IPv6 (NAT66, если используется приватный префикс ULA)
ip6tables -t nat -A POSTROUTING -s fd42:42:42:1000::/64 -o eth0 -j MASQUERADE
# Разрешение транзитного трафика
iptables -A FORWARD -i tun0 -j ACCEPT
ip6tables -A FORWARD -i tun0 -j ACCEPT5. Проверка утечек на клиенте
# Проверка полученных адресов на клиенте
ip -6 addr show dev tun0
# Тестирование связности
ping6 -c 4 2606:4700:4700::1111
curl https://ipv6.google.com Частые вопросы (FAQ)
Что такое IPv6 Leak и чем он опасен?
Если VPN-клиент настроен только на IPv4, а локальный домашний провайдер выдает нативный IPv6, операционная система будет отправлять все IPv6-запросы напрямую в интернет мимо VPN, полностью раскрывая реальный IP-адрес и историю посещений пользователя.
Зачем нужен флаг 'proto udp6', если клиенты подключаются по IPv4?
Сокет proto udp6 в Linux по умолчанию является dual-stack сокетом: он способен одновременно принимать входящие подключения как по IPv4, так и по IPv6.
Можно ли раздавать клиентам белые публичные IPv6 адреса без NAT66?
Да. Если ваш дата-центр маршрутизирует на сервер подсеть /64 или /48, вы можете назначить ее в server-ipv6 и включить чистую маршрутизацию без NAT с использованием NDP Proxying.
Что делает директива block-outside-dns?
Она блокирует отправку DNS-запросов через любые другие сетевые адаптеры в Windows, предотвращая скрытые утечки DNS через параллельные интерфейсы.