L3 IPv6 — адресация, NDP, SLAAC
IPv6 — не «когда-нибудь потом». Больше половины трафика крупнейших сервисов уже идёт по нему, мобильные операторы выдают v6 по умолчанию, а в собеседованиях CCNA-уровня это обязательный блок. При этом большинство инженеров знает IPv6 «по касательной» — и именно здесь легко выделиться. Разберём с нуля и до рабочего уровня: адреса, автонастройку, NDP вместо ARP, маршрутизацию, диагностику и типовые грабли.
- Зачем IPv6 и почему NAT не спас IPv4 навсегда
- Формат адреса: 128 бит, hex-группы и два правила сокращения (с тренировкой руками)
- Типы адресов: GUA, ULA, link-local, multicast — и почему в IPv6 нет broadcast
- Главное озарение: link-local адреса — на каждом интерфейсе, и на них живёт вся служебка
- Почему подсеть — всегда /64, и как хост сам собирает себе адрес (SLAAC)
- NDP — «ARP нового мира»: RS/RA, NS/NA и что видно в дампе
- Dual-stack и переходные механизмы: что реально используется
- Маршрутизация IPv6: статика, OSPFv3, BGP — конфиги
- Диагностика: show ipv6, ping/traceroute v6, Linux/Windows — и два плейбука
Модуль 2: ARP и broadcast-домены — сегодня увидишь, чем их заменили. Модуль 4: маска/префикс, сетевая и хостовая части — в IPv6 логика та же, но границы фиксированные. Модуль 5–7: таблица маршрутизации, OSPF и BGP — для IPv6 они те же самые, только адреса длиннее. Если это на месте — IPv6 займёт у тебя один вечер, а не неделю: концепции не поменялись, поменялась запись.
1. Зачем IPv6 — и почему NAT лишь обезболил
IPv4-адресов 232 ≈ 4,3 млрд. Устройств в интернете — десятки миллиардов. Дефицит закрыли
костылями: приватные диапазоны, NAT, CG-NAT у операторов (диапазон 100.64.0.0/10 —
возможно, ты сам сейчас за ним сидишь). Работает? Работает. Но цена высока:
- Ломается сквозная связность. Два абонента за CG-NAT не могут соединиться напрямую — отсюда relay-серверы для звонков, игр, p2p (вспомни, как Plex на домашнем NAS работает «через relay»).
- Состояние на операторе. CG-NAT-железка держит таблицы трансляций на миллионы сессий — это дорого и это единая точка отказа.
- Один публичный IP на сотни абонентов — баны и репутационные списки бьют по всем сразу.
IPv6 решает проблему в лоб: адрес 128 бит, то есть 2128 ≈ 3,4×1038 адресов. Это не «в 2 раза больше» — это каждому устройству планеты можно раздать по личной вселенной адресов. NAT становится не нужен: каждый холодильник получает глобальный адрес, а безопасность обеспечивает firewall (что правильнее и честнее, чем «безопасность через спрятанность за NAT»).
IPv6 — это не «IPv4 с длинными адресами». Убрали broadcast, заменили ARP на NDP, автонастройку встроили в сам протокол, фрагментацию перенесли на хосты. Но модель мышления — та же: префикс/хост, таблица маршрутов, longest prefix match. Учишь дельту, а не новый мир.
2. Формат адреса: читаем без паники
128 бит записываются как 8 групп по 16 бит в шестнадцатеричном виде, через двоеточия:
Полная запись 2001:0db8:00a3:0000:0000:0000:02bb:0001 глазам больно. Поэтому есть
два правила сокращения:
0db8 → db8, 00a3 → a3,
0001 → 1, а вот просто 0000 → 0 (один ноль
остаётся). Получаем: 2001:db8:a3:0:0:0:2bb:1.0:0:0 сворачиваются в ::.
Итог: 2001:db8:a3::2bb:1. Красиво и однозначно: считаем группы —
их 5, значит :: прячет ровно 8−5=3 нулевые группы.
«::» можно использовать только один раз в адресе. Запись
2001::5:0:0:1 и 2001:0:0:5::1 — легальны, а 2001::5::1 —
нет: невозможно понять, сколько нулей прячется в каждом из двух «::».
Это любимый вопрос-ловушка в тестах CCNA.
Префиксы пишутся как в CIDR: 2001:db8:a3::/48 — первые 48 бит это сеть. Никаких
«масок» вида 255.х в IPv6 нет вообще — только слэш-нотация. И ещё одна деталь: в URL адрес v6
берут в квадратные скобки, потому что двоеточие занято портом:
http://[2001:db8::1]:8080/.
3. Типы адресов: три, которые нужны каждый день
| Тип | Префикс | Аналог в IPv4 | Смысл |
|---|---|---|---|
| Global Unicast (GUA) | 2000::/3(всё, что начинается с 2 или 3) |
публичный (белый) адрес | Маршрутизируется по всему интернету. Выдаёт провайдер/RIR. Пример: 2001:db8:a3::2bb:1 |
| Unique Local (ULA) | fc00::/7(на практике fd…) |
приватный (192.168.х, 10.х) | Внутренние сети, в интернет не маршрутизируется. Генерируется со случайным «глобальным ID», чтобы при слиянии компаний сети не пересеклись (учтён главный грех RFC1918!) |
| Link-Local | fe80::/10 |
169.254.х.х… но лишь отчасти! | Живёт только внутри одного L2-сегмента, за роутер не выходит. Есть на каждом v6-интерфейсе всегда — см. ниже, это ключ ко всему IPv6 |
| Multicast | ff00::/8 |
multicast 224.х + заменяет broadcast | Группы «кому надо — те слушают»: ff02::1 — все узлы линка, ff02::2 — все роутеры линка, ff02::5 — OSPF-роутеры |
| Loopback | ::1/128 | 127.0.0.1 | «Сам себе». Один адрес вместо целой сети /8 |
Главное озарение модуля: link-local — рабочая лошадка IPv6
В IPv4 адрес 169.254.х.х — признак поломки («DHCP не ответил»). В IPv6 всё наоборот:
link-local адрес есть на каждом интерфейсе, всегда, и это норма. Интерфейс поднялся —
хост сам собрал себе fe80::… ещё до всяких DHCP и роутеров. И на этих адресах держится
вся внутренняя механика:
- Next-hop в таблицах маршрутизации IPv6 — почти всегда link-local соседа
(
via fe80::1), а не его глобальный адрес. Логично: сосед по линку доступен по link-local всегда, какие бы глобальные префиксы ни менялись. - OSPFv3 и другие IGP устанавливают соседства по link-local.
- Шлюз по умолчанию, который хост получает из RA (ниже), — тоже link-local роутера.
Link-local адреса одинаковы во всех сегментах (fe80::/10 везде), поэтому системе нужно
указывать, через какой интерфейс ты обращаешься: ping fe80::1%eth0
(Linux), ping fe80::1%12 (Windows, номер интерфейса), ping fe80::1%Vlan10
(Cisco). Забыл zone-id — получишь ошибку «invalid argument» и полчаса недоумения.
ff02::1), «все роутеры» (ff02::2),
solicited-node группы для NDP. Устройство слушает только свои группы — сеть тише, CPU свободнее.
4. Почему подсеть — всегда /64 (и как это упрощает жизнь)
В IPv4 мы мучительно считали: «сколько хостов влезет в /26?» В IPv6 договорились жёстко: LAN-сегмент = /64. Первые 64 бита — сеть, вторые 64 — интерфейсный идентификатор (interface ID). Всё. Субнеттинг переезжает на уровень «сколько /64 нарезать из выданного блока»:
Типовая раздача: провайдер получает /32, клиент-организация — /48
(это 65 536 подсетей /64!), домашнему абоненту дают /56 (256 подсетей). Считать
хостов больше не нужно никогда: 264 адресов в каждом сегменте хватит на всё.
Исключение из правила одно: линки точка-точка между роутерами принято делать
/127 (аналог /31 из IPv4) — чтобы отсечь класс атак на огромные пустые подсети.
IPv4 — коммуналка, IPv6 — город с бесконечными кварталами
В IPv4 мы делили тесную коммуналку: «этим — 62 койки, тем — 30, и не дай бог пересечься». В IPv6 каждому сегменту выдают целый квартал (/64), а организации — район из 65 тысяч кварталов (/48). Планирование адресов превращается из экономии байтов в наведение порядка: номер квартала — это номер VLAN, и адрес читается как адресная табличка.
5. NDP — «ARP нового мира» (и не только ARP)
ARP в IPv6 нет. Его работу (и ещё несколько задач) выполняет NDP — Neighbor Discovery Protocol, работающий поверх ICMPv6. Четыре типа сообщений, которые нужно знать наизусть:
| Сообщение | ICMPv6 тип | Кто шлёт | Зачем | Аналог |
|---|---|---|---|---|
| RS — Router Solicitation | 133 | хост при включении | «Роутеры, отзовитесь!» | DHCP Discover (по духу) |
| RA — Router Advertisement | 134 | роутер (периодически и в ответ на RS) | «Я роутер. Вот префикс сети, вот флаги, я могу быть шлюзом» | — (нет аналога! сердце SLAAC) |
| NS — Neighbor Solicitation | 135 | кто ищет соседа | «У кого адрес X? Дай MAC» + проверка дубликатов (DAD) | ARP request |
| NA — Neighbor Advertisement | 136 | владелец адреса | «X — это я, MAC такой-то» | ARP reply |
Тонкое отличие от ARP: NS уходит не broadcast'ом, а в solicited-node multicast — специальную группу, вычисляемую из последних 24 бит искомого адреса. Услышит её только устройство с этим адресом (и его коллизионные «соседи» по хешу), а не весь сегмент. Таблица соседей смотрится так:
6. SLAAC: хост настраивает себя сам — разбор по шагам
Самая красивая часть IPv6: автонастройка встроена в протокол. DHCP-сервер не обязателен. Вот что происходит, когда ноутбук подключается к v6-сети:
fe80::/64 + interface ID
(из MAC по алгоритму EUI-64 или случайный). Проверяет его на дубликат: шлёт NS на свой же адрес
(DAD — duplicate address detection). Тишина = адрес свободен, забираю.ff02::2 («все роутеры»). Роутер отвечает RA:
«префикс сегмента — 2001:db8:a3:10::/64, флаг A=1 (можешь собрать адрес сам),
я — твой шлюз (мой link-local), MTU такое-то».2001:db8:a3:10:xxxx:xxxx:xxxx:xxxx. Снова DAD. Современные ОС генерируют
privacy-адреса — случайные, сменяемые раз в сутки, чтобы по interface ID
нельзя было следить за устройством между сетями.А что же DHCPv6? Он существует, и режим задают флаги в RA — это стандартный вопрос экзамена:
| Флаги RA | Режим | Кто выдаёт адрес | Кто выдаёт DNS и опции |
|---|---|---|---|
| A=1, M=0, O=0 | чистый SLAAC | хост сам (из префикса RA) | RA (RDNSS) |
| A=1, M=0, O=1 | SLAAC + stateless DHCPv6 | хост сам | DHCPv6 (только опции, адреса не ведёт) |
| A=0, M=1 | stateful DHCPv6 | DHCPv6-сервер (ведёт учёт — нужен корпорациям для контроля) | DHCPv6 |
Android не поддерживает DHCPv6 вовсе — только SLAAC. Спланируешь корпоративную сеть в режиме «A=0, M=1» — все Android-устройства останутся без v6. Реальный кейс, о который больно ударялись многие. Решение: SLAAC + stateless DHCPv6 либо смирение.
7. Dual-stack и переходные механизмы
Мир будет жить с двумя протоколами ещё долго. Стандартная стратегия — dual-stack: у интерфейса одновременно и IPv4-, и IPv6-адрес, приложение пробует оба. Какой предпочтёт? Алгоритм Happy Eyeballs: браузер начинает соединение по v6 и почти одновременно (с задержкой ~250 мс) по v4 — кто быстрее установился, тот и победил. Поэтому «сломанный IPv6» проявляется не как «не работает», а как «всё как-то подтормаживает» — браузер каждый раз ждёт таймаут v6, прежде чем откатиться на v4. Запомни этот симптом.
| Механизм | Что делает | Где встретишь |
|---|---|---|
| Dual-stack | оба протокола параллельно | стандарт: серверы, офисы, облака |
| NAT64 + DNS64 | v6-only клиенты ходят в v4-мир: DNS64 подделывает AAAA из A (64:ff9b::/96 + v4-адрес), NAT64 транслирует | мобильные операторы (твой смартфон, скорее всего, так и живёт!) |
| Туннели (6in4, 6rd) | v6-пакеты внутри v4 | legacy, Hurricane Electric для лабораторий |
| 464XLAT | надстройка над NAT64 для приложений, зашитых на v4 | Android/iOS в v6-only сетях |
8. Маршрутизация IPv6: всё то же самое, только длиннее
Таблица маршрутов, longest prefix match, статика, IGP, BGP — всё работает идентично IPv4. Смотри, насколько знакомо выглядят конфиги:
ipv6 unicast-routing— ловушка №4: без этой команды Cisco-роутер не маршрутизирует v6 вообще (и не шлёт RA!), хотя адреса на интерфейсах висят и пингуются. «Адрес есть, соседний сегмент не достижим, RA нет» — первым делом проверь её.- OSPFv3 поднимает соседства с link-local адресов и включается на интерфейсе — идеологически чище, чем network-команды OSPFv2.
- Router-ID в OSPFv3/BGP остался 32-битным «в формате IPv4» — исторический курьёз, знай и не удивляйся.
9. Безопасность: две вещи, которые надо знать сразу
- Rogue RA — атака №1 в IPv6-сегменте. Любой может послать RA «я ваш роутер», и весь сегмент пошлёт трафик через него (MITM) — это ARP-spoofing на стероидах, причём случается и ненамеренно (принесённый из дома роутер с включённым v6). Защита на свитчах — RA Guard: RA пропускаются только с доверенных портов.
- IPv6 включён по умолчанию почти везде. Даже если «мы v6 не используем», он работает — а значит, файрвол, мониторинг и ACL должны покрывать v6 с первого дня. Слепая зона «мы же только v4» — классическая дыра, через которую ходят пентестеры.
10. Диагностика: команды на каждый день
11. Мини-лаба: IPv6 уже есть на твоём компьютере
ipconfig (Windows) / ip -6 addr (Linux). Link-local
fe80::… будет точно — он есть всегда. Есть ли глобальный (2xxx:…)?
Если да — твой провайдер уже выдаёт v6.test-ipv6.com — сайт покажет, ходишь ли ты по v6 и нет ли
«сломанного» v6 (того самого, что делает интернет медленным). Затем
ping -6 ya.ru — работает?ip -6 neigh / netsh interface ipv6 show neighbors —
вот замена ARP-таблицы. Найди запись с пометкой router — это твой v6-шлюз, и он link-local.ping ff02::1%eth0 (подставь свой интерфейс) — ответят
соседи по линку. Ты только что использовал multicast «все узлы» вместо broadcast. Красиво же?nslookup -type=AAAA google.com и сравни с каким-нибудь
сайтом-динозавром без v6. Двойной стек виден прямо в DNS.12. Плейбук: «с IPv6 что-то не так»
test-ipv6.com или curl -6 -m 5 https://ya.ru (таймаут = v6 сломан).
Быстрый обход — выключить v6 на интерфейсе; правильное лечение — найти, где он сломан (обычно
RA приходят, а реальной v6-связности у роутера нет).rdisc6 eth0 или tcpdump
icmp6 and ip6[40]==134. RA нет → на роутере забыт ipv6 unicast-routing
(ловушка №4!) или RA подавлены (ipv6 nd ra suppress). RA есть, адреса нет →
смотри флаги A/M/O и вспоминай про Android/DHCPv6.ip -6 neigh /
show ipv6 neighbors. Состояние FAILED/INCMP = сосед не отвечает на NS: не тот VLAN,
выключен, firewall режет ICMPv6 (см. следующий шаг).dig AAAA имя). Старая истина «it's always DNS» в dual-stack становится вдвое вернее.13. Частые ошибки джунов
| Ошибка | Последствие | Как правильно |
|---|---|---|
Забыт ipv6 unicast-routing | адреса висят, RA нет, транзит не идёт — «мистика» | первая команда при включении v6 на Cisco |
| Два «::» в адресе | адрес невалиден | «::» — строго один раз |
| Пинг link-local без zone-id | invalid argument / не туда | fe80::1%eth0 — всегда с интерфейсом |
| Заблокировали весь ICMPv6 | умерли NDP и PMTUD — сеть «загадочно» лежит | разрешить типы 1–4, 133–136 |
| Планирование «по-старому»: /120-подсети, экономия адресов | ломается SLAAC (ему нужен /64), боль без выгоды | LAN = /64, точка-точка = /127, не экономить |
| «Мы v6 не используем» → нет ACL/мониторинга на v6 | слепая зона для атак (rogue RA, туннели) | v6-политики с первого дня, RA Guard на доступе |
14. Словарик модуля
| Термин | По-английски | Смысл в одну строку |
|---|---|---|
| GUA | global unicast address | глобальный адрес 2000::/3 — «белый» IPv6 |
| ULA | unique local address | fd… — внутренний адрес, аналог приватных v4 |
| Link-local | link-local, fe80::/10 | адрес «внутри одного провода», есть на каждом интерфейсе |
| NDP | Neighbor Discovery Protocol | замена ARP + обнаружение роутеров + автонастройка (поверх ICMPv6) |
| RS / RA | Router Solicitation / Advertisement | «роутеры, отзовитесь» / «я роутер, вот префикс и шлюз» |
| NS / NA | Neighbor Solicitation / Advertisement | аналог ARP request/reply |
| SLAAC | stateless address autoconfiguration | хост сам собирает адрес из префикса RA — без DHCP |
| DAD | duplicate address detection | проверка «адрес свободен?» перед использованием |
| Dual-stack | dual stack | v4 и v6 одновременно на одном интерфейсе |
| Happy Eyeballs | happy eyeballs | гонка v6 против v4 при соединении — маскирует сломанный v6 |
| NAT64/DNS64 | — | мост из v6-only мира в v4-ресурсы (мобильные сети) |
| RA Guard | RA guard | защита сегмента от поддельных Router Advertisement |
ipv6 unicast-routing, порезанный ICMPv6, двойное «::» и
иллюзия «мы v6 не используем».
15. Задачи — реши сам
Задача 1. Сократи по правилам: 2001:0db8:0000:0000:00fe:0000:0000:0001
Убираем ведущие нули: 2001:db8:0:0:fe:0:0:1. «::» ставим на самую длинную
цепочку нулей — здесь две цепочки по две группы, при равенстве сворачивают левую:
2001:db8::fe:0:0:1. Второй «::» поставить нельзя!
Задача 2. Классифицируй адреса: fe80::1, 2001:db8::5, fd12:3456::10, ff02::2, ::1
fe80::1 — link-local (только внутри линка); 2001:db8::5 — global
unicast (документационный диапазон); fd12:3456::10 — ULA, внутренний;
ff02::2 — multicast «все роутеры линка»; ::1 — loopback.
Задача 3. В ip -6 route хоста: default via fe80::1 dev eth0. Джун паникует: «шлюз — какой-то локальный адрес, это сломано!» Что ответишь?
Это норма и стандарт IPv6: шлюз приходит из RA и это link-local роутера. Link-local всегда достижим на линке независимо от глобальных префиксов — надёжнее, чем GUA. Ничего чинить не нужно.
Задача 4. Организации выдали 2001:db8:a300::/48. Сколько стандартных LAN-сегментов (/64) она может нарезать? Какой адрес будет у VLAN 16 (hex 0x10)?
С /48 до /64 — 16 бит на номера подсетей: 65 536 сегментов. VLAN 16 → подсеть
номер 0x0010: 2001:db8:a300:10::/64. Красота v6-планирования:
номер VLAN читается прямо в адресе.
Задача 5. После включения v6 на роутере хосты сегмента адреса не получают. show ipv6 interface brief показывает адрес на порту, пинг с роутера на хост по link-local работает. Самая вероятная причина?
Забыт ipv6 unicast-routing: без него IOS не выполняет роль
маршрутизатора и не рассылает RA — хостам неоткуда взять префикс для SLAAC. Адреса и
пинги на линке при этом работают, что и сбивает с толку.
Задача 6. Безопасник требует «запретить весь ICMP по обеим версиям IP, как в v4 привыкли». Чем это грозит в v6 и какой компромисс предложишь?
В v6 это убьёт сеть: на ICMPv6 работают NDP (разрешение адресов! типы 135/136), RA/RS (133/134) и Path MTU Discovery (тип 2 — в v6 маршрутизаторы не фрагментируют, без PMTUD большие пакеты молча умирают). Компромисс: разрешить типы 1–4 и 133–136 (в пределах линка), rate-limit на echo, RA Guard на портах доступа.
Ты заметил, что шлюз в IPv6 — это один роутер из RA? А что будет, если он умрёт в 3 часа ночи? В IPv4 таже проблема: default gateway — единая точка отказа всего сегмента. Как два роутера делят один виртуальный адрес шлюза и подхватывают друг друга за секунды — следующий модуль: HSRP и VRRP, протоколы резервирования шлюза.