ping6.net
Основы

Типы адресов IPv6: глобальные, link-local, multicast

Изучите различные типы адресов IPv6: глобальные unicast для интернета, link-local для локальных сетей, multicast для групп и другие.

ping6.net20 января 2024 г.8 min read
IPv6типы адресовunicastmulticastlink-localanycast

Адреса IPv6 работают иначе, чем IPv4, в том, как они доставляют пакеты. Понимание этих различий важно при отладке сетевых проблем или проектировании систем.

TL;DR - Краткое резюме

Ключевые моменты:

  • IPv6 использует unicast (один-к-одному), multicast (один-ко-многим) и anycast (один-к-ближайшему) — нет broadcast
  • Global unicast (2xxx/3xxx) для интернета, link-local (fe80::) для локальных сегментов, ULA (fd00::) для частных сетей
  • Multicast (ffxx::) заменяет broadcast; solicited-node multicast делает обнаружение соседей эффективным
  • Link-local адреса требуют zone ID, например fe80::1%eth0, чтобы указать интерфейс

Перейти к: Global Unicast | Multicast | Краткий справочник

Три метода доставки#

IPv6 использует три фундаментальные модели доставки:

  • Unicast: Один отправитель одному получателю. Стандартный способ коммуникации с конкретным хостом.
  • Multicast: Один отправитель нескольким получателям. Эффективно для групповой коммуникации.
  • Anycast: Один отправитель ближайшему получателю в группе. Используется для балансировки нагрузки и резервирования.

Нет broadcast в IPv6

IPv6 полностью исключает broadcast. Там, где IPv4 отправлял бы broadcast всем хостам (например, ARP-запросы, заполняющие вашу сеть), IPv6 использует целенаправленный multicast. Это уменьшает ненужный трафик и повышает эффективность сети.

Unicast-адреса#

Каждый unicast-адрес идентифицирует ровно один сетевой интерфейс. Отправьте пакет на этот адрес, и ровно один хост получит его.

Глобальные unicast-адреса (2000::/3)#

Это ваши публичные IPv6-адреса, маршрутизируемые во всём интернете. Если адрес начинается с 2 или 3, это глобальный unicast-адрес.

2001:0db8:85a3:0000:0000:8a2e:0370:7334
│         │         │              │
│         │         │              └─ Interface ID (64 бита)
│         │         └──────────────── Subnet ID (16 бит)
│         └────────────────────────── Site Prefix (48 бит)
└──────────────────────────────────── Global Routing Prefix

Типичная структура разделяет выделение /48 следующим образом:

БитыКомпонентНазначение
0-47Global Routing PrefixВаше выделение от провайдера или RIR
48-63Subnet ID65 536 подсетей на сайт
64-127Interface IDГенерируется из MAC-адреса или рандомизируется

Реальные провайдеры обычно назначают /48 сайтам, /56 малому бизнесу или /64 пользователям. Каждая подсеть /64 содержит 18 квинтиллионов адресов, поэтому разбиение на подсети делается по границам /64.

Адреса для документации

Префикс 2001:db8::/32 существует только для документации и примеров. Не используйте эти адреса в production. Каждый пример в RFC использует 2001:db8 по причине — они не будут конфликтовать с реальными сетями.

Каждый интерфейс IPv6 автоматически генерирует link-local адрес при включении IPv6. Эти адреса работают только в локальном сегменте сети и никогда не маршрутизируются.

fe80::1
fe80::a1b2:c3d4:e5f6:7890

Link-local адреса обязательны для функционирования IPv6. Neighbor Discovery, Router Solicitation и другие базовые протоколы требуют их. У вашего интерфейса может не быть глобального адреса, но у него всегда будет link-local адрес.

Zone ID: указание интерфейса#

Поскольку fe80::1 может существовать на каждом интерфейсе, нужно указать, какой именно интерфейс вы имеете в виду:

ping6 fe80::1%eth0      # Linux
ping6 fe80::1%en0       # macOS
ping fe80::1%12         # Windows (используйте индекс интерфейса)

