Linux – Are multiple global-scope IPv6 addresses on one adapter sane

ipv6linuxsolaris

Setting up IPv6 on Linux is pretty trivial, you can follow IPv4 guidelines and give yourself a static IPv6 address.

On Solaris things are not so rosy, IPv6 only works after running in.ripng. After running this you get IPv6 address auto-configuration on the local LAN segment. So whilst I have configured Solaris for one static IPv6 address I ultimately end up with three, the link-local scope, the static global-scope and a auto-configured global-scope:

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.6.28.36 netmask ffffff00 broadcast 10.6.28.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
        inet6 ::1/128 
eri0: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
        inet6 fe80::203:baff:fe4e:6cc8/10 
eri0:1: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
        inet6 2002:dce8:d28e::36/64 
eri0:2: flags=2180841<UP,RUNNING,MULTICAST,ADDRCONF,ROUTER,IPv6> mtu 1500 index 2
        inet6 2002:dce8:d28e:0:203:baff:fe4e:6cc8/64 

eri0:1 is the static address I have trivially chosen to match the IPv4 host, eri0:2 shows the auto-configured address re-using the numbers from the link-local interface.

in.ripng is configured with /etc/inet/ndpd.conf:

ifdefault AdvSendAdvertisements true
prefixdefault AdvOnLinkFlag on AdvAutonomousFlag on

if eri0 AdvSendAdvertisements 1
prefix 2002:dce8:d28e::/64 eri0

So the auto-configuration extends to all other hosts on the LAN segment so a Linux server with previously only the one global-scope address now yields two:

eth0      Link encap:Ethernet  HWaddr 00:14:5e:bd:6d:da  
          inet addr:10.6.28.31  Bcast:10.6.28.255  Mask:255.255.255.0
          inet6 addr: 2002:dce8:d28e:0:214:5eff:febd:6dda/64 Scope:Global
          inet6 addr: fe80::214:5eff:febd:6dda/64 Scope:Link
          inet6 addr: 2002:dce8:d28e::31/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Are these sane configurations?

It seems unrealistic to have Internet facing servers that take addresses from their MAC address.

From a development perspective for a networking stack I would like to bind to eth0 with IPv6 and whilst it is simple to ignore the link-local scope interface how I can I select between the two global-scope addresses?

It's difficult to apply RFC 3484 sorting rules as both have the same scope and prefix length.

edit: side note for Solaris admins, after reviewing the system configuration I actually now can get static addressing to work correctly without auto-configuration.

Best Answer

That situation is perfectly normal. If you don't want the Linux box to autoconfigure IPv6 addresses you can always turn that off on the Linux box in /etc/sysctl.conf:

net.ipv6.conf.eth0.autoconf = 0