Any IPv6 address that starts with fe80:
is the equivalent of IPv4 169.254.*.*
address, i.e. it's a link-local address, reachable only in the network segment it's directly connected to, using the NIC that connects to that segment specifically. Unlike IPv4, however, it is perfectly normal for a NIC to have both the link-local IPv6 address and one or more global IPv6 addresses simultaneously.
Since a fe80:
IPv6 address is link-local, you must specify the network interface you want to use when pinging it.
Example:
$ 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
...
You can also append the interface at the end of the address by using the %
sign: ping6 fe80::beae:c5ff:febe:a742%eth0
.
This requirement is only for link-local IPv6 addresses: you can ping globally routable IPv6 addresses without specifying the interface.
$ 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
...