As of June, the large Norwegian ISP Get let most customers sign up for a native IPv6 test program.
The only information Get give you when you sign up to their IPv6 test program, is that they:
- use DHCPv6 to delegate addresses and prefixes to the customer,
- SLAAC (Stateless Address Autoconfiguration) is not supported, and
- you’ll get a /60 prefix, e.g. 16 prefixes of size /64.
By popular demand, and since there is little other information available on how to do this, here is how I’ve set up my Linux router to use native IPv6 from Get. I’m running Ubuntu 12.04 on my router, so you may have to adjust a bit for your setup.
Thanks to André Tomt, who provided his working setup, which this is based on.
Get a DHCPv6 client
You need a DHCP client with DHCPv6 support:
The ISC DHCP server will set the MTU on your upstream interface to the MTU
specified by Get’s DHCP. As far as I know, most other DHCP servers ignores the
provided MTU. Since Get’s DHCP specifies an MTU of 576 bytes (the minimum for
IPv4), which is below the 1280 bytes required for IPv6 to work, your system
will probably turn off IPv6 support on your upstream interface. To make the ISC
DHCP client ignore the provided MTU, remove
interface-mtu from the
Connect the dots
/etc/network/interfaces to run the required commands when the
interfaces are taken up and down:
You may need to change
eth2 to match the upstream and downstream
interfaces on your router.
As you can see, I have entered my /60 prefix and the /64 prefix I use on my
local network to
/etc/network/interfaces by hand (the parts marked with
“CHANGEME”). If Get decides to delegate another prefix to me when their IPv6
service leaves the test period, the configuration must manually be updated.
This isn’t perfect, but it works.
Get the prefix from DHCPv6
To figure out what your /60 prefix is, just
ifup your upstream interface
ifup eth2 in my case), so that dhclient6 will be started. If you’re in luck,
it will get a lease and write the lease details to
/var/lib/dhcp/dhclient6.eth2.pd.leases. It will look something
Now, update your
with an address from within your prefix (typically, you’ll add “1” to the
end of the prefix) and update the
ip -6 route add unreachable line
with the prefix. Then
ifup the interface to apply the
If this works, you should now have working native IPv6 on your router. You can test it by running:
Advertise a /64 prefix to your local network
To get the rest of your local network on IPv6, you need to advertise a /64 prefix to your local network. To do so, you need a router advertisement daemon:
You’ll need to configure radvd by editing
/etc/radvd.conf. Here’s my complete
You’ll need to replace
eth1 with the network interface towards your local
Note that the prefix is just defined as
::/64. This is a special case in
radvd, which makes radvd advertise all non-link-local prefixes assigned to the
interface. In other words, we’ll get away with just hard coding the prefix in
When you’re done, restart radvd:
Once radvd is running, any IPv6 enabled computer on your local network should quickly pick IPv6 addresses from your /64 prefix. Again, you can verify by doing:
Updated 2012-09-17: Added note about ISC DHCP client and too low MTU.
Updated 2012-10-09: Updated dhclient shutdown commands so that they also
shut down the one getting stateless information from DHCPv6. Changed the route
command from using
replace, so that it doesn’t fail if the route