Зачем IPv6
[[ipv4-addressing|IPv4]] - 4 миллиарда адресов, кончились. NAT помог, но мешает p2p-связи и сложен в админстве. IPv6 даёт 2^128 ≈ 3.4×10^38 адресов - хватит надолго.
Но IPv6 - не переименование IPv4. Это новый протокол: новые заголовки, новые алгоритмы автоконфигурации, ARP заменён на NDP.
Запись адреса
128 бит = 8 групп по 16 бит, в hex, через двоеточие:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Сокращения:
- Ведущие нули в группе можно убрать:
0db8→db8 - Одну подряд группу нулей можно заменить на
::(только один раз):2001:db8:85a3::8a2e:370:7334 ::1= loopback (аналог 127.0.0.1)::= unspecified (аналог 0.0.0.0)
В URL: http://[2001:db8::1]:8080/ - квадратные скобки чтобы порт не
путали с группами адреса.
Префикс и подсети
Запись CIDR-стиля: 2001:db8::/32 - первые 32 бита = префикс. Типичные
размеры подсетей:
- /128 - один хост (host route)
- /64 - стандартная LAN-подсеть, 2^64 хостов (намеренно избыточно для SLAAC)
- /56 - типичный домашний prefix от провайдера (256 LAN-подсетей)
- /48 - корпоративный
- /32 - что регистрирует RIR на регион
Правило: LAN всегда /64. Меньше - сломает SLAAC.
Типы адресов
| Префикс | Назначение |
|---|---|
2000::/3 | global unicast (рутируемый интернет) |
fe80::/10 | link-local, только в пределах сегмента, не маршрутизируется |
fc00::/7 | unique local (аналог 10/8 в IPv4) |
ff00::/8 | multicast (аналог [[broadcast-domain |
::1/128 | loopback |
::/128 | unspecified |
Каждый IPv6-интерфейс имеет минимум link-local (fe80::*) -
автоматически назначается из MAC-адреса при старте. По нему работает
NDP, RA - то есть link-local нужен всегда, даже без global.
SLAAC - автоконфигурация
IPv6 имеет встроенный механизм автонастройки:
- Хост шлёт Router Solicitation (RS) на ff02::2 (всем роутерам)
- Роутер отвечает Router Advertisement (RA) на ff02::1 с префиксом
- Хост берёт префикс + сам формирует hostid (из MAC через EUI-64, или random через privacy extensions)
- Получает global IP без DHCP
Опционально RA может сказать «возьми DNS у меня», или «иди в DHCPv6 за дополнительной информацией».
NDP - замена ARP
В IPv4 [[arp|ARP]] резолвит MAC по IP. В IPv6 - Neighbor Discovery Protocol через ICMPv6:
- Neighbor Solicitation (NS) - «у кого этот IP?»
- Neighbor Advertisement (NA) - «у меня; вот MAC»
- Router Advertisement (RA) - «я дефолт-шлюз, prefix такой»
- Redirect - «лучше ходи через другой шлюз»
Использует multicast вместо broadcast (меньше шума).
IPv6 на Linux
# Все IPv6 на интерфейсах
ip -6 addr
# Маршруты IPv6
ip -6 route
# Соседи (как arp)
ip -6 neigh
# Включить/выключить IPv6 на интерфейсе
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
Privacy extensions (RFC 4941)
По дефолту host-часть из MAC-адреса (EUI-64) - это раскрывает identity (можно отследить ноут по разным сетям). Privacy extensions генерируют случайный hostid и регулярно его меняют.
sysctl net.ipv6.conf.all.use_tempaddr # 0=off, 2=on by default
DNS
IPv6 использует AAAA-record (vs A для IPv4). Один и тот же домен обычно имеет оба:
$ dig example.com A # 1.2.3.4
$ dig example.com AAAA # 2001:db8::1
Resolver выбирает на основе RFC 6724 (preference policy).
Когда что-то пошло не так
ip -6 addrпуст или толькоfe80::- не пришёл RA; либо роутер не объявляет префикс, либоaccept_ra=0на интерфейсеNetwork is unreachableдля IPv6 - default route не настроен или global адрес не получен- Сайт открывается только с IPv4 - DNS не отдал AAAA, или сайт не имеет IPv6
- Slow connect - happy-eyeballs (RFC 8305) пробует и v6, и v4 параллельно с задержкой 250ms; если не настроен v6, увидишь задержку при первом подключении
No buffer space available- переполнен neighbor cache;gc_threshтюнить