IPv6 addressing and dual-boot with Windows
Since getting IPv6 access, I’ve spent a little time looking into IPv6 addresses. So I thought I would share some of that on this blog.
An IPv6 address is 128 bits in length. So there won’t be a shortage anytime soon.
An address can be thought of as having three parts. There’s a prefix, typically assigned by the ISP. Then there’s a portion that can be used on a campus WAN, to distinguish different local subnets. And then there’s the local part which identifies individual computers on the LAN. The local part is often the last 64 bits of the IPv6 address.
In my case, my ISP has assigned a 60 bit prefix. My router has assigned the next 4 bits, which presumably would allow up to 16 subnets. And the last 64 bits are for the LAN portion, and are to be assigned to individual computers on the LAN.
The usually preferred method for assigning IPv6 addresses, is that they are assigned automatically. And that is working well here.
The router periodically sends out router announcements to announce its presence. And it provides information about the IPv6 addresses to be used. Each computer on the LAN then constructs its own local part of the IPv6 address. It tests to make sure this does not lead to a conflict (two or more computers with the same address), and then assigns that to the interface.
There is an option to use DHCPv6 to assign addresses. Presumably, that would allow stricter control. I have not looked closely into using DHCPv6, as it is not needed in my situation. I did not that my router has an option to enable DHCPv6. I have not attempted to enable that.
There’s actually a standard, EUI-64, for setting the local part of the IPv6 address from the network device MAC address. Since MAC addresses are assigned in ways such that no two computers or network cards should normally have the same MAC address, this standard makes conflicts unlikely. However, the standard is voluntary.
Temporary IPv6 addresses
There’s are privacy extensions for IPv6, which allow a random local part of the IPv6 address. I’ll discuss those in more detail in a future post. At present, Windows uses those, but most versions of linux don’t. This might be changing.
If you look at your IPv6 addresses in Windows (type the command
in a command prompt), you will notice that your main connection has 3 IPv6 addresses. One of these is a “link local” address, intended for use only on the LAN, and with a prefix beginning “fe80::”. The others use the prefix provided by the ISP. Of those using the ISP provided prefix, one is a permanent address and the other is a temporary address. If you reboot, you will have the same permanent address but a different temporary address.
If you dual-boot with Windows, you might notice that Windows is using a different IPv6 address. That is because linux follows the EUI-64 standard, while Windows does not. Instead, Windows randomly generates the local part of the permanent IPv6 address, then saves that to disk so that the same value will be used on the next boot.
For an ordinary home user, this difference in IPv6 addresses might not matter. For some purposes, it does matter. If you want to change that, then you can set Windows to use the EUI-64 standard. In an administrator command prompt, enter the command:
netsh interface ipv6 set global randomizeidentifiers=disabled
You might need to reboot for this to completely take effect. I tried this on Vista, and the change was immediate. I’ll probably make that change on Windows 8, when I next reboot my desktop to Windows in order to update antivirus definitions. For what I do, it isn’t all that important that the IPv6 address be the same under Windows and linux. Yet it seems to make sense to keep them the same.