IPv6 больше не «опция для галочки». Большие провайдеры и корпоративные сети уже предпочитают IPv6, а пользователи мобильного интернета часто приходят к вам именно по нему. Если сайт не слушает IPv6, часть аудитории будет уходить к конкурентам или получать лишнюю задержку из‑за отката к IPv4 через Happy Eyeballs. В этой статье разберём, как аккуратно включить IPv6 на VDS: от адресации и AAAA‑записей в DNS до конфигурации nginx/Apache, файрволла и полезных sysctl.
Зачем включать IPv6 в проде
Поддержка IPv6 повышает доступность и сокращает задержки в ряде сетей, особенно мобильных. Отдельный бонус — избавление от сложностей NAT в цепочке между клиентом и вами: меньше нестабильностей при установлении соединений, точнее геолокация, корректные механизмы PMTUD. Плюс вы получаете огромный адресный простор для будущих задач: адресация контейнеров, изоляция сервисов на уровне подсетей.
IPv6 — это про стабильность, предсказуемость маршрутизации и экономию на костылях. Включайте его, но делайте это управляемо: сначала сеть и файрволл, затем DNS и уже потом трафик.
Что обычно выдаёт провайдер VDS по IPv6
Типовые варианты адресации на виртуальных серверах сегодня такие:
- Один адрес
/128и шлюз по link‑local (частоfe80::1) на том же интерфейсе. Маршрут по умолчанию строится до link‑local шлюза с указанием интерфейса. - Роутируемый префикс
/64(или больше), направленный на ваш основной IPv6. Это удобно, если хотите раздавать адреса контейнерам/подслужбам. - Автоматическая конфигурация через SLAAC/RA. На VDS встречается реже, но иногда сеть отдаёт префикс анонсами RA, вы получаете адрес без ручной правки.
Для продовых серверов не используйте «временные адреса» (privacy extensions) на интерфейсе: это уместно для рабочих станций, но серверу нужен стабильный адрес, который вы публикуете в DNS. На Linux это управляется параметром use_tempaddr, о нём ниже.

