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

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

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

Но когда я пытаюсь пинговать эту машину от другого с 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.

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

3 ответа

%10 после того, как адрес называется областью действия. Когда вы используете локальные 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, поэтому он может отличаться, если вы попытаетесь пропинговать из другой системы.

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

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

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

Попробуйте указать правильный идентификатор зоны. То есть, когда вы делаете 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) и получать глобальные одноадресные адреса. Тогда это не будет проблемой.

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

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

Другие вопросы по тегам