Формат локального адреса канала IPv6

Я работаю над проектом, связанным с сетью/сжатием. Одной из машин является Windows Vista, у которой уже настроен IPv6.

Когда я пытаюсь ipconfig, я вижу адрес в следующем формате: fe80::9dc8:72fa:aacd:76e2%10

Но когда я пытаюсь выполнить ping этот аппарат из другого с помощью ping fe80::9dc8:72fa:aacd:76e2%10, я получаю следующую ошибку:

Ping request could not find host fe80::9dc8:72fa:e327:76e2%10.
Please check the name and try again.

Любые идеи/комментарии очень полезны.

Ответ 1

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

В Windows, если вы выдаете команду netsh interface ipv6 show addresses, вы увидите адреса, назначенные системе, с их идентификаторами зоны. Обратите внимание, что идентификаторы зон соответствуют индексу интерфейса. Например:

Interface 22: VirtualBox Host-Only Network

Addr Type  DAD State   Valid Life Pref. Life Address
---------  ----------- ---------- ---------- ------------------------
Other      Preferred     infinite   infinite fe80::15c3:6bea:aaac:a015%22

Этот адрес ограничен %22, потому что он находится на интерфейсе с индексом 22. Аналогично, в Linux вы можете увидеть локальный адрес ссылки, например fe80::15c3:6bea:aaac:a016%eth0. Формат идентификатора зоны уникален для каждого отдельного компьютера, на котором запущен IPv6, поэтому он может быть другим, если вы пытаетесь выполнить ping из другой системы.

Например, если у вас есть:

System A (Windows): fe80::15c3:6bea:aaac:a015%22
System B (Linux):   fe80::15c3:6bea:aaac:a016%eth0

... и вы хотите, чтобы ping ящик Linux из окна Windows, вы не можете сделать ping fe80::15c3:6bea:aaac:a016%eth0. Но вы можете сделать ping fe80::15c3:6bea:aaac:a016%22. Это проблема. Таким образом, локальные адреса Link-Link могут быть сложными.

Попробуйте указать правильный идентификатор зоны. То есть, когда вы выполняете свой ping fe80::9dc8:72fa:aacd:76e2%10, сначала сделайте netsh interface ipv6 show addresses на машине, с которой вы пингоруете, и измените %10 на индекс интерфейса для любого интерфейса, который вы хотите использовать в исходной системе.

Если машина, с которой вы пингоруете, - это Linux, вам нужно будет сделать ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2 (предполагая, что другая система находится на eth0), потому что утилита командной строки Linux не поддерживает способ % для указания зона (последний раз, когда я проверил).

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

Ответ 2

вы не можете пинговать ipv6-адреса с помощью классической утилиты ping, только ipv4-адресов. linux имеет инструмент командной строки под названием ping6 для ping ipv6-адресов, у окон, вероятно, есть нечто похожее. небольшое исследование сообщило мне, что для использования ping-адресов ipv6 в Windows используется ping -6.

Ответ 3

Число после% - имя интерфейса. если вы откроете status- > detail вашего сетевого интерфейса, вы увидите локальный адрес ссылки ipv6 с адресом% xx в конце адреса, который является индексом интерфейса, в случае, если вы хотите найти индекс для некоторых приложений. Системная информация или ipconfig могут просто дать вам разные номера индексов, по крайней мере, на моем Windows 7 Pro, что очень запутывает. Описание, которое вы получаете от ОС, также может быть ошибочным.