Link-local addresses are mostly used to bootstrap stateless autoconfiguration. The first 64 bits (fe80::) will be predictable and the last 64 bits will be unique to that interface. It allows there to be a sensible source address for neighbor and router solicitations to the appropriate multicast groups.
But that's neither here nor there... obviously, something isn't set up correctly.
First, omit the -I eth0 from the ping6 command. You shouldn't need it. That's what the routing table is for
Secondly, do you have any iptables or ip6tables filters blocking ICMP or ICMPv6 traffic? IPv6 makes significant use of ICMPv6, and it shouldn't be filtered.
If neither of those are it, what are the outputs of "ip -6 addr" and "ip -6 route" ?
_________________
Code:
/* TODO: need to add signature to posts */