Setting up IPv6 on a computer at MIT

This doc is about setting up a machine to talk IPv6 to the rest of the world. This is mostly about platforms people are using around MIT, but a few others are added in that may be of interest.

Operating systems described here:

This document doesn't cover setting up DNS info for your machine. For that, around MIT (specifically, for a ipv6.mit.edu name if you already have an mit.edu name), contact D. Jared Dominguez or Ken Raeburn. Outside MIT, you're on your own.

For some operating systems, instructions are included as to how to set up a machine to act as a router for your subnet. Please don't do this on campus without coordinating with us and/or the network group.

If you're using DHCP (for example, in locations on campus where wireless service is available), you really should go with autoconfiguration. Manually configuring an IPv6 address on a mobile node is just as broken as manually configuring an IPv4 address on it.

AIX

AIX has support for IPv6. I had to fight with smit to get it to turn on. The ifconfig options smit wanted to set didn't match those I found in documentation. I wound up editing one of the system config files by hand. I don't know if it's possible to turn on IPv6 through the smit interface.

The OS as shipped will support IPv4-compatible addresses (::1.2.3.4), but does not support 6to4 tunnels. Unless you're talking to other IPv4-compatible hosts, don't bother with this.

Autoconfiguration as host seems to work fine. Tunnel/router configuration?

One possible hitch for some software: If you set up a server running on IPv4 and IPv6 ports out of inetd, when an IPv4 connection comes in, applying getsockname and getpeername to the network file descriptor may give you IPv4-mapped IPv6 addresses (::ffff:1.2.3.4). While getnameinfo can handle such addresses (and will look up the IPv4 address), a simple equality test against another representation of the IPv4 address (say, in Kerberos tickets) will fail. The recommended way of coping is to extract the 4 bytes at offset 12 into the IPv6 address, and construct an IPv4 address to use for comparison. (This probably isn't AIX-specific, but AIX is the only platform where I've actually run into the problem so far.)

Irix

Rumor has it there's some Irix IPv6 support in existence, but it doesn't seem to be built in to the release Athena is running. I think you just lose.

Linux

Red Hat Linux 7.1

For Red Hat Linux 7.1 (including Athena 9.0), and Red Hat Linux 9 (including Athena 9.2):

The version of glibc in 7.1 has a bug wherein getaddrinfo may return not return all of the IPv4 addresses of a host that has more than one. My only test case has been a machine with two IPv4 addresses listed, and getaddrinfo reliably returns only one of the addresses.

It looks like /etc/sysconfig/network is generated from /etc/athena/rc.conf in Athena 9.2, so you may need to fix it after some updates.

Anyone want to contribute info on setting up a tunnel/router?

Debian "woody"

Some support built in, some not. I think there's a site with packages available. Have to dig up the info....

The "woody" distribution has a newer glibc that does not have the getaddrinfo bug present in Red Hat 7.1.

Mac OS

Mac OS 9??

I have no idea if IPv6 is available for Mac OS 9.

Mac OS X

I'm told Mac OS X ships with IPv6 support. Whether it's turned on by default, I don't know. I'll update this when I find out.

NetBSD 1.5

NetBSD comes with IPv6 normally built in. You should set "ip6mode" to indicate how you want the system configured:

The default is "host", with no configured addresses.

The "gifn" interfaces are the ones to use for IPv6 tunnels. Under NetBSD 1.5, the "create" ifconfig command should be issued first to set up the interface, then it can be configured. All this can be done via the /etc/ifconfig.gifn file:

  create
  tunnel 208.59.178.68 18.181.0.38 mtu 1480
  inet6 3ffe:1ce1:0:fe30::1 3ffe:1ce1:0:b5::1 prefixlen 48
