6.10. Понимание теории адресации IPV6

Описание.  Кандидат BSDA должен понимать основы адресации IPv6, включая: компоненты адреса IPv6; поддержку нескольких адресов (link, local, global) на интерфейсе; различные способы записи адреса: запись префикса (aaaa:bbbb::dddd/17) и адресный формат (48 бит на префикс, 16 бит на подсеть и 64 бита на хост). В дополнение кандидат должен понимать процесс автоконфигурирования когда маршрутизатор отсылает префиксы или опрашивается, и как хост добавляет 64 бита, которые получаются из MAC-адреса. Наконец, кандидат должен уметь решать проблемы связи по протоколу IPv6.

Практика. ifconfig(8), ping6(8), rtsol(8)

Комментарий

Вот уже более 10 лет нам пророчат пришествие протокола IPv6 в замен IPv4, а между тем его всё нет как нет. Между тем закрывать на него глаза и дальше становится просто опасно. Во многих операционных системах в той или иной степени поддержка IPv6 уже включена и BSD из их числа. Многие администраторы, к сожалению, закрывают глаза на то, что в их IPv4 сетях уже фактически поднята сеть IPv6, а они об этом даже не подозревают. Закрывают брандмауэром порты по протоколу IPv4, а трафик IPv6 просто не видят. Видимо правильным решением было бы отключение данного протокола на уровне ядра, в случае, если он не поднят в сети. В системе FreeBSD для этого можно закомментировать в ядре опцию

options   INET6     # IPv6 communications protocols
  

О проблемах безопасности связанных с появлением протокола IPv6 можно прочитать в статье Натальи Мельниковой [url://IPv6-security].

Что касается документации по IPv6, как ни странно, её довольно мало. В основном речь идёт о переводах RFC. Оригинальная документация на английском языке (список, конечно, неполный):

  • [RFC-2460] — собственно протокол IPv6.
  • [RFC-2462] — автоматическая настройка адреса IPv6.
  • [RFC-2463] — протокол ICMPv6.
  • [RFC-3513] — адресация в IPv6.

Что до переводов на русский язык, я могу порекомендовать читателю замечательную статью А.Ю. Семёнова [url://Семёнов-IPv6], которая на 98% представляет собой перевод упомянух RFC. А так же своеобразный HOWTO из FreeBSD-handbook [url://FB-handbook-IPv6-ru], который, в части касающейся документации IPv6 так же является цитатой из упомянутых RFC. Фактически никакой другой документации в настоящий момент в сети нет. (А может и не надо.)

6.10.1. Синтаксис IPv6

6.10.1.1. Правила записи адреса

Адреса в IPv6 настолько длинные, что их запись в привычной десятичной нотации становится весьма неудобной (128 бит = 16 байт). Поэтому их записывают в шестнадцатеричном формате. Но даже и в этом случае адреса оказываются слишком длинными, поэтому придуманы некоторые способы сокращённой записи.

Итак, адреса делят на 8 пар байт символом двоеточия: FEDC:BA98:7654:3210:FEDC:BA98:7654:3210. Лидирующие нули в паре байт можно не записывать, нулевые пары байт можно заменять на ::. Таким образом, следующие три строки обозначают один и тот же адрес: 1080:0000:0000:0000:0008:0800:200C:417A, 1080:0:0:0:8:800:200C:417A, 1080::8:800:200C:417A. Разумеется в адресе может встретиться только один знак :: иначе возникнет неоднозначность.

Допустимо записывать часть адреса в десятичном формате, разделяя десятичные знаки точками: ::FFFF:129.144.52.38. Такая форма удобна в случаях, когда адрес IPv4 является частью адреса IPv6 (см. ниже).

6.10.1.2. Запись префикса

Левая часть адреса IPv6 может являться префиксом сети. В этом случае её длина в битах записывается через дробь, подобно записи CIDR.

Варианты правильного написания префикса 12AB00000000CD3: 12AB:0000:0000:CD30:0000:0000:0000:0000/60, 12AB::CD30:0:0:0:0/60, 12AB:0:0:CD30::/60.

А вот так писать нельзя:

12AB:0:0:CD3/60
Можно опускать нули слева, но не справа.
12AB::CD30/60
Адрес слева от / раскроется в 12AB:0000:0000:0000:0000:000:0000:CD30
12AB::CD3/60
Адрес слева от / раскроется в 12AB:0000:0000:0000:0000:000:0000:0CD3

6.10.2. Типы IPv6 адресов

Адреса IPv6 бывают:

Unicast
предназначенные конкретному интерфейсу.
Anycast
предназначенные некоторому набору хостов. Пакет посланный на адрес anycast будет доставлен только одному хосту — ближайшему с точки зрения маршрутизатора.
Multicast
предназначенные некоторому набору хостов. Пакет посланный на адрес multicast будет доставлен всем хостам из этого набора.

Широковещательных (broadcast) адресов в IPv6 нет, их функции выполняют адреса multicast.

6.10.2.1. Unicast

Тип пакета IPv6 можно определить по префиксу. Вот некоторые префиксы адресов unicast:

FE80::/10 (первые биты 1111111010)

Канальный адрес (link-local unicast).

Предполагается, что у любого интерфейса всегда есть как минимум один IPv6 адрес полученный из его MAC-адреса, либо из EUI-64. EUI-64 это тот же MAC, только между первыми тремя байтами и последними тремя вставлено ещё два байта: FFFE. Так, для интерфейса с MAC-адресом 00:50:22:B0:7F:39 будет определён адрес IPv6 FE80::250:22FF:FEB0:7F39/64. Здесь первые 64 бита являются префиксом сети: FE80::/64, а последние 8 байт получены из аппаратного адреса, всё вместе представляет собой unicast адрес IPv6.

При этом, за кольцевым интерфейсом, у которого, конечно никакого аппаратного адреса не существует, закреплён адрес FE80::1/64

Канальные адреса иногда записывают в форме FE80::%rl0/64 и FE80::%lo0/64, что указывает на то, что последние байты должны быть сконструированы из аппаратного адреса соответствующего интерфейса.

[Замечание]Замечание
Теоретически, данные адреса приватны и не должны выходить за пределы организации. Это, однако, не означает, что MAC-адрес не может «утечь» наружу. Механизм автоконфигурирования включает сложение префикса сети и аппаратного адреса, о чём пишется в статье Натальи Мельниковой [url://IPv6-security]. В некотором смысле, такое свойство протокола нарушает права пользователей в части конфиденциальности.
FEC0::/10 (первые биты 1111111011)

Обычный локальный адрес (site-local unicast).

Этот адрес так же приватный, от канального адреса его отличает то, что он не обязан включать в себя MAC адрес интерфейса.

4000::/3 (первые биты 010)

Провайдерские unicast адреса. Последующие биты — ID регистрации (провайдера), ID провайдера, ID подписчика, Интра подписчика.

ID регистрации — регистратор, который задает провайдерскую часть адреса.

ID провайдера — собственно провайдер.

ID подписчика — часть адреса выдаваемая подписчику провайдером.

Интра подписчика — внутренние адреса, которые находятся в распоряжении подписчика.

8000::/3 (первые биты 100)
Зарезервировано под географические unicast адреса.
::0000:d.d.d.d и ::ff:d.d.d.d
Фактически это адреса IPv4. Первый придуман для того, чтобы в адресном пространтстве IPv6 представить адрес маршрутизатора IPv6 имеющего адрес IPv4 d.d.d.d. Пакет дошедший до этого интерфейса со стороны пространтсва IPv6 будет через туннель IPv4 направлен на следующий маршрутизатор IPv6. Второй адрес используется для предоставления пакета тем маршрутизаторам IPv4, которые не поддерживают IPv6.
::1
Адрес кольцевого интерфейса
::
Несуществующий адрес, вернее адрес означающий отсутствие адреса. Этим адресом подписывается машина до того как она получила настоящий адрес.

6.10.2.2. Anycast

Адрес anycast синтаксически не отличим от unicast. Адреса anycast выделяются из адресного пространства unicast и всё их отличие состоит в том, что один адрес anycast может быть присвоен нескольким маршрутизаторам. Пакет высланный на этот адрес получит ближайший маршрутизатор, где ближайший маршрутизатор определяется по метрике протокола маршрутизации.

Одно из возможных применений адреса anycast — идентификация набора маршрутизаторов провайдера. Префикс адреса anycast фактически указывает на топологическую группу которой принадлежит адрес.

Существует один предопределённый адрес anycast: 111111101[10] префикс_подсети 00..00. Этот адрес соответствует маршрутизатору подсети.

6.10.2.3. Multicast

FF00::/8 (первые биты 11111111)
Мультикаст — аналог широковещательного адреса. Широковещательных (broadcast) адресов в IPv6 нет, они заменены на мультикасты.

6.10.3. Назначение адреса IPv6

Один интерфейс может иметь множество различных адресов IPv6. (Подобно тому, как у интерфейса может быть много адресов IPv4.) Таким образом, интерфейс может одновременно иметь приватный и публичный IPv6 адреса.

Далее следует прямая цитата из [url://Семёнов-IPv6]:

ЭВМ должна распознавать следующие адреса, как обращенные к нему:

  • Её локальный адрес канала для каждого из интерфейсов
  • Выделенные уникаст-адреса
  • Адрес обратной связи
  • Мультикастинг-адрес для обращения ко всем узлам
  • Мультикастинг-адрес активного узла (solicited-node multicast address) для каждого из приписанных ей уникаст и эникастных адресов
  • Мультикаст-адреса всех групп, к которым принадлежит ЭВМ.

Маршрутизатор должен распознавать следующие адреса (as identifying itself):

  • Его локальный адрес канала для каждого из интерфейсов
  • Выделенные уникаст-адреса
  • Адрес обратной связи
  • Эникастные адреса маршрутизатора субсети для каналов, где он имеет интерфейсы.
  • Все другие эникастные адреса, которые использовались при маршрутизации.
  • Мультикастинг-адрес для обращения ко всем узлам
  • Мультикастинг-адрес для обращения ко всем маршрутизаторам
  • Мультикаст-адрес активного узла (solicited-node multicast address) для каждого приписанного ему уникаст и эникастного адресов.
  • Мультикастные адреса всех прочих групп, принадлежащих маршрутизатору.

Приложение должно предопределить только следующие адресные префиксы:

  • Не специфицированный адрес
  • Адрес обратной связи
  • Мультикаст-префикс (FF)
  • Локально используемые префиксы (link-local и site-local)
  • Предопределенные мультикаст-адреса
  • Префиксы, совместимые с IPv4

Приложения должны считать все остальные адреса уникастными, если противоположное не оговорено при конфигурации (например, эникастные адреса).

6.10.4. Автоконфигурирование в IPv6

Одна из целей создателей протокола IPv6 состояла в автоконфигурировании интерфейсов. Система поддерживающая IPv6 должна уметь получать адреса автоматически.

Процесс автоконфигурации включает получение локального канального адреса и проверки его уникальности, определение того, какая информация должна быть автосконфигурирована (адреса, другая информация или и то и другое) и, в случае, если надо автосконфигурировать адрес, через какой механизм он должен быть сконфигурирован: stateless или stateful.

Механизм автоконфигурирования stateless не требует ручного конфигурирования хостов, требует минимального конфигурирования маршрутизаторов и никаких дополнительных серверов. Данный механизм позволяет хосту сгенерировать собственный адрес из информации доступной локально и информации объявленной маршрутизатором. Маршрутизатор объявляет префикс идентифицирующий подсеть, а хост использует уникальный идентификатор интерфейса. Соединяя их вместе хост получает адрес IPv6. В отсутствии маршрутизатора хост может сформировать только локальный канальный адрес. Однако такой адрес даст ему возможность работать с ближайшими машинами находящимися в его подсети.

В случае использования механизма автоконфигурирования stateful, хост получает адрес интерфейса и/или другую информацию с сервера. На серверах должна находиться некая база данных, в которой записано какой адрес с каким хостом проассоциирован. Stateless и stateful механизмы дополняют друг друга. Автоконфигурирование по механизму stateful является частью будущей работы (DHCPv6).

Механизм stateless может использоваться когда точные адреса непринципиальны, stateful, наоборот, когда требуется выдача конкретных адресов. Оба механизма могут использоваться совместно. Администратор может определить какой метод будет использоваться при помощи «Router Advertisement messages» — специальных ICMPv6 сообщений.

Адрес IPv6 выдаётся на фиксированное (возможно бесконечное) время. Каждый адрес имеет ассоциированное с ним время жизни в течение которого он привязан к интерфейсу. Когда время жизни истекает, адрес теряет связь с интерфейсом и может быть присвоен другой точке в Интернете. Дабы не возникало казусов, в течение жизни адрес проходит через две стадии: «preferred» — адрес, которым пользоваться предпочтительно, и «deprecated» — адрес, который вскорости будет утрачен. Новые соединения должны, насколько это возможно, использовать адрес в состоянии «preferred». Адрес «deprecated» может использоваться только приложениями, которые уже использовали его и не могут запросто переключиться на новый адрес.

Чтобы убедиться, что все сконфигурированные адреса уникальны, до присвоения адреса используется специальный механизм Duplicate Address Detection.

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

6.10.5. Программы для конфигурирования IPv6 в BSD

Настройка интерфейсов через команду ifconfig(8) никаких принципиальных отличий от IPv4 не имеет. За информацией о работе этой программы можно обратиться к Раздел 6.1, «Определение существующих установок TCP/IP» и Раздел 6.2, «Установка параметров TCP/IP».

Утилита ping6(8) используется вместо ping(8) в протоколе IPv6. Аналагично для выяснения маршрута можно применять утилиту traceroute6(8).

Утилита rtsol(8) выполняет «Router Solicition» запросы, пытаясь обнаружить доступный IPv6 маршрутизатор, чтобы получить от него в пакете «Router Advertisement» префикс сети и сформировать адрес. Эта же утилита, под именем rtsold(8) может работать в режиме демона. Утилита не предназначена для работы на маршрутизаторах — только на хостах.


Обновлено: 12.03.2015