Настройка IPv6 на сервере: базовые шаги
Независимо от дистрибутива: убедитесь, что IPv6 не отключён в ядре, корректно задайте адреса/маршруты и сохраните конфиг, чтобы переживал перезагрузку. Проверьте, что модуль IPv6 активен (lsmod | grep ipv6) или просто посмотрите наличие ::1 в ip -6 addr.
Далее добавьте выданный адрес на основной интерфейс, например eth0, и маршрут по умолчанию. Если у вас один /128 и link‑local шлюз, маршрут оформляется с явным интерфейсом. После применения конфигурации проверьте связность: ping -6 до внешнего адреса и traceroute -6 для маршрута.
Важно: не включайте форвардинг IPv6 на обычном веб‑VDS, если вы не роутер. Это упростит безопасность и поведение ядра. Также не блокируйте весь ICMPv6 — без него не работает соседское обнаружение (NDP), фрагментация и PMTUD, а значит, вы «поломаете» IPv6 для части клиентов.
DNS: AAAA‑записи и что учесть
Чтобы клиенты приходили по IPv6, домен должен иметь AAAA‑запись. В типичной зоне для корня домена и поддоменов добавляются соответствующие строки. TTL выбирайте осознанно: для релиза сначала снизьте, чтобы упростить откат, затем верните стандартный TTL.
; Пример фрагмента зоны
@ 3600 IN A 203.0.113.10
@ 3600 IN AAAA 2a03:1111:2222:3333::10
www 3600 IN A 203.0.113.10
www 3600 IN AAAA 2a03:1111:2222:3333::10
Если у вас несколько фронтендов, можно добавить несколько AAAA. Клиенты выберут адрес согласно своей политике, а браузеры применяют Happy Eyeballs. PTR (reverse) по IPv6 полезен для почтовых серверов и диагностики, но обычно им управляет провайдер адресного блока. Для веб‑сайта это не критично.
Не публикуйте AAAA до тех пор, пока веб‑сервер не слушает IPv6 и файрволл не пропускает трафик и ICMPv6. Иначе пользователи начнут получать таймауты. Если домен ещё не оформлен или переносите зону, пригодится регистрация доменов.
Проверка публикации и связности
Подтвердить, что запись разошлась, поможет dig AAAA. Проверить доступность по сети можно через ping -6 и curl -6 напрямую к сайту. Для TLS пригодится openssl s_client -connect <host>:443 -6, чтобы увидеть рукопожатие через IPv6.
nginx и IPv6: правильные listen и логи
Современный nginx по умолчанию умеет IPv6: добавьте listen [::]:80 и аналог для 443. В проде обычно оставляют два listen на порт: отдельный для IPv4 и отдельный для IPv6. Параметр ipv6only почти не нужен — используйте явные сокеты на v4 и v6.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
Если у вас есть обратный прокси или балансировщик, не забудьте указать список доверенных источников для real_ip, включая IPv6‑подсети, чтобы в логах и $remote_addr был адрес клиента, а не прокси.
real_ip_header X-Forwarded-For;
set_real_ip_from 192.0.2.0/24;
set_real_ip_from 2001:db8:1234::/48;
real_ip_recursive on;
Apache и IPv6: Listen и VirtualHost
Для Apache 2.4 достаточно слушать и v4, и v6; виртуальный хост можно объявить как *:80/*:443, чтобы он применился к обоим адресным семействам.
Listen 0.0.0.0:80
Listen [::]:80
Listen 0.0.0.0:443 https
Listen [::]:443 https
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
SSLEngine on
SSLCertificateFile /etc/ssl/certs/fullchain.pem
SSLCertificateKeyFile /etc/ssl/private/privkey.pem
</VirtualHost>
Если используете обратный прокси, включите mod_remoteip и добавьте доверенные IPv6‑подсети, чтобы %a в логах отражал реального клиента.
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 192.0.2.0/24
RemoteIPTrustedProxy 2001:db8:1234::/48
Выбираете стек под проект? Посмотрите сравнение веб‑серверов: nginx vs Apache 2025.

Файрволл для IPv6: минимально безопасный профиль
Ключевая мысль: IPv6 не переносит «дропнуть ICMP целиком». Без ICMPv6 не работают соседское обнаружение (NDP), маршрутизация и MTU‑договорённости. Значит, в политике нужно:
- Разрешить уже установленные соединения.
- Разрешить служебный ICMPv6: echo, NDP (Neighbor Solicitation/Advertisement), Router Solicitation/Advertisement, Packet Too Big, Time Exceeded, Parameter Problem.
- Открыть нужные сервисные порты по TCP/UDP (обычно 80/443 и 22 по SSH).
- Остальное — дропать с логированием по вкусу.
На современных системах имеет смысл использовать nftables в таблице inet, чтобы одним набором правил закрыть и IPv4, и IPv6. Ниже — срез, фокус на IPv6:
table inet filter {
sets {
allowed_tcp_services { type inet_service; elements = { 22, 80, 443 } }
}
chains {
input {
type filter hook input priority 0;
policy drop;
ct state established,related accept
iif lo accept
# ICMPv6 базовый набор
meta l4proto icmpv6 icmpv6 type { echo-request, echo-reply, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert, nd-router-solicit, packet-too-big, time-exceeded, parameter-problem } accept
# Разрешить SSH/HTTP/HTTPS на v4 и v6
tcp dport @allowed_tcp_services accept
# Остальное — дроп
}
forward { type filter hook forward priority 0; policy drop; }
output { type filter hook output priority 0; policy accept; }
}
}
Если используете UFW, убедитесь, что IPv6 включён в конфиге UFW (IPV6=yes) и перезапустите его. После этого обычные правила будут применяться к обоим семействам.
# Проверить и включить IPv6 в UFW
sudo sed -n 's/^IPV6=.*/&/p' /etc/ufw/ufw.conf
sudo nano /etc/ufw/ufw.conf # Убедитесь, что IPV6=yes
sudo ufw reload
# Базовые разрешения
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# ICMPv6 UFW обрабатывает политиками, не блокируйте его глобально
Для ip6tables подход аналогичный: разрешить ESTABLISHED/RELATED, пропустить ICMPv6 ключевых типов и открыть сервисные порты. Но в новых развёртках лучше опираться на nftables.
Защита от мелких атак: rate‑limit и TCP‑настройки
Можно ограничить ICMPv6 эхо‑запросы по скорости, чтобы не тратить ресурсы на ping‑флуды, но не трогайте NDP/RA типы. В nftables это правило с limit. Для TCP полезно включить syncookies и разумные очереди — это одинаково для IPv4/IPv6.
# Пример фрагмента для rate-limit echo-request
meta l4proto icmpv6 icmpv6 type echo-request limit rate 10/second burst 20 accept
Полезные sysctl для IPv6 на сервере
Ниже типовой набор для веб‑VDS. Он исходит из предположения, что сервер — не роутер, адрес постоянный, RA не требуется (или уже обработан на этапе конфигурации интерфейса).
# Включить стек IPv6 (на случай, если кто-то пытался отключать)
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
# Не использовать временные адреса на сервере
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
# Отключить перенаправления
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Отключить исходящие redirects сервером
net.ipv6.conf.all.send_redirects = 0
net.ipv6.conf.default.send_redirects = 0
# Не форвардим (если вы не роутер)
net.ipv6.conf.all.forwarding = 0
# TCP защитные настройки (общие)
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
Если ваш адрес выдается через RA/SLAAC и вы хотите принимать анонсы на интерфейсе, accept_ra можно оставить включённым для конкретного интерфейса. На серверах с ручной статикой, наоборот, не полагайтесь на RA и держите маршруты в конфиге сети.
Проверка сервиса по IPv6
Принимайте IPv6 в прод поступательно:
- Проверка локально:
curl -g -6 http://[<ваш IPv6>]/иss -lntp— слушает ли nginx/Apache на[::]:80/443. - Проверка с внешнего узла:
ping -6,curl -6,openssl s_client -6 -connect. - Только после этого публикуйте AAAA с пониженным TTL (например, 300 секунд) и увеличьте его через сутки, когда убедитесь, что метрики ошибок не выросли.
Следите за логами. В nginx/Apache адреса клиентов по IPv6 уже отражаются корректно. Для аналитики помните: одно и то же лицо может иметь разные IPv6 префиксы из‑за политик провайдера, поэтому опираться на /128 как на «уникальный идентификатор» не стоит.
TLS по IPv6: нюансы
С точки зрения TLS разницы нет — сертификат привязан к имени хоста, а не к IP. Важно лишь, чтобы фронтенд на [::]:443 обслуживал тот же серверный блок/виртуальный хост, что и IPv4. Для выпуска и автообновления используйте актуальные SSL-сертификаты. Дополнительно укрепите безопасность, включив политики из статьи про заголовки: HTTP security headers.
Типичные ошибки и как их избежать
- Публикация AAAA до настройки файрволла и веб‑сервера. Итог — таймауты у части клиентов. Рецепт: сначала сервер и сеть, затем DNS.
- Дроп всего ICMPv6. Итог — ломается NDP/PMTUD, пользователи жалуются на «зависания» и «очень медленно». Рецепт: разрешайте критические типы ICMPv6.
- Оставили только
listen [::]:80без IPv4 — теряете пользователей старых сетей. Рецепт: держите dual‑stack, если не вынуждены делать только IPv6. - Неверный маршрут по умолчанию при
/128. Рецепт: используйте link‑local шлюз на нужном интерфейсе. - Логи показывают адрес прокси. Рецепт: настройте
real_ipв nginx илиmod_remoteipв Apache с IPv6‑подсетями. - UFW не применяет правила к IPv6. Рецепт:
IPV6=yesв конфиге UFW и перезагрузка сервиса.
Чек‑лист релиза IPv6
- Адреса и маршрут IPv6 добавлены на интерфейс, соединение наружу есть.
- Файрволл: ESTABLISHED/RELATED пропущены, ICMPv6 базовые типы разрешены, порты 22/80/443 открыты.
- nginx/Apache слушают
[::]:80/443, конфиги протестированы. - Системные
sysctlприменены, временные адреса отключены. - AAAA‑записи добавлены с умеренным TTL, PTR настроен по необходимости.
- Мониторинг проверяет доступность по IPv6, алерты настроены.
После включения держите панели под рукой: доля IPv6, ошибки подключения, рост латентности. Если всё стабильно — поднимайте TTL и считаете релиз состоявшимся. Для оптимизации отдачи статики пригодится разбор кэширующих заголовков: Cache-Control и ETag.
Резюме
Включение IPv6 в проде сводится к трём блокам: адресация и маршрут на сервере, безопасный файрволл с пропуском ключевых ICMPv6, корректная публикация AAAA и настройка веб‑сервера на [::]:80/443. Делайте это последовательно — получите более стабильную доставку трафика, меньше проблем с прокси и быстрее отклик в сетях, предпочитающих IPv6.


