Выберите продукт

IPv6 на VDS: AAAA, настройка Nginx/Apache и firewall (ip6tables/UFW)

Практический чеклист для IPv6 на VDS: проверяем адрес и default route, добавляем AAAA в DNS, включаем listen [::] в Nginx/Apache, открываем порты в ip6tables/UFW и тестируем curl -6 и Happy Eyeballs.
IPv6 на VDS: AAAA, настройка Nginx/Apache и firewall (ip6tables/UFW)

Зачем включать IPv6 на сервере (и почему «и так работает» — не аргумент)

IPv6 — это не «экзотика», а нормальный второй стек, который повышает устойчивость доступа к вашим сервисам. У части провайдеров, мобильных операторов и корпоративных сетей IPv6 либо работает стабильнее, либо маршрутизация до него короче, чем до IPv4.

Но dual-stack — это не «поставил галочку». Появляются отдельные задачи: DNS-записи типа AAAA, отдельный фаервол для IPv6 (например, ip6tables или включённый IPv6 в UFW), а также корректное прослушивание портов веб-сервером (listen [::] в Nginx/Apache). И обязательно — проверка клиентского поведения (Happy Eyeballs), чтобы не получить «иногда тормозит».

Ниже — практический чеклист: от проверки адреса и маршрута до типовых проблем, которые всплывают сразу после публикации AAAA.

Базовая проверка: у VDS есть IPv6 и маршрут наружу

Сначала убедитесь, что IPv6 реально назначен интерфейсу и есть маршрут по умолчанию. Панели управления часто показывают «выдан», но это не значит «работает».

ip -6 addr show
ip -6 route show

В корректной конфигурации обычно есть:

  • Глобальный IPv6-адрес на интерфейсе (как правило, помечен scope global), часто /64 или /128.
  • Дефолтный маршрут вида default via ... (иногда через link-local шлюз).

Дальше — минимальная проверка связности по IPv6, без зависимости от DNS:

ping -6 -c 3 2606:4700:4700::1111
ping -6 -c 3 2001:4860:4860::8888

Если пинг не идёт — веб-сервер и DNS настраивать пока бессмысленно: сначала решайте адрес/маршрут/фаервол/политики провайдера.

Проверка IPv6-адреса и маршрута по умолчанию на сервере

DNS: AAAA-запись, TTL и типовые ловушки

Чтобы домен открывался по IPv6, нужна AAAA-запись, которая указывает на IPv6-адрес вашего сервера. Важно: IPv6 в DNS пишется без квадратных скобок и без портов — только адрес.

Минимально: для example.com и www.example.com заведите AAAA на один и тот же IPv6 (если у вас один фронтенд). Если фронтов несколько — делайте несколько AAAA, как и с A-записями.

Проверка, что AAAA реально резолвится

dig AAAA example.com +short
dig AAAA www.example.com +short

Если в ответ пусто — запись не создана или ещё не разошлась по кешам. Если адрес есть — проверьте, что это именно ваш адрес и он доступен снаружи.

TTL и раскатка

Для миграций полезно заранее уменьшить TTL (например, до 300–600 секунд), чтобы быстрее переключать трафик. После стабилизации верните TTL на разумные значения (например, 3600–14400), чтобы снизить нагрузку на DNS.

Ловушка №1: AAAA есть, а сервис по IPv6 не слушает

Классическая причина «то открывается, то нет»: у части клиентов IPv6 будет предпочтительнее, а на сервере 80/443 по IPv6 закрыты фаерволом или веб-сервер слушает только IPv4.

Ловушка №2: A и AAAA ведут на разные фронты

Если A указывает на один сервер, а AAAA — на другой (или на старый адрес), пользователи по IPv6 будут видеть другой контент/настройки. Синхронизируйте конфигурации и внимательно сверяйте, куда ведут обе записи.

FastFox VDS
Регистрация доменов от 99 руб.
Каждый проект заслуживает идеального доменного имени, выберите один из сотни, чтобы начать работу!

Happy Eyeballs: почему «иногда тормозит» именно из‑за IPv6

Happy Eyeballs — это поведение клиентов, когда при наличии IPv4 и IPv6 они пробуют оба стека почти параллельно и выбирают тот, который быстрее/успешнее. Это снижает риск «не открылось вообще», но не отменяет проблем кривой конфигурации.

