State of IPv6 in Ubuntu Oneiric

One of my focus for the Oneiric development cycle is to make sure we get proper support of IPv6 both at install time and during regular use of the system.

To achieve this, I started working on the list of all possible scenarios I could think of with all possible combinations of IPv4 and IPv6. Then checked how well these were supported on Ubuntu.

Since Ubuntu 11.04, we now have a DHCPv6 aware DHCP client but that’s not working as well as it should because Network Manager didn’t do IPv6 by default back then and because the DHCP client configuration for IPv6 wasn’t too clear (dhclient wasn’t requesting any attribute).

Most of these issues are now fixed in Oneiric with Mathieu Trudel-Lapierre‘s great work on updating Network Manager in Oneiric to have IPv6 on by default and make sure people don’t have to wait for IPv6 to timeout to get their IPv4 connectivity.

The result is something like you can see below, on a network that has both DHCPv4 and stateless DHCPv6:

The use cases that are currently tested are:

  • Single stack: SLAAC IPv6-only network
  • Single stack: Stateful DHCPv6 IPv6-only network
  • Single stack: Stateless DHCPv6 IPv6-only network
  • Single stack: DHCPv4 IPv4-only network
  • Dual stack: SLAAC + DHCPv4 network
  • Dual stack: Stateful DHCPv6 + DHCPv4 network
  • Dual stack: Stateless DHCPv6 + DHCPv4 network

For these interested, you can look at the following files to get some example DHCPv4, DHCPv6 and RADVD configuration:

It’s worth noting that you have to start a separate dhcpd server for IPv6 (with the -6 flag) as dhcpd can’t answer both dhcpv4 and dhcpv6 at the same time. You need two separate daemons with two separate configuration files.

As you can see from the files above, I have a pretty complete IPv6 test setup, running on libvirt. I’m now working on automating all of this so we can get some easy regression testing of IPv6 support on Ubuntu.

During our sprint last month in Dublin, Colin Watson also got netcfg to support IPv6 thereby making debian-installer working with IPv6. The missing piece now is ifupdown support of DHCPv6 (so you can configure DHCPv6 in /etc/network/interfaces) and we should then have Ubuntu install on IPv6 from the alternate/server disks.

IPv6 support is starting to look really good for Oneiric and should be awesome for the next LTS.
If you’re already running Oneiric on an IPv6 capable network, please test the new Network Manager and if you encounter any problem, please file bugs or poke me so I can add some more tests to my list!

This entry was posted in Canonical voices, Conferences, IPv6, Planet Ubuntu. Bookmark the permalink.

