如何获得机器的可ping通的IPv6地址?


14

当我尝试: $ ip -6 addr 我得到类似:

inet6 fe80::d773:9cf0:b0fd:572d/64 scope link

如果我尝试从计算机本身ping通:

$ ping6 fe80::d773:9cf0:b0fd:572d/64
unknown host

$ ping6 fe80::d773:9cf0:b0fd:572d
connect: Invalid argument

我究竟做错了什么?

Answers:


24

任何以IPv6开头的IPv6地址fe80:都等同于IPv4 169.254.*.*地址,即它是一个链接本地地址,只能使用直接连接到该网段的NIC在它直接连接到的网段中才能访问。但是,与IPv4不同,NIC完全同时具有链接本地IPv6地址一个或多个全局IPv6地址是完全正常的。

由于fe80:IPv6地址是本地链接,因此您必须在ping它时指定要使用的网络接口。

例:

$ ping6 fe80::beae:c5ff:febe:a742
connect: Invalid argument

$ ping6 -I eth0 fe80::beae:c5ff:febe:a742
PING fe80::beae:c5ff:febe:a742(fe80::beae:c5ff:febe:a742) from fe80::beae:c5ff:febe:a742%eth0 eth0: 56 data bytes
64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=1 ttl=64 time=0.182 ms
64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=2 ttl=64 time=0.167 ms
...

您还可以使用%符号将该接口附加在地址的末尾ping6 fe80::beae:c5ff:febe:a742%eth0

此要求仅适用于本地链接的IPv6地址:您可以在不指定接口的情况下ping全局可路由的IPv6地址。

$ ping6 2a00:1450:400f:80a::200e  # that's ipv6.google.com
PING 2a00:1450:400f:80a::200e(2a00:1450:400f:80a::200e) 56 data bytes
64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=1 ttl=55 time=17.6 ms
64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=2 ttl=55 time=19.6 ms
...

它还scope link在输出中说:)
hobbs

4
就像答案的附录一样:您也可以在地址末尾指定接口:ping6 fe80::beae:c5ff:febe:a742%eth0
Ferrybig

@Ferrybig:感谢您提醒我,更新了我的答案。
telcoM

1
请注意,如果要ping远程ipv6地址,您的家庭路由器还必须支持ipv6。较旧的路由器并不总是具有软件/固件更新来支持通过ipv6的连接。您很可能会收到以下消息:ping6: UDP connect: No route to host
Daniel Gelling

4

man ping6,您必须告诉ping您正在使用哪个接口:

-I接口地址

将源地址设置为指定的接口地址。参数可以是数字IP地址或设备名称。当ping IPv6链接本地地址时,此选项是必需的。

例如,如果您的界面是eth0

ping6 -I eth0 fe80::xxxxxx

或者,没有-I选择:

ping6 fe80:xxxxxx%eth0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.