The Raspberry Pi and a Static IPv6 Interface ID

I have several Raspberry Pi servers at home all running on Raspbian / Debian Jessie. All of them have IPv6 enabled by default but I was quite surprised that they behave a bit differently when it comes to IPv6 address generation.

While those running a somewhat older Jessie images configure themselves with a static IPv6 interface identifier, I noticed that others running on somewhat newer Jessie images configure random interface IDs that change over time. While this is a cool feature for client devices, referred to as IPv6 privacy extensions, it’s quite undesirable when using a Raspberry Pi as a server and making it accessible over the Internet over IPv6.

When running as a server, the IPv6 interface ID should never change to allow a static configuration of the server’s IPv6 address in the DNS server (obviously, the IPv6 prefix has to be static as well for this). In addition, IPv6 firewalls on routers between the Raspberry Pi and the Internet often have to be configured to allow incoming traffic on desired ports to devices with certain interface IDs. These settings are usually static so the IPv6 interface ID of a Raspberry Pi must not change over time.

After searching for a while I found the difference between the Pis running different versions of Raspbian / Debian Jessie: The newer software version uses the /etc/dhcpcd.conf configuration file which does NOT exist on the older Jessie images. If this file is present, comment out the line that says “slaac private“. After rebooting the IPv6 interface ID will then be generated out of the interface’s MAC address and remain static.