Three-interface system fails to add one IPv6 address

Asked by William Atwood on 2017-05-13

Ubuntu 16.04 LTS
Three Ethernet interfaces, as defined in /etc/network/interfaces:
enp4s0: driver tg3, IPv4 132.205.9.46, IPv6 fd51:20d9:5ad2:b::2
enp5s4: driver e1000, IPv4 132.205.9.50, IPv6 fd51:20d9:5ad2:c::2
enp5s5: driver e1000, IPv4 132.205.9.53, IPv6 fd51:20d9:5ad2:d::1
All statically configured.

enp4s0 and enp5s5 come up normally, and acquire both the IPv4 and IPv5 addresses. enp5s4 acquires the IPv4 address, but not the IPv6 address (as shown by 'ifconfig').
Using journalctl -xe, I can show that enp4s0 is initially named eth0, and then renamed enp4s0. enp5s4 is initially named eth0, and then renamed enp5s4. enp5s5 is initially named eth1, and then renamed enp5s5. This double use of eth0 concerns me, although the name eth0 appears to be free at the time that the second interface is discovered.
Extracting the information for enp4s0, enp5s4 and enp5s5 and comparing, when enp5s4 becomes 'ready', the next message is 'Ritchie sh[574]: Failed to bring up enp5s4.'

Complete logs can be made available if they will be useful, along with images of /etc/network/interfaces and the output from 'ifconfig'.

Question information

Language:
English Edit question
Status:
Open
For:
Ubuntu Edit question
Assignee:
No assignee Edit question
Last query:
2017-05-15
Last reply:
2017-05-13

You can't have more than one NIC on the same subnet. It makes routing not work

They are not on the same subnet.

Here is /etc/network/interfaces:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto enp4s0
iface enp4s0 inet static
address 132.205.9.46
netmask 255.255.255.252
up ip route add 132.205.9.32/29 via 132.205.9.45 || true
up ip route add 132.205.9.40/30 via 132.205.9.45 || true

iface enp4s0 inet6 static
address fd51:20d9:5ad2:b::2
netmask 64

auto enp5s4
iface enp5s4 inet static
address 132.205.9.50
netmask 255.255.255.252
up ip route add 132.205.9.0/28 via 132.205.9.49 || true

iface enp5s4 inet6 static
address fd51:20d9:5ad2:c::2
netmask 64

auto enp5s5
iface enp5s5 inet static
address 132.205.9.53
netmask 255.255.255.252
gateway 132.205.9.54
dns-search concordia.ca
dns-nameservers 132.205.96.93 132.205.96.94

iface enp5s5 inet6 static
address fd51:20d9:5ad2:d::1
netmask 64

Each of the interfaces is on a (small) IPv4 subnet, and they are each on a different /64 for IPv6. The issue has nothing to do with routing. It has to do with the fact that the address fd51:20d9:5ad2:c::2 is not added properly to interface enp5s4.

I expanded the test to three similar systems.
Ritchie: Dell 390
Gingko: HP Z210
Tarjan: HP Z210

All three have a built-in Ethernet
Ritchie: driver tg3, initially labeled eth0; relabeled as enp4s0
Gingko: driver e1000e, initially labeled eth0, relabeled as eno1
Tarjan: driver e1000e, initially labeled eth0, relabeled as eno1

all three have two Intel add-in NICs
Ritchie: driver e1000, initially labeled eth0, relabeled as enp5s4
         driver e1000, initially labeled eth1, relabeled as enp5s5
Gingko: driver e1000, initially labeled eth0, relabeled as ens6
         driver e1000, initially labeled eth1, relabeled as ens7
Tarjan: driver e1000, initially labeled eth0, relabeled as ens6
         driver e1000, initially labeled eth1, relabeled as ens7

On each system, the /etc/network/interfaces file assigns a static Unique Local Address (ULA), in the manner shown on the previous posting. The assigned subnets are disjoint, for both IPv4 and IPv6.

The IPv4 routing shown (in the interfaces file) has worked properly for several months; all systems area accessible from outside the lab in which they are located (but not from outside my university, because of faculty routing policy).

No IPv6 routing is yet attempted; I am just trying to get the machines to adopt static ULAs.

Result (as seen in the output from 'ifconfig' on each machine):

On Ritchie:
enp4s0 has both a /64 Link-Local Address (LLA) and a /64 ULA
enp5s4 has only a /64 LLA
enp5s5 has both a /64 LLA and a /64 ULA

On Gingko:
eno1 has both a /64 LLA and a /64 ULA
ens6 has a /64 LLA and a /128 ULA (in spite of the 'netmaak 64' line in the interfaces file!!)
ens7 has both a /64 LLA and a /64 ULA

On Tarjan:
eno1 has both a /64 LLA and a /64 ULA
ens6 has only a /64 LLA
ens7 has both a /64 LLA and a /64 ULA

So, the results are different on the three machines, in spite of having identically-structured 'interfaces' files, and are even different for two instances of the identical machine.

I suspect a race problem, or a problem ensuing from the re-use of eth0. Note that the built-in interfaces always come up first, and (at least on these three systems) rename eth0 prior to the discovery of the external NICs.

Can you help with this problem?

Provide an answer of your own, or ask William Atwood for more information if necessary.

To post a message you must log in.