Setting up IPv6 connectivity for my home LAN and my laptop

Our ISP has been saying that they will be rolling out a trial of IPv6 for more than 3 years now. Since this does not appear to be forthcoming I decided instead to make use of an IPv6 tunnel.

This tunnel behaves in much the same way as a VPN tunnel. You use IPv4 to connect to an endpoint, then use IPv6 addresses on the tunnel virtual interfaces. I used the Hurricane Electric tunnelbroker.net for my home IPv6 access, and a sixxs.net AYIYA tunnel for my laptop when away from home. I chose the AYIYA for my laptop since it is NAT friendly and is a better choice if your IPv4 address changes regularly. Both services are free.

Since I have a simple Linux machine as my main router this was actually a straightforward process. If you have a router that supports IPv6 tunnels, this can be even easier. In my case I had to setup the tunnel interface in /etc/network/interfaces (this is a Debian install, this should be the same for Ubuntu). The actual IPs have been obfuscated):

iface eth1 inet6 static
address 2001:a:b:c::3
netmask 64

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:aaaa:b:cccc::2
netmask 64
endpoint 216.218.226.238
local 1.2.3.4
ttl 255
gateway 2001:aaaa:b:c::1

My "internal" subnet is 2001:aaaa:c:d::/64 which is for a single broadcast domain. When I add the lab (which is on a different network segment) I will get /48 and then subnet that out. The internal IPv6 address of the router needs to be statically assigned since I will be using radvd to broadcast out details of our network (I opted to go this route instead of DHCP6 since I really wanted to try Stateless Address Autoconfiguration based on Router Advertisements.

To do this I installed the radvd package and configured it as follows:
/etc/radvd.conf

interface eth1
{
AdvSendAdvert on;
prefix 2001:a:b:c::/64 { # this is my internal network prefix
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS 2001:a:b:c::3 2001:a:b:c:21f:d0ff:feaf:2a5e
2001:a:b:c:5054:ff:fe2f:be54 { # I have 3 DNS servers
# I have no options to add here
};
DNSSL lan.domain.tld {
};
};

This basically sets all the options that you would normally get via dhcp. For more information of radvd options, check out the man page (or visit this site: http://linux.die.net/man/5/radvd.conf).

Once these changes were made I had to enable ipv6 forwarders with:

sudo sysctl -w net.ipv6.conf.all.forwarding=1

To make these changes permanent I put net.ipv6.conf.all.forwarding=1 in /etc/sysctl.conf

Once I restarted radvd (sudo service radvd restart) client machines on the internal lan just started connecting out over IPv6 automatically (where possible). There was no client configuration required for my Ubuntu laptop or Windows 7 and 8 desktops.

Some screen shots of IPv6 in action:
http://meganerd.ca/files/ipv6/screenshot_ipv6_blur.png
http://meganerd.ca/files/ipv6/screenshot_ipv6_mtr_blur.png

I have not covered the firewall configuration or the forward and reverse DNS zones.

For more information I found the following links to be helpful:
http://ipvsix.me/?tag=radvd
http://en.wikipedia.org/wiki/IPv6
http://sixxs.net
http://tunnelbroker.net/