Число устройств в интернете давно превысило ёмкость адресного пространства IPv4, поэтому мобильные операторы и провайдеры постепенно переходят на IPv6. Большинство пользователей пока работают с обоими протоколами, и сайт, доступный только по IPv4, у них откроется. Но правильно включённый IPv6 — это подготовка к будущему и более прямое подключение в некоторых сетях. А вот неправильно включённый IPv6 может сделать сайт медленным или вовсе недоступным для части посетителей, поэтому действовать нужно по шагам.
Как выглядит адрес IPv6 и как он записывается в DNS
Адрес IPv6 имеет длину 128 бит и состоит из восьми шестнадцатеричных групп, разделённых двоеточиями. Подряд идущие нули сокращаются, например 2001:db8:10::25. В статье используется диапазон 2001:db8::/32, зарезервированный для документации и примеров. Для IPv4 в DNS используется запись A, для IPv6 — запись AAAA. Обе записи могут существовать одновременно, это называется dual-stack: клиент сам выбирает, по какому протоколу подключаться.
example.uz. 3600 IN A 203.0.113.10
example.uz. 3600 IN AAAA 2001:db8:10::25
www.example.uz. 3600 IN CNAME example.uz.
Шаг первый: есть ли у сервера IPv6
Прежде чем добавлять AAAA, убедитесь, что на сервере есть рабочий глобальный IPv6-адрес, доступный извне. Локального адреса, начинающегося с fe80::, недостаточно — он работает только внутри сегмента. Глобальные адреса обычно начинаются с 2 или 3. Проверить адрес и внешнее подключение можно так:
ip -6 addr show scope global
ping -6 -c 3 2001:4860:4860::8888
curl -6 -I https://example.uz
На виртуальном хостинге наличие IPv6 зависит от провайдера. Для хостинга или VPS в sayt.uz это можно уточнить в личном кабинете или через техподдержку. Если адреса нет, не добавляйте AAAA вовсе: неверная или нерабочая запись AAAA хуже, чем её отсутствие.
Настройка веб-сервера на прослушивание IPv6
Многие веб-серверы по умолчанию слушают только IPv4. В Nginx в каждый блок server добавляется отдельная директива listen для IPv6. Без неё запись AAAA будет работать, но сервер не примет соединение, и браузер будет ждать.
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name example.uz www.example.uz;
# ...
}
После правки проверьте синтаксис командой nginx -t и выполните systemctl reload nginx. Если в выводе ss -tlnp | grep ':443' есть строка [::]:443, сервер слушает IPv6. В Apache директива Listen 443 обычно охватывает оба протокола, но если виртуальные хосты привязаны к конкретному IPv4-адресу, к ним нужно добавить и IPv6-адрес.
Файрвол и другие забытые места
Самая частая ошибка: правила файрвола для IPv4 не переносятся на IPv6 автоматически. У iptables и ip6tables отдельные наборы правил, поэтому порты 80 и 443 нужно открыть и для IPv6. При использовании UFW проверьте, что в /etc/default/ufw стоит IPV6=yes. Опасна и обратная ситуация: закрытые по IPv4 база данных или SSH могут остаться открытыми по IPv6.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ip6tables -L -n
Есть что проверить и на уровне приложения. Белые списки по IP, например доступ к админке только с офисного адреса, без учёта IPv6 заблокируют сотрудников, пришедших по IPv6. Если колонка для IP в базе данных объявлена как VARCHAR(15), IPv6-адрес в неё не поместится — нужно минимум 45 символов. Скрипты анализа логов и инструменты вроде fail2ban тоже должны корректно разбирать IPv6.
Почта: SPF, PTR и осторожность
Если почтовый сервер отправляет письма и по IPv6, в SPF добавляется механизм ip6:, иначе принимающая сторона сочтёт письмо подозрительным. Кроме того, для IPv6-адреса должна быть настроена обратная зона (PTR): крупные почтовые сервисы предъявляют к письмам по IPv6 заметно более строгие требования к PTR и аутентификации. Если настроить PTR нельзя, почту пока лучше отправлять только по IPv4.
example.uz. 3600 IN TXT "v=spf1 ip4:203.0.113.10 ip6:2001:db8:10::25 -all"
Порядок проверки и реальный пример
При переносе сайта частной клиники в Ташкенте на VPS администратор включал IPv6 так. Сначала проверил наличие глобального адреса и прохождение ping во внешнюю сеть. Затем добавил в Nginx строки listen [::] и открыл порты в файрволе. После этого добавил AAAA с коротким TTL, например 300 секунд, и проверил доступ из сети с IPv6. Когда за несколько дней проблем не возникло, TTL вернули к обычному значению.
dig AAAA example.uz +short
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://example.uz
curl -4 -sS -o /dev/null -w '%{http_code}\n' https://example.uz
Обе команды curl должны вернуть одинаковый код ответа. SSL-сертификат выдаётся на имя домена, а не на IP, поэтому перевыпускать его после добавления IPv6 не нужно. Однако HTTP-проверка Let's Encrypt может обращаться к домену с записью AAAA по IPv6, поэтому для продления сертификата порт 80 должен быть открыт и по IPv6. DNS-записи домена управляются в разделе DNS личного кабинета sayt.uz.
Когда стоит временно отключить IPv6
Если после добавления AAAA часть пользователей жалуется, что сайт «долго думает», вероятна проблема на маршруте IPv6. Современные браузеры пробуют оба протокола параллельно и выбирают более быстрый, но старые приложения и некоторые API-клиенты так не делают. Пока причина не найдена, самый безопасный шаг — убрать запись AAAA: по IPv4 сайт продолжит работать.