Формат локального адреса 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.