Типичная история: по IPv6 порт 443 формально «доступен», но маршрут нестабилен, есть потери или ломается TLS-рукопожатие. Клиент сначала пытается IPv6, теряет время на таймауты, потом переключается на IPv4 — пользователь видит задержку.

Если публикуете AAAA, IPv6 должен быть не просто «включён», а по качеству сопоставим с IPv4: открытые порты, корректные ответы, рабочий ICMPv6 для PMTU и отсутствие регулярных потерь.

Практика: сначала поднимите и протестируйте доступ по IPv6 «по IP», затем добавляйте AAAA, и только потом включайте редиректы/HTTPS-логику, завязанную на домен.

Nginx: включаем IPv6 корректно (dual-stack)

В Nginx поддержка IPv6 обычно есть из коробки, но слушает он только то, что указано в listen. Для dual-stack почти всегда достаточно добавить отдельный listen на [::].

Минимальный пример server-блока для 80/tcp (IPv4 + IPv6)

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    root /var/www/example;
    index index.html index.htm;
}

Для HTTPS логика аналогичная: listen 443 ssl; и listen [::]:443 ssl; плюс ваши параметры TLS. Если виртуальных хостов много — убедитесь, что нужный vhost имеет IPv6-listen, иначе часть доменов по IPv6 может попадать в «дефолтный» сервер.

Проверяем, что Nginx реально слушает IPv6

ss -lntp | grep -E ':(80|443)\s'
ss -lntp6 | grep -E ':(80|443)\s'

Нюанс: net.ipv6.bindv6only и «двойное» слушание

В Linux IPv6-сокет иногда может принимать и IPv4 (через IPv4-mapped адреса), а иногда — нет. Это зависит от net.ipv6.bindv6only и поведения приложения. Надёжнее явно указывать два listen: для IPv4 и для IPv6.

Если дальше вы будете «дотягивать» безопасность, пригодятся отдельные настройки заголовков. См. разбор про HTTP security headers в Nginx/Apache.

Apache: IPv6 через Listen и VirtualHost

В Apache IPv6 обычно сводится к корректным директивам Listen. Частый рабочий вариант — слушать отдельно IPv4 и IPv6 на нужных портах.

Пример Listen для dual-stack

Listen 0.0.0.0:80
Listen [::]:80

Аналогично для 443. В большинстве случаев удобнее оставить vhost как <VirtualHost *:80> и <VirtualHost *:443> — Apache применит их ко всем слушающим сокетам. Пример (теги только текстом):

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example
</VirtualHost>

Проверка, что Apache слушает IPv6

apachectl -S
ss -lntp | grep -E ':(80|443)\s'

Если IPv6 не слушает при «правильном» конфиге — проверьте, что IPv6 не отключён в системе через sysctl и что сервис перезагружен после изменений.

FastFox SSL
Надежные SSL-сертификаты
Мы предлагаем широкий спектр SSL-сертификатов от GlobalSign по самым низким ценам. Поможем с покупкой и установкой SSL бесплатно!

Firewall: ip6tables и UFW — не забываем про второй стек

Правила для IPv4 и IPv6 — это разные наборы. Открытый 443 в iptables не означает открытый 443 в ip6tables. На этом месте ломается половина внедрений AAAA.

Вариант 1: ip6tables (быстро понять текущее состояние)

ip6tables -S
ip6tables -L -n -v

Если политика входа DROP — нужны явные разрешения на нужные порты и состояния.

Пример базовой «скелетной» политики: loopback, ESTABLISHED,RELATED, ICMPv6 (важно), SSH, HTTP/HTTPS.

ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

ICMPv6 нельзя «просто запретить всё». В IPv6 через ICMPv6 работают критичные механизмы, включая PMTU discovery. Полный запрет ICMPv6 часто приводит к странным зависаниям на HTTPS и обрывам при передаче крупных ответов.

Вариант 2: UFW и поддержка IPv6

Если используете UFW — проверьте, включён ли IPv6 в настройках UFW (параметр IPV6). Быстрая проверка статуса:

ufw status verbose

Дальше правила обычно задаются одинаково и применяются к обоим стекам, если IPv6 включён:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

Диагностика правил фаервола для IPv6: ip6tables и UFW

