Вопрос или проблема
Используя ifconfig, чтобы увидеть ipv4 и ipv6 адреса eth0. Ping по ipv4 работает нормально, но ping по ipv6 дает:
Это означает, что сайт не разрешается в ip6 адрес, например, github.com имеет то же самое:
$ ping -4 github.com
PING github.de (140.82.114.18) 56(84) байт данных.
64 байта от lb-140-82-114-18-iad.github.com (140.82.114.18): icmp_seq=1 ttl=39 время=205 мс
64 байта от lb-140-82-114-18-iad.github.com (140.82.114.18): icmp_seq=2 ttl=39 время=228 мс
^C
--- статистика ping для github.de ---
2 пакета отправлено, 2 получено, 0% потеря пакетов, время 1001мс
rtt min/avg/max/mdev = 205.156/216.759/228.363/11.603 мс
$ ping -6 github.com
ping: github.de: Поддержка семейства адресов для имени хоста не предусмотрена
Когда вы используете адрес link-local в IPv6 (любой адрес в fe80::/16 является link-local), вы также должны указать интерфейс. Например, когда я пингу свой сервер с рабочего компьютера так:
ping fe80::6d9:f5ff:fe1c:45c8
Это всегда будет ошибкой, но если я пингую так:
ping fe80::6d9:f5ff:fe1c:45c8%enp0s31f6
Это будет успешно.
Причина в том, что адреса link-local… ну… локальны для ссылки. Без указания ссылки это бессмысленно. Это как сказать 123 главная улица, не уточняя, речь идет о Нью-Йорке, Торонто или Альбукерке, или говорить, что что-то находится в Спрингфилде, не уточняя, речь о Массачусетсе, Иллинойсе или Нью-Йорке (по этой причине Симпсоны происходят в Спрингфилде).
Формат имени интерфейса будет зависеть от вашей ОС. Пример выше относится к Linux, что-то похожее должно работать и в MacOS. Вы сможете получить имя интерфейса, выполнив команду “ifconfig” или “ip a” в терминале.
В Windows вы указываете его просто номером, который можете увидеть, выполнив команду “netsh interface ipv6 show interface” в командной строке или PowerShell и посмотрев в столбец “IDX” в результате.
Если у вас есть другой IP-адрес, который не находится в диапазоне fe80::/16, вам не нужно делать всю эту чепуху. Ищите что-то в диапазоне 2000::/4 (это глобальные униicast адреса) или fd00::/8 (это адреса локальной сети, что-то вроде 192.168.0.0/16, 172.16.0.0/12 или 10.0.0.0/8 в IPv4). Это те адреса, которые вы обычно будете использовать для обращения к другим машинам.
Ответ или решение
При попытке отправить пинг на IPv6-адрес, вы получили сообщение об ошибке "Address family for hostname not supported". Это означает, что указанное имя хоста не может быть разрешено в IPv6-адрес. Давайте разберем возможные причины и решения этой проблемы.
Причины проблемы
-
Отсутствие IPv6-адреса: Не все веб-сайты и серверы поддерживают IPv6. Если вы пингуете адрес, который не имеет соответствующего IPv6-адреса, вы получите указанное сообщение об ошибке. Например, пинг до
github.com
с использованием IPv6 может не сработать, если данный сайт не имеет привязанного IPv6-адреса. -
Конфигурация сети: Убедитесь, что ваша сеть поддерживает IPv6. Если ваш маршрутизатор или провайдер интернета не поддерживает IPv6, вы не сможете отправить пинг на IPv6-адреса.
-
Семейство адресов: Сообщение об ошибке указывает на то, что запрашиваемый хост не поддерживает адресацию IPv6. Это может быть связано с тем, что хост не имеет IPv6-адресов, или с настройками DNS, которые не возвращают IPv6-адреса.
Решения
-
Проверка IP-адреса: Используйте команду
dig
илиnslookup
, чтобы проверить, есть ли у хоста IPv6-адрес. Например:dig AAAA github.com
Если команда вернет пустой результат, это означает, что у
github.com
нет IPv6-адреса. -
Использование Link-Local адресов: Если вы используете link-local адрес (адреса в диапазоне
fe80::/16
), вам необходимо указать интерфейс, с которого отправляется запрос. Например:ping fe80::6d9:f5ff:fe1c:45c8%enp0s31f6
Убедитесь, что вы правильно указали название интерфейса, которое можно найти с помощью команд
ifconfig
илиip a
на Linux. -
Использование глобальных адресов: Если вы хотите пинговать другой компьютер в сети, убедитесь, что используете глобальный или уникальный локальный адрес (например, в диапазонах
2000::/4
илиfd00::/8
). Эти адреса могут быть использованы для связи между узлами, находящимися в разных подсетях. -
Проверка конфигурации: Убедитесь, что ваша система правильно настроена для работы с IPv6. Для Linux это может включать в себя проверку файла
/etc/sysctl.conf
на наличие строкиnet.ipv6.conf.all.disable_ipv6 = 0
.
Если после выполнения всех этих шагов проблема не решена, возможно, стоит обратиться к вашему интернет-провайдеру за консультацией по поводу поддержки IPv6 на вашей стороне.