This document describes how to connect your machine to the IPv6 infrastructure.
The Internet Protocol has been in in use for a few decades now, but its current version (4) has a few problems that warranted a revision, which became IPv6. IPv6 support is rapidly being added to both the network infrastructure and applications, but connecting to 6bone is still not trivial. This HOWTO describes how to connect to the 6bone, and setup your home network to be fully ipv6 enabled
One interesting feature of IPv6 is auto-configuration. This allow a machine to connect to a IPv6 network and automatically be assigned an address and given a gateway without having to use a (stateful) method like DHCP.
The exact details of this process are described in RFC2462
The auto-configuration process works as follows:
The node takes the link-local prefix (3ffe:8280:10:1d0::/64) and extends it to a full 128 bit address by adding an EUID based on its hardware address.
The node sends a neighbour solicitation message to check if another node is using the same address. If a node is using that address it responds with a neighbour advertisement message and auto-configuration is aborted.
The found link-local address is added to the interface and a scope local route is added. At this point the node has IPv6 connectivity with neighbouring nodes.
The node sends a router advertisement to the all-routers multi-cast group to look for routers.
A router responds with a router advertisement which indicate how the node should be configured. This includes a stateful/stateless configuration flag. In this howto we'll only discuss stateless configuration. For stateless configuration the message includes a subnet prefix.
The subnet prefix (a /64) is extended to a full 128 bit address by adding an EUID based on its hardware address. This is added to the interface as a preferred address.
A default route is set to the router that send the router advertisement
Linux enables IPv6 auto-configuration by default, so you will only need to setup the router. There are two ways of doing those: using radvd or zebra
radvd is a tool to send router advertisements. It does not support other routing protocols like zebra, but it allows more control over the router advertisement messages.
The configuration is done through the /etc/radvd.conf file. For each interface you have to create an interface section and add interface specific and prefix options. The full list of options is describe in the radvd.conf manpage, we will only use AdvSendAdvert here which enables sending of router advertisement messages.
zebra is a powerful routing daemon which supports a wide range of protocols. The only one we will be using here is its IPv6 address auto configuration support.
zebra can be configured either through a IOS-like interface, or using configuration files in /etc/zebra. Please see the zebra documentation details on how to configure it.
The only thing we need to do is configure the prefix for each interface on which we want to send router advertisements, and enable them. The following example shows how to advertise the 3ffe:8280:10:1d0::/64 prefix on eth0.
Now that we have our machine(s) connected to the 6bone the next step is to setup DNS entries for them so we can connect to them using names instead of memorising 128-bit numbers.
RFC1886 defines extensions to the Domain Name System to add support for IPv6 addresses. There are two extensions that concern us:
A new AAAA resource record type for IPv6 addresses.
A new domain for address lookups.
The AAAA record works exactly like the IPv4 A record. The address has to be specified using the standard RFC1884 notation.
Address lookups are doing using a system similar to IPv4 address lookups. RFC1884 uses domain ip6.int, but this is being transitioned to ip6.arpa. At this moment it's preferable to supply both zones.
IPv6 addresses have to be written as a sequence of (hex) nibbles separated by dots. The nibbles are listed in reverse order. This makes it easy to delegate addresses at nibble boundaries. As an example, the IPv6 address 2001:6E0:20A:117:290:27FF:FE2D:968C would be written as c.8.6.9.d.2.e.f.f.f.7.2.0.9.2.0.7.1.1.0.a.0.2.0.0.e.6.0.1.0.0.2.ip6.int . The following example shows a entry for the 2001:6E0:20A:117:290:27FF:FE2D:968C address, which is part of the 2001:6E0:20A:110::/60 zone.
During or after enabling IPv6 on your machine(s) some things will probably break. This chapter lists a few of the common problems and their solutions.
Most likely the server has both a IPv6 and a IPv4 address. Since you can now connect to it using IPv6 as well the application can try that first. If this results in a refused connection since the specific service is not IPv6 enabled yet the application might give an error instead of falling back to IPv4. This commonly happens with web and irc servers.
Most likely your router only has a default route configured for IPv6. Linux does not use the default route when forwarding IPv6 packets so you will need to proper routing entries.
This indicates there are multiple daemons doing route advertistements on your machine. Check if are not running radvd and zebra at the same time.
Since the IPv6 infrastructure is mostly built using tunnels over the current IPv4 infrastructure most people connect using tunnel brokers. These allow nodes with a IPv4 connection to connect to the 6bone using a tunnel.
There are a number of different free tunnel brokers that can be used. This is just a small list of some of them.
Table 1. Tunnel broker
| Organisation | URL | Open for |
|---|---|---|
| XS4ALL | https://service.xs4all.nl/ipv6 | All customers |
| Hurricane Electric | http://ipv6tb.he.net | Everyone |
| Wanadoo Belgium | http://tunnel.be.wanadoo.com/cgi-bin/tb.cgi | Everyone |