I’m testing IPv6 on a corporate network and having problems with OS X. With most IPv6 commands, such as telnet -6
or traceroute6
, I get the error:
connect: No route to host
For example, I have a web server. This fails:
$ telnet -6 fe80::… 80 # this fails
I know the server is reachable because ping6
works (note that I have to use the -I
argument):
$ ping6 -I en1 fe80::… # this works
And I know the web server is running because I can telnet to it from Windows:
C:\> telnet fe80::… 80 # this works
I suspect there is some configuration flag or command-line argument that I am missing.
The fe80::/16 prefix is for link-local addresses, and they're special. Try running
on OS X and
on Windows. On OS X you will most likely see a separate fe80:: route for each interface, e.g. for lo0 and en1. Windows (XP, at least) doesn't appear to do that. Since OS X has multiple routes to the same prefix you have to use a zone index to point the traffic in the right direction:
An interface can and usually will have multiple IPv6 addresses. A link-local address is automatically created from the fe80::/16 range and is not routed (point to point connection). As Gerald Combs mentions, you'll need to specify a zone index if you can't specify which interface to use.
For regular use, and connections beyond the local link, you'll need to add routable addresses to the interface. This can be done by getting your own IPv6 range from your ISP (or from a tunnel provider such as SixXS or he.net), and distributing them to your devices via Router Advertisement, DHCPv6 or manually.
If you're just testing you could also use the special "Unique Unicast" IP range of fc00::/7 which should be used for this as per RFC4193:
Check out this site, which gets you started by generating a range for you.
I believe you've found a bug in the link local fe80:: addresses. It works for me using my public address, even though they are link local.
Try getting real v6 addresses.