Getting IPv6 working with SmartOS and KVM

Just about 2 weeks ago I started to play around with SmartOS.

SmartOS is a fairly recent hypervisor for virtualization, open-sourced by Joyent, the great guys behind node.js in August 2011. It's based on Illumos, which itself is a fork of Solaris.

The wiki is a great place to get started as well as the man page for vmadm. Of course I found more articles and saved them in my pinboard account.

But one thing I did not really get to work was IPv6. After a while I found the wiki page for IPv6 in a zone which worked, atleast for SmartOS zones.

But I had no luck with my KVM-based Ubuntu machine. I did it the same way, using basic tools (ifconfig/ip, /etc/network/interfaces), but I could not even ping the machine itself from within the page.

So I asked in the IRC channel (#smartos on freenode, great and friendly guys ;))

While IPv6-support is still not included in SmartOS tools itself some patches for this exist. This is only for zones and not for KVM instances, but I was told to check dmesg and other logs (d'oh! Why didn't I do this before?)

And this is what I found:

eth0: IPv6 duplicate address detected!

A quick search turned up a forum post which linked to this blog post.

The fix:

sudo sysctl net.ipv6.conf.eth0.accept_dad=0

Put net.ipv6.conf.eth0.accept_dad=0 into /etc/sysctl.conf to make it persistent.

This disables the Duplicate Address Detection.

After a reboot everything works and the machine works over IPv6.

When I talked to Eimann about this he directly knew another related problem and the explanation:

If you're wondering why a Linux machine won't do v6 anymore when doing a (Cisco SPAN) monitor session over a VLAN which also hosts the default network: The machine sees some Neighbor-talking over the VLAN and switches to dadfailed effectively breaking the v6.