#Симптом и границы применимости
Если сайт открывается по IPv4, но не по IPv6, проверьте DNS-запись AAAA, прослушивание IPv6 на самом Nginx, доступность порта по IPv6 и сертификат. Ошибки на IPv6 и проблемы всего сайта нельзя смешивать.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| AAAA ведёт не на тот серверКлиенты с IPv6 могут попадать на старый узел. | dig AAAA показывает неизвестный IPv6 | Исправить адрес у владельца DNS после сверки с сервером |
| Нет IPv6-сокетаlisten 443 без IPv6-параметра не гарантирует требуемый IPv6-сокет. | curl -6 не устанавливает соединение, ss не показывает [::]:443 | Проверить listen и наличие IPv6 на интерфейсе |
| Порт блокируется для IPv6Наличие правил IPv4 не означает такого же разрешения для IPv6. | Локально -6 работает, из интернета -6 нет | Проверить отдельные правила IPv6 firewall и провайдера |
#Пошаговая диагностика и исправление
- Проверьте DNS с устройства клиентаВ терминале клиента выполните DNS-запросы для A и AAAA. AAAA отсутствует — браузер не должен выбирать IPv6 для этого домена; неверный AAAA — явная проблема. На Windows без dig используйте nslookup -type=AAAA example.com.
- Linux/macOS при наличии dig; домен заменитьLinux · Терминал (Bash)КомандаLinux/macOS при наличии dig; домен заменить. Команды ничего не меняют.
dig +short A example.com; dig +short AAAA example.com
- Сравните запросы по двум семействам адресовНа компьютере с реальным IPv6-доступом вызовите curl принудительно с -4 и -6. Сравните, дошло ли соединение, HTTP-код, TLS-сообщение и время. Если у клиента IPv6 отсутствует, ошибка curl -6 ещё не доказывает проблему сервера.Linux · Терминал (Bash)КомандаПараметры -4/-6 выбирают IP-протокол, -I запрашивает заголовки, -v выводит диагностику.
curl -4 -Ivs https://example.com/; curl -6 -Ivs https://example.com/
- Проверьте IPv6-адрес сервера и портПодключитесь по SSH. Сначала ip -6 addr: есть ли глобальный адрес на сетевом интерфейсе; затем ss: слушается ли нужный порт по IPv6. Если сервер за балансировщиком или CDN, проверяйте входящую точку вместо origin.
- Команды чтенияLinux · Терминал (Bash)КомандаНужен sudoКоманды чтения. Адрес из диапазона fe80:: только локальный и не заменяет глобальный IPv6.
ip -6 addr show; sudo ss -lntp | grep -E ":(80|443)[[:space:]]"
- Сверьте виртуальные серверы и сертификатВ действующем server-блоке проверьте listen [::]:443 ssl и server_name; наличие директивы зависит от вашей схемы. Проверьте, не попадает ли IPv6 в другой default_server и не выдаёт ли иной сертификат. Не добавляйте listen, пока системный IPv6 не настроен.
- Только чтениеLinux · Терминал (Bash)КомандаНужен sudoТолько чтение. Не публикуйте закрытые пути и конфиденциальный вывод.
sudo nginx -t; sudo nginx -T 2>&1 | grep -nE "listen|server_name|ssl_certificate"
- Проверьте защиту и маршрутизациюУ администратора сервера проверьте IPv6-правила nftables/ip6tables, группы безопасности облака и маршрутизатор. Не отключайте защиту целиком. Если AAAA ведёт на неправильный узел, исправляйте DNS и дождитесь истечения TTL; не убирайте поддержку IPv6 без плана.
- Примените минимальную правкуЕсли действительно не хватало IPv6 listen, добавьте его в нужный виртуальный сервер после копии конфигурации; проверьте nginx -t и только тогда reload. Если входящие пакеты не доходят — исправляйте маршрутизацию у провайдера, а не Nginx.Linux · Терминал (Bash)С осторожностьюНужен sudoРаботает на systemd; используйте собственный способ управления в контейнере/панели.
sudo nginx -t && sudo systemctl reload nginxКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Из внешней сети с IPv6 повторите curl -6 и откройте HTTPS без предупреждения сертификата. Сравните ответ IPv4 и IPv6 для того же имени, коды, заголовки и журнал нужного виртуального хоста.
#Если проблема не устранена
Если curl -6 не проходит даже на уровне соединения, приложите администратору AAAA, вывод ss и проверку маршрута. Если TLS проходит, но отличается страница — ищите неправильный server_name/IPv6 default_server.