Configuring IPv6 in your server

Getting IPv6 connectivity to your server isn’t very hard in fact if you have a decent provier you might already have it configured.

Do you have IPv6 already configured?

First try this command

$ ifconfig -a 

You will have result like this:

eth0      Link encap:Ethernet  HWaddr 00:1e:0b:d6:7b:b8  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::21e:bff:fed6:7bb8/64 Scope:Link

he-ipv6   Link encap:IPv6-in-IPv4  
          inet6 addr: 2001:470:1f08:1160::2/64 Scope:Global
          inet6 addr: fe80::5855:f52b/64 Scope:Link

lo        Link encap:Local Loopback  
          inet addr:  Mask:
          inet6 addr: ::1/128 Scope:Host

Look for lines starting with “inet6”, they indicate IPv6 address, but they have different meaning depend on the scoop.


Scope host means IPv6 is configured in your OS and you can connect to your own machine using IPv6, the address would be “::1” which is the equivalent to “” in IPv4 world, try ping to your own machine:

$ ping6 ::1


Scope Link means IPv6 is configured on the given interface with auto configured “Link-local addresses”, in our example “fe80::21e:bff:fed6:7bb8” is configured on the interface “eth0”.

Have a look at the MAC (HWaddr) address for interface “eth0”, and compare it to the IPv6 Link-Local address:


This is how IPv6 auto configuration works, it generate a unique IPv6 address from you MAC address (insert ff fe in the middle of the mac address).

Link local address are used only inside a LAN, i.e. can’t be routed from segment to segment, this enable IPv6 machines to communicate without the need for any configuration (you need away to discover IP address for other machines in the LAN of course).

Pinging another machine in LAN using IPv6 would work like this:

$ ping6 fe80::21e:bff:fed6:7bb8
connect: Invalid argument

It didn’t work, IPv6 sucks, not really, remember Link Local address can’t be routed and your OS can’t use the default gateway to send packets to, this why you have to specify the exact interface you want to use with “-I” option, try this:

$ ping6 -I eth0 fe80::21e:bff:fed6:7bb8
PING fe80::21e:bff:fed6:7bb8(fe80::21e:bff:fed6:7bb8) from fe80::21e:bff:fed6:7bb8 eth0: 56 data bytes
64 bytes from fe80::21e:bff:fed6:7bb8: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from fe80::21e:bff:fed6:7bb8: icmp_seq=2 ttl=64 time=0.008 ms

That worked fine!


Here’s where it gets interesting, global address is used to reach other IPv6 network and hosts and they use back to reach you, it can be configured in many ways:

  • Stateless autoconfiguration: the Os will use router discovery packet to build its own IP, using its MAC address again.
  • DHCPv6 (aka statefull autoconfiguration): same old DHCP update for IPv6.
  • Manual (aka static configuration)

In my server I didn’t have an IPv6 address, and my provider didn’t plan to provide it in the near future, so what to do …. use a tunnel broker to tunnel your IPv6 traffic over IPv4, of course this a temporary solution until my provider arrange for IPv6 upstream connection.

No IPv6, provider don’t have IPv6 upstream connection … tunnel it

Fortunately the Internet full of free IPv6 tunnel broker providers, I signed up with Hurricane Electric Free IPv6 Tunnel Broker, after signing up click on “Create Regular Tunnel”, it will ask you about your IPv4 address to create the tunnel, and that is it, it will create your tunnel for you, it will even give you steps on how configure it on different OSs.

In my ubuntu server I added the following line to my network configuration file:

$ sudo vi /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     address  2001:470:1f08:1160::2
     netmask  64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

and to activate it I ran:

sudo ifup he-ipv6

and to try it:

$ ping6
PING 56 data bytes
64 bytes from 2a00:1450:8006::93: icmp_seq=1 ttl=57 time=97.1 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=2 ttl=57 time=97.2 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=3 ttl=57 time=97.2 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=4 ttl=57 time=97.2 ms

IPv6 is configured and working 🙂

Fun Fact

HE tunnel broker not only tunnel one IPv6 address they tunnel /64 network to your address, this means you can have 2^64 addresses on this tunnel, in contrast all IPv4 address space is only 2^32 of addresses for the whole world!!!

12% to the end of the Internet

IPv4 Exhaustion

Mr. Latif Ladid, the president of IPv6 Forum, left a comment on a previous post on my blog with the latest update on IPv4 exhaustion, only 12% of IPv4 address are left, that is 2% in less than 3 months, the new estimate is 769 days.

This this insightful comment:

The IP address space is down to just 12% with 534 M IP addresses or 32 blocks left. see
One of the most obvious and easily quantifiable incentives of the move to IPv6 is the growth and the continuity of the Internet and then the run to the bank for the remaining address space as it will be needed to have a secure dual stack transition which is the most secure transition and will be unfortunately the rich man’s transition. All others will tunnel which is not secure making it the poor man’s transition. Even the transition will aggravate the digital divide between the haves and have-nots in terms of security. The IPv6 Forum knew this problem 10 years ago and pushed ISPs to move earlier to manage a secure transition, but it takes patience and passion to make this happen.