20 Responses to State of IPv6 in Ubuntu Oneiric

  1. Felix Maurer says:

    One thing still bugs me, what about the privacy extension? Can it be enabled by default?

    • Network Manager doesn’t offer configuration for the privacy extension yet, though I think it’d be interesting to get it.

      For now, the following should do the trick:
      sysctl net.ipv6.conf.all.use_tempaddr=2

      My guess is that most IPv6 production environment will likely switch to stateful DHCPv6 as they’ll likely want to push DNS servers, domain, NTP servers, … as they used to with DHCPv4. They can certainly do the same with stateless DHCPv6 but using stateful will let them use a pool of address similar to what was done for v4 and probably fix some of the privacy issue at the same time.

      Ubuntu has the following bug report about it: https://bugs.launchpad.net/ubuntu/+source/procps/+bug/176125

  2. Baldur Norddahl says:

    We need a privacy extension option and it should be enabled by default as in Windows.

    I have not had a chance to try Oneiric but with Natty I need to run with IPv6 set to “ignore”. The kernel will automatically grap an IPv6 address anway. We are running SLAAC without DHCP. If I enable IPv6 the network will reset at regular intervals so I sure hope this has been fixed.

    • For the privacy extension option, see the reply to the comment above.

      For SLAAC without DHCP on Oneiric, it’s the setup I’m using at home and I haven’t noticed any network reset while using Network Manager in Automatic mode for IPv6.
      Would be great if you could confirm that the new Network Manager indeed solves your problem as well.

  3. Pingback: IPv6 i Ubuntu Oneiric « Maths hörna

  4. Ronald van Zantvoort says:

    Have you properly implemented picing up radvd’s DNS advertisement on the client side yet? The current implementation is wonky at best, but using radvd w/DNS advertisiement is a pretty cuhl way of doing SLAAC without DHCP

    • I’m not entirely sure as it’s not part of my current tests, but I don’t think Network Manager supports RDNS currently.

      I’ll run a test later today and reply to that comment with the result.

      I think you’d need rndsd or a similar daemon installed to pickup the DNS part of the router advertisement and configure your system’s DNS accordingly. Unfortunately, this will most likely conflict with Network Manager so I guess the functionality would need to be duplicated and integrated into Network Manager’s code.

    • Mathieu Trudel-Lapierre says:

      Testing that use case definitely won’t hurt, but it does appear to be parsed and taken into account by NetworkManager; see http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/ip6-manager/nm-ip6-manager.c#n635

      • Arnaud says:

        The package rdnssd can use the recursive dns server information present in a RA packet.
        I know that this blog entry is quite old but end up here while looking for Linux to understand the rdnss entry.
        It might help others.

        Nice post by the way.

        ps (tried on 13.10)

  5. Baldur Norddahl says:

    Are you only working on the desktop version of Ubuntu? I am having trouble with Ubuntu 11.04 Server – IPv6 using DHCPv6 is completely broken. We have had no success at all. It works for desktop and also works for Windows.

    How do I get a recent Oneiric ISO? I have this in a cloud environment so I can quickly check any progress but I need an ISO or image to start from.

    • Hi, sorry for the delay, I was traveling to a development sprint last week.

      Ubuntu 11.04 only has a partial dhclient configuration for DHCPv6 and so the usual behavior (when started manually as ifupdown doesn’t know what dhcpv6 is) is to get an IP address but no DNS configuration.

      Oneiric should fix that by bringing an ipv6 aware installer and ifupdown (I saw the former work, not sure on the state of the later).
      If that doesn’t work, you should at least be able to install network manager and use it for dhcpv6 (it has a basic command line interface).

      Recent test ISOs for server can be found here (alpha-3):
      http://cdimage.ubuntu.com/releases/11.10/alpha-3/

  6. Jeff Loughridge says:

    DHCPv6 doesn’t appear to work in Oneirc using /etc/network/interfaces. I tried using “dhcp” and “dhcpv6″. Both were not recognized.

    As a work-around, I assign a ULA static address and use post-up to call dhclient.

    iface eth0 inet6 static
    address fc00::1
    netmask 64
    post-up /sbin/dhclient -6 eth0

    Is there a Ubuntu forum or mailing list to track IPv6 development in Ubuntu? I’d like to stay abreast of IPv6 issues relating to the installer, DHCPv6, and network configuration.

  7. I am getting strange results with 11.04 under both VMWare and Parallels under MacOSX. When IPv6 is ON under Ubuntu, the IPv4 stack is not properly initialized (it shows an IP address of 0.0.0.0). With IPv6 OFF IPv4 works properly. I suspect an Ubuntu bug since Windows XP Pro is able to dual stack under both VMs.

    • That seems pretty weird though I’m really not too familiar with the pre-Oneiric behaviour on Ubuntu other than knowing it being mostly broken.
      Would be great if you could test with Oneiric (11.10) beta2 and see if you still have that bug.

  8. Pingback: Networking in Ubuntu 12.04 LTS | Stéphane Graber's website

  9. JeanJacques Sarton says:

    I am working on a little project in order to provide simple tools for IPv6 connectivity within the home lan. In order to test this I use, as client, an ubuntu 10.04 system and all worked well after I have made a little correction within the /etc/sysctl.conf file.
    The client use only router advertisement for the configuration of the network. Dhcp is buggy and therefore not used. In order to get a correct /etc/resolv.conf file I had to write a little programm which extract the name server and DNSSL from the router advertisement and I use on the server a little server which send node information query to the ninfod server I installed on the client an then update the name server (bind 9.8, unbound or dnsmasq). With this there are no problems, I can reach all systems of the internal network.
    While trying to setup a vpn connection betwenn the server and the ubuntu client attached to the ipv6 cloud via miredo, the connection between both systems is done but after the address of the IPv6 tunnel what aquired, there is a wrong default route which forbid working until it is deleded with ip ro …
    This default route is:
    default via fe80::1234:56ff:fe78:abcd:ef01 dev tincdev proto kernel …
    This make that all IPv6 frames are send via the tinc tunnel instead via the teredo tunnel.

  10. Is there a way to make DNS resolution default to IPv6 in Ubuntu? I have v4 and v6 working, but if a service (like Google) advertises both, v4 is used right now…

    • Ubuntu defaults to IPv6 when connecting to services, so if it’s not the case for you, you either have an issue with your IPv6 routes or you’re using 6to4 (2002:: subnet) and then it’s the expected behavior of the libc to use IPv4 by default instead of IPv6 as 6to4 isn’t necessarily reliable.

  11. Eric Pagel says:

    I think you guys are doing great work I enjoyed reading your posts here.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>