Символ % предшествует zone ID. В Linux и macOS используйте имя интерфейса. В Windows используйте индекс интерфейса из netsh interface ipv6 show interface.

Unique Local адреса (fc00::/7)#

Думайте о них как об IPv6-версии частных адресов RFC 1918. Они не маршрутизируются глобально, что делает их подходящими для внутренних сетей.

На практике вы увидите адреса fd00::/8, потому что диапазон fc00::/8 требует централизованного распределения, которое так и не было реализовано. Генерируйте 40-битный глобальный идентификатор случайно:

fd 3a:c7b1:29f4 :0001:0000:0000:0000:0001
│  └──────────┘  │    └──────────────────┘
│       │        │             │
│       │        │             └─ Interface ID (64 бита)
│       │        └─────────────── Subnet ID (16 бит)
│       └──────────────────────── Случайный Global ID (40 бит)
└──────────────────────────────── Префикс ULA (fd = локально назначенный)

Когда вы генерируете этот 40-битный идентификатор случайно, вы минимизируете риск коллизий при возможном слиянии сетей. Не используйте просто fd00::1 везде.


Специальные адреса#

Два адреса имеют уникальные назначения:

Loopback (::1): Отправка пакетов самому себе. IPv6-эквивалент 127.0.0.1. Трафик на ::1 никогда не покидает хост.

Unspecified (::): Представляет отсутствие адреса. Хосты используют :: как адрес источника во время DHCPv6 или когда они ещё не настроили адрес. Вы не можете отправлять пакеты на ::.


Multicast-адреса (ff00::/8)#

Каждый адрес, начинающийся с ff, является multicast. Пакет идёт на каждый интерфейс, который присоединился к этой multicast-группе.

Структура адреса#

ff 0 2 : 0000:0000:0000:0000:0001
│  │ │   └──────────────────────┘
│  │ │              │
│  │ │              └─ Group ID (112 бит)
│  │ └──────────────── Scope (4 бита)
│  └─────────────────── Flags (4 бита)
└────────────────────── Префикс multicast

Поле scope определяет, как далеко распространяется multicast-пакет:

ScopeЗначениеДиапазон
Interface-local1Только этот интерфейс
Link-local2Локальный сегмент сети
Admin-local4Административная граница
Site-local5Сайт организации
Organization-local8Несколько сайтов в организации
GlobaleВесь интернет

Важные multicast-группы#

Несколько multicast-адресов выполняют критически важные функции:

АдресНазначение
ff02::1Все узлы на канале (заменяет broadcast IPv4)
ff02::2Все маршрутизаторы на канале
ff02::5Все OSPF-маршрутизаторы
ff02::6Все назначенные OSPF-маршрутизаторы
ff02::9Все RIP-маршрутизаторы
ff02::1:2Все DHCPv6-серверы/релеи
ff02::fbmDNSv6 (multicast DNS)

Solicited-Node Multicast#

Этот механизм делает обнаружение соседей эффективным. Вместо того чтобы спрашивать каждый хост «у кого этот IP?» (как ARP), IPv6 спрашивает небольшую multicast-группу.

Каждый unicast-адрес автоматически генерирует соответствующий solicited-node multicast-адрес:

Unicast:        2001:db8:1234:5678::abcd:ef12:3456
                                      └────┬─────┘

                                     (последние 24 бита)

Solicited-Node: ff02::1:ff12:3456 ────────┘

Когда хосту нужно разрешить 2001:db8:1234:5678::abcd:ef12:3456, он отправляет Neighbor Solicitation на ff02::1:ff12:3456. Только хосты с адресами, заканчивающимися на 12:3456, обрабатывают запрос. Это значительно снижает нагрузку от multicast по сравнению с broadcast на каждый хост.


Anycast-адреса#

Anycast-адреса выглядят идентично unicast-адресам — нет специального префикса. Разница в конфигурации: вы назначаете один и тот же адрес нескольким интерфейсам, и маршрутизация доставляет пакеты топологически ближайшему.

