I have a typical "a can ping b but b cannot ping a" problem. I use IPv6 for the ping. What is special in my case is that "b" can ping "a" immediately after "b" pings "a". After some trials, I realised that everything works fine if I specify the network interface that should be used with "-I eth0" (yes, two interfaces on the Linux machine are in the same subnet). I would still like to understand what changes once machine "b" pings back and would appreciate some expert knowledge. Ping with IPv4 works fine in both directions. If I stop the ping from "b", "a" can still ping "b", until I stop it with Ctrl-C. Trying again fails even if I try immediately, so I believe it is not an upcache issue. Some info:

Machine "a"

OS: Windows (added "ICMPv6" in exceptions for firewall)

IPv6 address: fe80::21c:1cff:fe00:3de3

Machine "b":

OS: Linux Busybox

IPv6 address: fe80::21c:1cff:fe00:3de4

Tried both "ping" and "ping6" binary

  • Can you try pinging the address with the zone/interface index appended? The format is address%zone, e.g. fe80::21c:1cff:fe00:3de4%eth0 on Linux; the correct number can be found in a table from route print on Windows – user1686 Nov 29 '18 at 11:16

With link-local IPv6 addresses you always need to specify the interface. The reason is that the same address block (prefix) is used on every network: The address fe80::21c:1cff:fe00:3de3 is only unique on a specific link (interface). On a different link the same address might be used for a completely different device.

Because of this link-local addresses are usually not very useful for manual use, as you need to specify the interface every time. On the other computer the interface name might be different so you can't just send somebody a link with an address, since you don't know what the interface name for that link is on their side.

To avoid specifying the interface, you would need "real" IPv6 addresses with a global scope that you can route.

You might for example use https://cd34.com/rfc4193/, where you enter a MAC address and it will do the calculations and return a block of IPv6 addresses to use.

In your case, after one computer pinged the other, its IPv6 address and its interface were known to the target computer, so it could ping back.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.