19.15 IPv6

Originally Written by Aaron Kaplan. Restructured and Added by Tom Rhodes.

IPv6 (also know as IPng ``IP next generation'') is the new version of the well known IP protocol (also know as IPv4). Like the other current *BSD systems, FreeBSD includes the KAME IPv6 reference implementation. So your FreeBSD system comes with all you will need to experiment with IPv6. This section focuses on getting IPv6 configured and running.

In the early 1990s, people became aware of the rapidly diminishing address space of IPv4. Given the expansion rate of the Internet there were two major concerns:

IPv6 deals with these and many other issues:

There are also lots of other useful features of IPv6 such as:

For more information see:

19.15.1 Background on IPv6 Addresses

There are different types of IPv6 addresses: Unicast, Anycast and Multicast.

Unicast addresses are the well known addresses. A packet sent to a unicast address arrives exactly at the interface belonging to the address.

Anycast addresses are syntactically indistinguishable from unicast addresses but they address a group of interfaces. The packet destined for an anycast address will arrive at the nearest (in router metric) interface. Anycast addresses may only be used by routers.

Multicast addresses identify a group of interfaces. A packet destined for a multicast address will arrive at all interfaces belonging to the multicast group.

Note: The IPv4 broadcast address (usually xxx.xxx.xxx.255) is expressed by multicast addresses in IPv6.

Reserved IPv6 addresses:

    ipv6-address   prefixlength(Bits)  description Notes
    
        ::          128 Bits            unspecified cf. 0.0.0.0 in IPv4 address
        ::1         128 Bits            loopback address cf. 127.0.0.1 in IPv4
        ::00:xx:xx:xx:xx    96 Bits             embedded IPv4   The lower 32 bits are the
                                    address IPv4 address. Also called
                                    ``IPv4 compatible IPv6
                                address''
        ::ff:xx:xx:xx:xx    96 Bits     IPv4 mapped     The lower 32 bits are the
                            IPv6 address    IPv4 address. For hosts
                                    which do not support IPv6
        fe80:: - feb::      10 Bits     link-local  cf. loopback address in
                            IPv4
        fec0:: - fef::      10 Bits     site-local
        ff::            8 Bits      multicast
        001 (base 2)        3 Bits      global unicast  All global unicast
                                    addresses are assigned from
                                    this pool. The first 3 Bits
                                    are ``001''.

19.15.2 Reading IPv6 Addresses

The canonical form is represented as: x:x:x:x:x:x:x:x, each ``x'' being a 16 Bit hex value. For example FEBC:A574:382B:23C1:AA49:4592:4EFE:9982

Often an address will have long substrings of all zeros therefore each such substring can be abbreviated by ``::''. For example fe80::1 corresponds to the canonical form fe80:0000:0000:0000:0000:0000:0000:0001

A third form is to write the last 32 Bit part in the well known (decimal) IPv4 style with dots ``.'' as separators. For example 2002::10.0.0.1 corresponds to the (hexadecimal) canonical representation 2002:0000:0000:0000:0000:0000:000a:0001 which in turn is equivalent to writing 2002::a:1

By now the reader should be able to understand the following:

    # ifconfig
    rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
             inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
             inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
             ether 00:00:21:03:08:e1
             media: Ethernet autoselect (100baseTX )
             status: active

fe80::200:21ff:fe03:8e1%rl0 is an auto configured link-local address. It includes the enscrambled Ethernet MAC as part of the auto configuration.

For further information on the structure of IPv6 addresses see RFC2373.

19.15.3 Getting Connected

Currently there are four ways to connect to other IPv6 hosts and networks:

Here we will talk on how to connect to the 6bone since it currently seems to be the most popular way.

First take a look at the 6bone site and find a 6bone connection nearest to you. Write to the responsible person and with a little bit of luck you will be given instructions on how to set up your connection. Usually this involves setting up a GRE (gif) tunnel.

Here is a typical example on setting up a gif(4) tunnel:

    # ifconfig gif0 create
    # ifconfig gif0
    gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
    # ifconfig gif0 tunnel MY_IPv4_ADDR  HIS_IPv4_ADDR
    # ifconfig gif0 inet6 alias MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR

Replace the capitalized words by the information you received from the upstream 6bone node.

This establishes the tunnel. Check if the tunnel is working by ping6(8) 'ing ff02::1%gif0. You should receive two ping replies.

Note: In case you are intrigued by the address ff02:1%gif0, this is a multicast address. %gif0 states that the multicast address at network interface gif0 is to be used. Since we ping a multicast address the other endpoint of the tunnel should reply as well).

By now setting up a route to your 6bone uplink should be rather straightforward:

    # route add -inet6 default -interface gif0
    # ping6 -n MY_UPLINK
    # traceroute6 www.jp.freebsd.org
    (3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
         1  atnet-meta6  14.147 ms  15.499 ms  24.319 ms
         2  6bone-gw2-ATNET-NT.ipv6.tilab.com  103.408 ms  95.072 ms *
         3  3ffe:1831:0:ffff::4  138.645 ms  134.437 ms  144.257 ms
         4  3ffe:1810:0:6:290:27ff:fe79:7677  282.975 ms  278.666 ms  292.811 ms
         5  3ffe:1800:0:ff00::4  400.131 ms  396.324 ms  394.769 ms
         6  3ffe:1800:0:3:290:27ff:fe14:cdee  394.712 ms  397.19 ms  394.102 ms

This output will differ from machine to machine. By now you should be able to reach the IPv6 site www.kame.net and see the dancing tortoise - that is if you have a IPv6 enabled browser such as mozilla+ipv6.

19.15.4 DNS in the IPv6 World

There are two new types of DNS records for IPv6:

Using AAAA records is straightforward. Assign your hostname to the new IPv6 address you just got by adding:

    MYHOSTNAME           AAAA    MYIPv6ADDR

To your primary zone DNS file. In case you don't serve your own DNS zones ask your DNS provider. Current versions of bind (version 8.3 and 9) support AAAA records.

This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

For questions about FreeBSD, read the documentation before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.