Распространённые случаи использования#

Корневые DNS-серверы: Все 13 букв корневых серверов (a.root-servers.net до m.root-servers.net) используют anycast. Те же IP-адреса существуют в сотнях мест по всему миру. Ваш запрос достигает ближайшего корневого сервера.

CDN-серверы: Сети доставки контента используют anycast для маршрутизации пользователей к ближайшим кэш-серверам. Один адрес, разные географические локации.

6to4 Relay-маршрутизаторы: Адрес 192.88.99.1 (IPv4) и 2002:c058:6301:: (IPv6) являются anycast-адресами для 6to4-релеев.

Subnet-Router Anycast#

Каждая подсеть автоматически имеет зарезервированный anycast-адрес с идентификатором интерфейса, установленным в ноль:

Подсеть:        2001:db8:1234:5678::/64
Subnet-Router:  2001:db8:1234:5678::

Маршрутизаторы в этой подсети должны отвечать на этот адрес. На практике он редко используется.


Краткий справочник: определение типов адресов#

Посмотрите на первые несколько символов, чтобы определить любой IPv6-адрес:

Начинается сТипОбласть
::1LoopbackЛокальный хост
::UnspecifiedН/Д
fe80:Link-local unicastLink-local
fc00: или fd00:Unique local unicastЧастный
ff00: до ffff:MulticastРазличается (смотрите 2-ю цифру)
2... или 3...Global unicastИнтернет

Всё остальное либо зарезервировано, либо ещё не назначено.

Проверка ваших адресов#

Посмотрите, какие адреса настроены в вашей системе:

Linux:

ip -6 addr show

macOS:

ifconfig | grep inet6

Windows:

netsh interface ipv6 show addresses

Обычно вы увидите:

  • Несколько link-local адресов (fe80::), по одному на интерфейс
  • Один или несколько глобальных unicast-адресов, если у вас есть IPv6-подключение
  • Адрес обратной петли ::1 на loopback-интерфейсе
  • Несколько членств в multicast-группах (обычно не отображаются по умолчанию)

Тестирование multicast#

Отправьте ICMPv6 echo-запрос всем узлам на вашем локальном канале:

# Замените eth0 на имя вашего интерфейса
ping6 ff02::1%eth0

Вы получите ответы от каждого устройства с поддержкой IPv6 в этом сегменте сети. Это полезно для обнаружения, но может быть шумно в больших сетях.

Проверьте наличие маршрутизаторов:

ping6 ff02::2%eth0

Должны отвечать только маршрутизаторы.

Проверка типов адресов

Используйте валидатор IPv6 для проверки любого адреса. Введите адрес и мгновенно увидите его тип, область действия и корректность. Полезно при отладке конфигураций.


Практические последствия#

Разные типы адресов влияют на то, как вы проектируете сети и устраняете проблемы:

Политики безопасности: Фильтруйте глобальный unicast на файрволе, но link-local должен проходить для neighbor discovery. Блокировка fe80::/10 полностью ломает IPv6.

Привязка приложений: Серверы, привязанные к ::, слушают на всех адресах (как 0.0.0.0 в IPv4). Привязка к ::1 ограничивает только localhost.

Таблицы маршрутизации: Link-local адреса появляются как next-hop в таблицах маршрутизации, что сбивает людей, привыкших к IPv4. Это нормально — маршрутизаторы используют link-local адреса для стабильности, так как они никогда не меняются.

DNS: Публикуйте только глобальные unicast-адреса в DNS. Никогда не публикуйте link-local или unique local адреса в публичных DNS-зонах.

Понимание этих типов адресов — не академическое упражнение, а необходимость для настройки файрволов, отладки подключений и проектирования сетей, которые действительно работают.

Связанные статьи#

Проверка типов адресов

Используйте валидатор IPv6 для проверки любого адреса. Введите адрес и мгновенно увидите его тип, область действия и корректность. Полезно при отладке конфигураций.