2 minute read

I decided to finally setup IPv6 on my home network, for now running in parallel with IPv4. My DSL ISP (egate) has had IPv6 support for a long time, I received the info I needed from them to set it up over three years ago. I played with it a bit at the time, but had a few issues, and had no real need for it, so never got it working.

I use an old desktop running FreeBSD as my home router, currently running version 8.3-RELEASE-p7. There’s some fairly good instructions easily found with Google, and my ISP even has a sample FreeBSD configuration, but I thought I’d document what exactly I did and what remains to be done.

I already had a working PPPoE setup, so I just added this to my ISP’s profile in /etc/ppp/ppp.conf:

enable ipv6
add default HISADDR6

This enables the IPv6 stack (which might be on by default, but just in case…) and tells it to add a default route for the IPv6 network when it connects.

Then I added the following to /etc/rc.conf:

# ipv6
ipv6_enable="YES"
ipv6_gateway_enable="YES"
ipv6_ifconfig_em0="[router IPv6 IP] prefixlen 64"
rtadvd_enable="YES"
rtadvd_interfaces="em0"

This enables IPv6 networking and configures it as an IPv6 gateway, maps the IPv6 network assigned to me by my ISP to my internal network, and tells the system to run the router advertisement daemon (rtadvd) included with FreeBSD.

I also created the following /etc/rtadvd.conf file so the router advertisement will include DNS server (which in my case is the router) and DNS search domains.

em0:\
        :rdnss="[router IPv6 IP]":\
        :dnssl="searchdomain.example.com":

I haven’t tested this fully, as everything so far seems to be using the IPv4 DNS server info, which is OK for now. Will play with this more later.

After rebooting the router box, most things seem to Just Work. My work MacBook Pro, Windows 7 machines, and home Linux desktop all picked up IPv6 addresses without any issue, and I’m able to ping6 various addresses. Even our mobile devices are working on WiFi, though I can’t see where in the UI on Android or iOS to confirm which local IPv6 IP address is active, it only shows the IPv4 addresses.

I hardcoded an IPv6 IP address on my Linux home theatre PC (HTPC) and that also seems to be working fine, and the Squid proxy on the HTPC box immediately started using IPv6 to access domains that have IPv6 DNS (Google in particular).

So… that was easy, why isn’t everything using IPv6? :)

Note: one thing I discovered while setting this all up is that Amazon EC2 instances still don’t support IPv6, which seems really stupid considering it’s a system that’s supposed to allow you to scale. They do support IPv6 for inbound traffic to their elastic load balancer, but not at all for instances behind the load balancers. :/