← Сеть: основы
12 мин · средне · Урок 11 из 13

IPv6 и SLAAC

Чем IPv6 отличается от IPv4 кроме длины адреса, что такое link-local и как хост настраивает адрес сам.

Не просто длиннее

Адрес IPv4 — 32 бита, около 4.3 млрд адресов, и они закончились: отсюда приватные сети и NAT. Адрес IPv6 — 128 бит, адресов хватает на то, чтобы выдать каждому устройству публичный.

Записывается IPv6 восемью группами hex-цифр, нули сокращаются:

2001:0db8:0000:0000:0000:0000:0000:0001
2001:db8::1              # то же самое, :: схлопывает нули один раз

Смена модели важнее длины: в IPv6 у хоста обычно глобальный адрес и NAT не нужен. Доступность решает не таблица трансляций, а файрвол. Кто привык «за NAT нас не видно», в IPv6 обязан явно настроить фильтрацию.

У каждого IPv6-интерфейса есть link-local адрес из префикса fe80::/10. Хост собирает его сам из идентификатора интерфейса, без роутера и DHCP. Работает он только в пределах своего сегмента сети.

$ ip -6 addr show eth0
    inet6 2001:db8:1:2:5054:ff:fe12:3456/64 scope global
    inet6 fe80::5054:ff:fe12:3456/64 scope link

Здесь идентификатор собран старым способом, по EUI-64: MAC растянут до 64 бит вставкой ff:fe в середину, отсюда узнаваемое 5054:ff:fe12:3456. По такому адресу MAC-адрес читается напрямую, поэтому от схемы ушли. Там, где сетью управляет NetworkManager, по умолчанию работает stable-privacy (RFC 7217): идентификатор считается хешем от префикса, имени интерфейса и секрета машины, маркера ff:fe в нём нет.

На link-local адресах держится вся служебная механика IPv6: обнаружение соседей и маршрутизаторов (NDP, замена ARP) ходит именно по ним.

SLAAC: адрес без DHCP-сервера

SLAAC (stateless address autoconfiguration) позволяет хосту настроить глобальный адрес самостоятельно. Маршрутизатор периодически рассылает Router Advertisement с префиксом сети. Хост берёт префикс, добавляет свой идентификатор интерфейса и получает готовый адрес. Сервера, который ведёт учёт выданного, нет: потому stateless.

Из RA хост забирает и шлюз по умолчанию: им становится сам маршрутизатор.

SLAAC и DHCPv6 не исключают друг друга. Флаги в RA говорят хосту, что делать: только SLAAC, только DHCPv6 или SLAAC для адреса плюс DHCPv6 для DNS-серверов. В одной сети механизмы спокойно работают вместе.

Результат работы SLAAC виден в обычном ip, отдельных утилит ставить не надо. Маршрут по умолчанию с пометкой источника:

$ ip -6 route show
2001:db8:1:2::/64 dev eth0 proto ra metric 100 expires 1795sec
default via fe80::1 dev eth0 proto ra metric 100 expires 1795sec

proto ra означает, что маршрут приехал из Router Advertisement, а не задан руками. Адрес с той же историей:

$ ip -6 addr show eth0
    inet6 2001:db8:1:2:5054:ff:fe12:3456/64 scope global dynamic mngtmpaddr
       valid_lft 2591932sec preferred_lft 604732sec

dynamic и конечное время жизни — признак автонастройки. Если глобального адреса нет, а link-local есть, значит RA до хоста не доходят.

Dual-stack

Переход на IPv6 идёт через одновременную работу обоих стеков: у хоста и IPv4-, и IPv6-адрес, приложение выбирает доступный. Отсюда практическое правило диагностики: проверяй оба стека, ping и ping -6, curl -4 и curl -6. Сервис может быть жив по одному протоколу и лежать по другому.

Что важно запомнить

IPv6 — 128 бит, hex-группы, :: схлопывает нули один раз.

Модель другая: глобальные адреса вместо NAT, доступ ограничивает файрвол.

fe80::/10 — link-local, есть на каждом интерфейсе, работает в пределах сегмента.

SLAAC: хост собирает адрес из префикса в Router Advertisement, без сервера. DHCPv6 не конкурент, они работают вместе.

При диагностике проверяй оба стека: curl -4 и curl -6.

В следующем уроке — DHCP: как хост получает адрес в IPv4-сети.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Как хост в IPv6 получает адрес без DHCP? Что такое link-local?

NET-106
02

IPv4 vs IPv6: ключевые отличия.

NET-082

Прошли материал до конца? Отметьте урок пройденным.