Проверка снаружи: порты, TLS и реальное поведение клиента

Проверяйте не только «на сервере всё слушает», но и «снаружи реально подключается». Идеально — с отдельной машины/сети, чтобы исключить локальные маршруты.

Проверка порта по IPv6

nc -6 -vz example.com 80
nc -6 -vz example.com 443

Или сразу по IPv6-адресу:

nc -6 -vz 2001:db8::10 443

Проверка HTTP/HTTPS по IPv6

curl -6 -I http://example.com
curl -6 -I https://example.com

Если curl -6 не подключается, но curl -4 работает — почти всегда проблема в фаерволе, прослушивании портов или маршрутизации именно IPv6.

Типовые проблемы и быстрые диагностики

1) «AAAA добавил — сайт стал открываться медленнее»

Обычно это Happy Eyeballs и проблемы на IPv6. Чаще всего причина одна из следующих:

  • 80/443 закрыты в ip6tables/UFW.
  • Веб-сервер слушает только IPv4.
  • Сломан PMTU из-за некорректно фильтруемого ICMPv6.
  • Есть потери/асимметрия маршрута по IPv6.

Начните с curl -6 -I, затем проверьте ss -lntp6 и правила ip6tables -L -n -v.

2) «По IPv6 открывается чужой сайт/дефолтная страница»

Часто это означает, что на IPv6 набор vhost отличается или неправильно выбран default vhost. Проверьте, что нужный server_name обслуживается на сокете [::]:80/[::]:443 и что в каждом vhost прописан IPv6-listen (для Nginx) или нужные Listen (для Apache).

3) «SSH по IPv6 не работает, хотя пинг идёт»

Пинг — это ICMPv6, а SSH — TCP/22. Проверьте, что порт 22 открыт в IPv6-фаерволе и что sshd слушает IPv6. В OpenSSH это зависит от AddressFamily (часто по умолчанию any), но надёжнее проверять фактом через ss -lntp.

Мини-чеклист перед публикацией AAAA

  1. На интерфейсе есть глобальный IPv6 и дефолтный маршрут.
  2. ping -6 до внешних адресов проходит.
  3. Веб-сервер слушает [::]:80 и [::]:443.
  4. В ip6tables/UFW открыты 80/443 (и 22 при необходимости), ICMPv6 не «задушен».
  5. curl -6 -I https://example.com возвращает ожидаемые заголовки/код.
  6. Только после этого добавляйте AAAA в DNS и мониторьте ошибки/латентность.

Практика эксплуатации: мониторинг и гигиена IPv6

IPv6 часто включают один раз и забывают — пока не прилетает тикет «у части пользователей тормозит». Чтобы не жить в режиме тушения пожаров:

  • Добавьте в мониторинг отдельные проверки по IPv6 (TCP/HTTP/HTTPS), а не только «по домену как получится».
  • Смотрите access-логи веб-сервера: по IP клиента легко понять, каким стеком пользовались.
  • При миграциях не забывайте про AAAA наравне с A.

Если вы только выбираете площадку под проект, удобнее сразу брать VDS с выдачей IPv6 и понятной сетевой схемой: так меньше сюрпризов при раскатке dual-stack.

В итоге правильно настроенный IPv6 даёт реальную пользу: больше покрытие сетей, меньше зависимость от дефицита IPv4 и более предсказуемое подключение у части аудитории.

Поделиться статьей

Вам будет интересно

Debian/Ubuntu: duplicate address detected, DAD failed IPv6 — причины и исправление OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: duplicate address detected, DAD failed IPv6 — причины и исправление

Сообщения duplicate address detected и DAD failed в Debian/Ubuntu означают, что IPv6-адрес не прошёл проверку уникальности в локал ...
Debian/Ubuntu: как исправить swapoff: Device or resource busy при отключении swap OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить swapoff: Device or resource busy при отключении swap

Ошибка swapoff: Device or resource busy в Debian и Ubuntu обычно связана не с «битым» swap, а с нехваткой RAM, zram, автоподключен ...
Debian/Ubuntu: как исправить cloud-init status: error после first boot на VDS OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить cloud-init status: error после first boot на VDS

Если на Debian или Ubuntu после первого запуска или клонирования VDS вы видите cloud-init status: error, причина обычно в datasour ...