IPv6
| Введение | |
| Структура | |
| Unicast Address | |
| Multicast Address | |
| Anycast Address | |
| SLAAC | |
| Похожие статьи |
Введение
Эта страница про IPv6. Про IPv4 читайте здесь
| Термин | Перевод | Кол-во бит | Кол-во байт | Пример (0b) | Пример (0x) |
|---|---|---|---|---|---|
| Bit | Бит | 1 | - | 0 или 1 | - |
| Nibble | Ниббл | 4 | - | 1010 | 0xA |
| Byte | Байт | 8 | 1 | 11001001 | 0xС9 |
| Hextet | Хекстет | 16 | 2 | 10101010 01010101 | 0xAF09 |
IPv4 Адрес имеет длину 32 бита = 4 байта.
192.168.10.10
11000000 10101000 00001010 00001010
IPv6 Адрес в четыре раза больше 128 бит = 32 ниббла = 16 байт = 8 хекстетов
2001:0DB8:0002:0002:008D:0000:0000:00A5:52F5 0010000000000001:0000110110111000:0000000000000010:0000000000000010:0000000010001101:0000000000000000:0000000000000000:0000000010100101:0101001011110101
Так как половину адреса занимает сетевой адрес, можно сделать вывод, что в обычной сети может бы 2 ** 64 адресов, то есть 18446744073709551616
Изображение: rudalle.ru
Структура
Сетевой адрес (Network Portion) имеет размер 64 бита
2001:0DB8:0002:008D
Адрес хоста (Host Portion или Interfacte Identifier) также имеет размер 64 бита
0000:0000:00A5:52F5
Полный адрес выглядит следующим образом
2001:0DB8:0002:008D:0000:0000:00A5:52F5
Удаление ведущих нулей
Если полный адрес выглядит слеюдущим образом
2001:0DB8:0002:008D:0000:0000:00A5:52F5
Его можно сократить удалив нули, которые не несут смысловую нагрузку
2001:DB8:2:8D:0:0:A5:52F5
Если в адресе хоста первые хекстеты это нули, их можно заменить на :
2001:DB8:2:8D::A5:52F5
:: разделят адрес на сетевую часть слева и адрес хоста справа.
В адресе может быть только одно ::
Unicast Address
Unicast адреса идентифицируют только один сетевой интерфейс. Протокол IPv6 доставляет пакеты, отправленные на такой адрес, на конкретный интерфейс.
Существуют следующие типы Unicast адресов:
Global Unicast
Публичный адрес который доступен через глобальный интернет
Link-Local
fe80::/10
Адрес только для локальных сетей. Не доступен через глобальный интернет.
Аналог
APIPA адресов
в
IPv4
Разберем подробнее, что означает
fe80::/10
FE80 это
1111 1110 1000 0000
/10 означает, что первые 10 бит должны оставаться неизменными
Первые 10 бит это
1111 1110 10
Оставшиеся 118 бит это адрес интерфейса.
Первый IPv6 адрес типа Link-Local это
1111 1110 1000 0000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
FE80::
Последний IPv6 адрес типа Link-Local это
1111 1110 1011 1111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111
FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
Таким образом диапазон Link-Local адресов начинается с FE80:: и заканчивается на FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
Не все Link-Local адреса начинаются с FE80. Возможны варианты FE8*, FE9*, FEA*, FEB*. Где * это любой Hex от 0 до F
Unique Local Address (ULA)
Адрес только для локальных сетей. Не доступен через глобальный интернет.
Аналог
частных адресов
в
IPv4
но не поддерживает NAT.
FC00::/7
FC00 это
1111 1100 0000 0000
/7 означает, что первые 7 бит должны оставаться неизменными
Первые 7 бит это
1111 110
Оставшиеся 121 бит это адрес интерфейса.
Первый IPv6 адрес типа ULA это
1111 1100 0000 0000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
FC00::
Последний IPv6 адрес типа ULA это
1111 1101 1111 1111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111
FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
Loopback
Адрес для трафик на самого себя. Не доступен через глобальный интернет.
Аналог
looback адреса 127.0.0.1
в
IPv4
::1/128
Multicast Address
Многоадресный адрес идентифицирует группу интерфейсов.
Пакеты, отправленные на многоадресный адрес, доставляются всем членам группы.
Anycast Address
Anycast-адрес назначается нескольким интерфейсам, обычно на разных устройствах.
Трафик, отправленный на Anycast-адрес, доставляется на ближайший интерфейс (с точки зрения маршрутизации).
SLAAC
Stateless Address Auto-configuration.
При запуске системы узел автоматически создает локальный адрес на каждом интерфейсе с поддержкой IPv6, даже если глобально маршрутизируемые адреса настроены вручную
или получены с помощью протоколов конфигурации.
Он делает это независимо и без какой-либо предварительной конфигурации с помощью автоконфигурации адресов без сохранения состояния (SLAAC),
используя компонент протокола обнаружения соседей. Этот адрес выбирается с префиксом fe80::/64.
В
IPv4
типичными протоколами конфигурации являются DHCP или PPP. Хотя существует DHCPv6, хосты IPv6 обычно используют протокол обнаружения соседей
для создания глобально маршрутизируемого одноадресного адреса: хост отправляет запросы на запрос маршрутизатора, а маршрутизатор IPv6 отвечает назначением префикса.
В Windows
Interface Identifier создается как случайное 64-х битное число
В Linux и Unix
Interface Identifier ранее создавался на основе MAC адреса
SLAAC в Linux
SLAAC в Linux работает путем прослушивания объявлений маршрутизатора IPv6 (RA), изучения префикса /64 сети и автоматической генерации собственного IPv6-адреса — обычно с использованием случайного идентификатора интерфейса (randomized interface identifier).
Linux использует для этого протокол обнаружения соседей IPv6 (NDP - Neighbor Discovery Protocol), и эта функция включена по умолчанию во всех современных дистрибутивах.
Как работает SLAAC в Linux - пошаговый разбор
1. Linux активирует интерфейс
Когда сетевой интерфейс становится активным, ядро автоматически включает автоконфигурацию IPv6, если она не специально не была отключена.
Типичные названия сетевых интерфесов в Linux: eth0, eth1, enp0s3, enp0s8, wlan0
Инициализация интерфейса запускает создание локального адреса IPv6
FE80::/10
Обнаружение дубликатов адресов (DAD - Duplicate Address Detection) проверяет уникальность локального адреса.
2. Linux ожидает уведомлений маршрутизатора (RA)
RA - Router Advertisements
Маршрутизаторы периодически отправляют уведомления маршрутизатора ICMPv6, содержащие:
Префикс сети (обычно /64)
Флаги, указывающие на доступность SLAAC (флаг A)
Информация DNS (RDNSS), если предоставлена
Время жизни маршрутизатора и MTU
Linux также активно запрашивает эту информацию, отправляя запрос маршрутизатора (Router Solicitation), когда интерфейс становится активным.
3. Linux формирует свой IPv6-адрес
После получения уведомления маршрутизатора (RA) Linux генерирует идентификатор интерфейса (IID) и добавляет его к префиксу.
Linux может генерировать IID несколькими способами:
-
Постоянные адреса конфиденциальности (по умолчанию в современных дистрибутивах)
Это псевдослучайное 64-х битное число на основе сетевого префикса, имени интерфейса, секретного ключа (хранящегося в ядре), счётчика для каждого интерфейса RFC 7217
- Временные адреса конфиденциальности для исходящих соединений
- Адреса EUI-64 (более старый метод с использованием MAC-адреса)
4. Linux выполняет обнаружение дубликатов адресов (DAD)
Перед использованием нового глобального IPv6-адреса Linux отправляет запрос соседа (Neighbor Solicitation), чтобы убедиться, что ни одно другое устройство его не использует.
Если конфликта не обнаружено, адрес становится предпочтительным и готовым к использованию.
5. Linux настраивает маршруты по умолчанию и DNS
Если данные, полученные от роутера (RA), включают в себя
- Срок службы маршрутизатора → Тогда Linux устанавливает маршрут IPv6 по умолчанию.
- Параметры RDNSS → Тогда Linux настраивает DNS-серверы без DHCPv6.
Это завершает SLAAC.
EUI-64
Чтобы из MAC адреса вида
aa:bb:cc:dd:ee:ff
Создать новый IPv6 адрес хоста после 3-го байта добавляется ещё два байта FF:FE
aa:bb:cc:FF:FE:dd:ee:ff
В первом байте инвертируется 7-й бит
aa (1010 1010) превращается в
a8 (1010 1000)
a8:bb:cc:FF:FE:dd:ee:ff
Полезные команды Linux для SLAAC Назначение команды ip -6 addr Показать IPv6-адреса ip -6 route Показать маршруты IPv6 rdisc6 eth0 Просмотреть объявления маршрутизатора sysctl net.ipv6.conf.all.autoconf Проверить статус SLAAC journalctl -u NetworkManager Просмотреть сетевые журналы
Флаги конфигурации SLAAC в Linux net.ipv6.conf...autoconf* → Включает SLAAC net.ipv6.conf...accept_ra* → Принимать объявления маршрутизатора net.ipv6.conf...use_tempaddr* → Включить адреса конфиденциальности
DHCP
Подсети
В IPv4 мы могли выбирать CIDR маску разного размера. В IPv6 в LAN рекомендуется использовать только /64
В особых случаев используются и другие длины префиксов:
| /48, /56, /60 | делегируются клиентам интернет-провайдерами (для дальнейшего разделения на подсети). |
| /127 | каналы связи точка-точка между маршрутизаторами (предотвращает атаки исчерпания ND). |
| /128 | один адрес хоста (петля обратной связи, идентификатор маршрутизатора). |
| /96 | IPv4-отображенные IPv6-адреса. |
| /112 | иногда используется для подсетей с высокой плотностью устройств (например, IoT), хотя не рекомендуется для обычных локальных сетей. |
Адреса вида
2001:DB8::/32
Используются для документации и в лабораториях
Автор статьи: Андрей Олегович
| Сети | |
| Примеры масок | |
| Пример протокола | |
| Порты | |
| SSH | |
| DNS | |
| PuTTY | |
| Telnet | |
| PSTools | |
| Firefox | |
| FreeSSHD | |
| IPv4 | |
| IPv4 практика | |
| Как создать туннель | |
| Как сделать проброс портов |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги