Зачем вам IPv6 Neighbor Solicitation для получения MAC-адреса?

12

Я разработчик программного обеспечения и только что получил бесплатную книгу о IPv6 на Techdays, которую я читаю для удовольствия. Они отдали его, потому что это немного старая книга (W2008), так что, может быть, все обстоит иначе для других / более новых ОС, но я не понимаю, почему Neighbor Discovery должен получить MAC-адрес.

Согласно книге, каждый узел автоматически получает локальный IP-адрес канала, который создается из MAC-адреса путем вставки FF-FEмежду 3-м и 4-м байтами и переключения бита U / L, так что локальный IP-адрес канала для узел с MAC-адресом 00-AA-00-3F-2A-1Cстановится FE80::2AA:FF:FE:3F:2A1C.

Чтобы определить MAC-адрес канального уровня, на локальный IP-адрес отправляется сообщение с запросом соседа, которое отвечает сообщением, содержащим его MAC-адрес ... Но отправитель уже знает это, поскольку MAC закодирован в канальном канале. локальный IP-адрес. Так что это похоже на отправку открытки кому-то с просьбой указать его адрес.

Эдвин
источник

Ответы:

20

Каждый узел автоматически генерирует локальный адрес ссылки, но:

  • Этот адрес может не генерироваться в формате EUI-64, указанном в RFC 2464 . Адреса IPv6 также могут быть криптографически сгенерированными адресами ( RFC 3972 ), временными адресами конфиденциальности ( RFC 4941 ) или в современных операционных системах стабильными адресами конфиденциальности ( RFC 7217 ).

  • Адрес, который выглядит так, как будто он имеет идентификатор интерфейса EUI-64, может фактически не соответствовать указанному MAC-адресу из-за явной конфигурации администратором.

Поскольку вы не можете просто «преобразовать адрес обратно» в MAC-адрес, вы должны отправить запрос соседа, чтобы определить MAC-адрес.

Есть и другие причины, по которым Соседства с соседями также необходимы. Вот некоторые из них:

  • Обнаружение дублированного адреса ( RFC 4862 ). Вполне возможно, что какой-то другой хост (правильно или неправильно) запросил адрес, который хост хочет использовать.
  • Обнаружение недостижимости соседей. Отсутствие ответа на ходатайство соседа является одним из признаков того, что сосед недоступен.

Книги все хороши и хороши, но очень устаревшие книги могут быть не такими полезными. Даже IPv6 претерпел значительные изменения за последние десять лет. Лучший источник правды - это соответствующие RFC, как оригинальные, так и любые, помеченные как обновленные или устаревшие. RFC указаны достаточно подробно, чтобы можно было писать соответствующие реализации. Вы можете узнать все подробности обнаружения соседей, прочитав RFC 4861 .

Майкл Хэмптон
источник
Спасибо за исправления; если не используется формат EUI-64, действительно, в противном случае необходимо обнаружить MAC. Но на самом деле, я не понимаю проблем конфиденциальности с форматом EUI-64 для локальных адресов, поскольку локальный адрес привязан к ссылке, и для этой ссылки MAC-адрес должен быть (и может быть ) известен в любом случае (по заявлению соседей) для связи по Ethernet, так что для злых намерений MAC-адрес может быть сохранен вдоль адреса стабильной конфиденциальности на локальной линии, не так ли?
Эдвин
@ Edwin, SLAAC изначально использовался для всех IPv6-адресов, а не только для локальных адресов, поэтому можно было отслеживать хост. SLAAC - это только один метод для назначения локальных адресов. Они также могут быть назначены вручную, и это не даст вам MAC-адрес в адресе локальной связи. Я знаю некоторых людей, которые хотят вручную назначать все адреса, включая Link Local. Кажется, что много работы для мало или совсем нет выгоды, но это делает их счастливыми, и все IID всех адресов на интерфейсе одинаковы, в том порядке, который они предпочитают.
Рон Мопин
@Edwin И каждый хост действительно будет поддерживать кэш назначения (см. RFC 4861), который аналогичен таблице ARP IPv4, которую поддерживают хосты.
Майкл Хэмптон
CGA мог бы быть проще и безопаснее, если бы адреса были в два раза больше. Половина спецификации - это обходные пути для использования только 64-битного идентификатора интерфейса, где в идеале они хотели бы около 162-битного. Это следует помнить всякий раз, когда приходит мысль, что 128 бит слишком много.
kasperd
Что вы считаете нестандартным в этом документе Microsoft? Мне кажется, это просто суммирует RFC, с которыми вы связаны.
kasperd
9

Итак, вы либо неправильно поняли, либо были дезинформированы о нескольких вещах.

Используя SLAAC, хост может создать свою собственную IPv6-адресацию, используя свой MAC-адрес, но многие думали, что это опасно, отдавая слишком много информации и позволяя отслеживать конкретный хост. Исходя из этого, были разработаны расширения конфиденциальности и произвольная адресация, и они используются операционными системами для обеспечения конфиденциальности / безопасности. Это означает, что хост может создавать свою собственную адресацию, не основываясь на своем MAC-адресе.

Когда хост должен обнаружить MAC-адрес соседа в IPv4, он использует ARP. ARP транслирует запрос, но IPv6 не имеет трансляции. Вместо этого каждый хост должен присоединиться к многоадресной группе запрашиваемого узла. Эта группа основана на последних 24 битах своего адреса IPv6. Поскольку интерфейсы IPv6 могут иметь любое количество адресов IPv6, хост может присоединиться к нескольким группам многоадресной рассылки запрашиваемого узла. Узел IPv6, ищущий MAC-адрес другого узла, отправит многоадресный запрос в группу многоадресной рассылки запрашиваемого узла целевого адреса IPv6.

Это обеспечивает преимущество перед ARP IPv4. Поскольку ARP использует широковещательную рассылку для запросов, она прерывает каждый хост в широковещательном домене уровня 2. Поскольку многоадресная группа запрашиваемого узла использует последние 24 бита целевого IPv6-адреса, запрос многоадресной рассылки ND, вероятно, прервет только целевой хост или, возможно, один или два других хоста в широковещательном домене уровня 2.

Рон Мопин
источник