(Q: Is the "create" line needed? Doesn't the startup script create the interfaces anyways?)

If you have NetBSD 1.5, the "stf0" interface (not normally built into the kernel, you'll have to rebuild it) implements 6to4 tunnelling. Currently only one prefix is permitted on the stf0 interface, and only one stf interface is permitted, so you cannot deploy multiple 6to4 prefixes through a single router even if you have multiple IPv4 addresses assigned to that router.

We are using NetBSD systems for MIT's IPv6 upstream tunnel endpoint (also the W20 network router) and the W92 network (18.18) IPv6 router.

Palm OS

Just kidding. I haven't a clue whether they're supporting IPv6.

Solaris 8

Creating an empty /etc/hostname6.$if will cause inet6 to be brought up for autoconfiguration on interface $if; if the file isn't empty, "/sbin/ifconfig $if inet6 $line" will be run for each line, so you can specify addresses or other options. (I'm not sure if autoconfiguration still happens in that case, or if only the manually configured addresses are used.)

On booting, the OS will turn on IPv6, and automatically configure additional interface addresses when it receives router advertisements. The "ifconfig -a" output looks a little funny, because it lists each interface once for each address family:

  lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
	  inet 127.0.0.1 netmask ff000000 
  hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
	  inet 18.18.1.70 netmask ffff0000 broadcast 18.18.255.255
  lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
	  inet6 ::1/128 
  hme0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
	  inet6 fe80::a00:20ff:fe9a:26d4/10 
  hme0:1: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
	  inet6 3ffe:1ce1:0:12:a00:20ff:fe9a:26d4/64 
  hme0:2: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
	  inet6 2002:1212:148:12:a00:20ff:fe9a:26d4/64 
The use of additional interface names with ":number" is normal on Solaris when multiple addresses are assigned to physical interfaces. I don't know if the numbering sequence is per address family.

The ifconfig man page talks about automatically adding interface addresses on receipt of a router advertisement. What it glosses over is that this only happens because in.ndpd is running, and in.ndpd is not started at boot time if you don't have any ipv6 interfaces set up. So if you're just setting up a host to do ipv6, after you bring up the interface, either start in.ndpd manually, or reboot.

The getaddrinfo routine (the ipv6-enabled, thread-safe follow-on to gethostbyname) checks the "ipnodes" entry in /etc/nsswitch.conf. You should have a line like

  ipnodes: files dns
or getaddrinfo will not return any IPv6 addresses. It looks like IPv4 lookups through getaddrinfo may also respect the order given in the "ipnodes" line, but if the line isn't present, IPv4 addresses will still be retrieved (as per the "hosts" line?).

For more details, see Volume 3 of the Solaris System Administration Guide.

Solaris tunnel endpoint

To cause your machine to be an IPv6 router and tunnel endpoint, you need to set up /etc/inet/ndpd.conf as described in its man page, and create /etc/hostname6.ip* files as described in the ifconfig man page.

A sample ndpd.conf file:

# in.ndpd configuration for ipv6 router for W92
if hme0 AdvSendAdvertisements on
prefix 3ffe:1ce1:0:12::/64      hme0
# Solaris 8 doesn't support 6to4
#prefix 2002:1212:146:12::/64   hme0
A sample hostname6.ip.tun0 file:
tsrc 18.18.1.70 tdst 18.181.0.38 up
addif 3ffe:1ce1:0:12::1 3ffe:1ce1:0:b5::1 up
You will also need to explicitly set a default route for IPv6 traffic, to be loaded at boot time. It appears that Solaris expects RIPng to be used for all routing control, so the startup files don't seem to have any easy hooks for this. Just create a new startup script in /etc/init.d and make links to it from the relevant /etc/rc*.d directories. In Solaris 9 Update 3 (more recent than what Athena is using in the 9.2.7 test release), support for 6to4 routers has been added. See Chapter 2 of the IPv6 Administrator Guide for details.

Windows

Windows XP includes IPv6 support as shipped. You have to find the right options to turn it on. See Microsoft's FAQ about IPv6 for XP.

Microsoft Research has some code online for Windows NT 4 and Windows 2000; they have no plans to support IPv6 on earlier Windows releases.


Ken Raeburn, raeburn@mit.edu
D. Jared Dominguez, raeburn@mit.edu