Типы адресов IPv6: глобальные, link-local, multicast
Изучите различные типы адресов IPv6: глобальные unicast для интернета, link-local для локальных сетей, multicast для групп и другие.
Адреса 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-47 | Global Routing Prefix | Ваше выделение от провайдера или RIR |
| 48-63 | Subnet ID | 65 536 подсетей на сайт |
| 64-127 | Interface ID | Генерируется из MAC-адреса или рандомизируется |
Реальные провайдеры обычно назначают /48 сайтам, /56 малому бизнесу или /64 пользователям. Каждая подсеть /64 содержит 18 квинтиллионов адресов, поэтому разбиение на подсети делается по границам /64.
Адреса для документации
Префикс 2001:db8::/32 существует только для документации и примеров. Не используйте эти адреса в production. Каждый пример в RFC использует 2001:db8 по причине — они не будут конфликтовать с реальными сетями.
Link-local адреса (fe80::/10)#
Каждый интерфейс IPv6 автоматически генерирует link-local адрес при включении IPv6. Эти адреса работают только в локальном сегменте сети и никогда не маршрутизируются.
fe80::1
fe80::a1b2:c3d4:e5f6:7890Link-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-local | 1 | Только этот интерфейс |
| Link-local | 2 | Локальный сегмент сети |
| Admin-local | 4 | Административная граница |
| Site-local | 5 | Сайт организации |
| Organization-local | 8 | Несколько сайтов в организации |
| Global | e | Весь интернет |
Важные multicast-группы#
Несколько multicast-адресов выполняют критически важные функции:
| Адрес | Назначение |
|---|---|
ff02::1 | Все узлы на канале (заменяет broadcast IPv4) |
ff02::2 | Все маршрутизаторы на канале |
ff02::5 | Все OSPF-маршрутизаторы |
ff02::6 | Все назначенные OSPF-маршрутизаторы |
ff02::9 | Все RIP-маршрутизаторы |
ff02::1:2 | Все DHCPv6-серверы/релеи |
ff02::fb | mDNSv6 (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-адрес:
| Начинается с | Тип | Область |
|---|---|---|
::1 | Loopback | Локальный хост |
:: | Unspecified | Н/Д |
fe80: | Link-local unicast | Link-local |
fc00: или fd00: | Unique local unicast | Частный |
ff00: до ffff: | Multicast | Различается (смотрите 2-ю цифру) |
2... или 3... | Global unicast | Интернет |
Всё остальное либо зарезервировано, либо ещё не назначено.
Проверка ваших адресов#
Посмотрите, какие адреса настроены в вашей системе:
Linux:
ip -6 addr showmacOS:
ifconfig | grep inet6Windows:
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 — Начните с основ, если вы новичок в IPv6 и форматах адресов
- Руководство по разбиению IPv6 на подсети — Научитесь организовывать и разбивать ваше адресное пространство IPv6
- Безопасность IPv6 — Узнайте, как защитить различные типы IPv6-адресов в вашей сети
Проверка типов адресов
Используйте валидатор IPv6 для проверки любого адреса. Введите адрес и мгновенно увидите его тип, область действия и корректность. Полезно при отладке конфигураций.