[olug] network devices spontaneously swapping in Fedora and probably a few other distros
Lou Duchez
lou at paprikash.com
Fri Jul 12 14:34:05 UTC 2013
My trusty Linux router started acting up after a power outage last
night, where it started spontaneously swapping network devices -- eth0
started getting assigned to eth1 and eth1 started getting assigned to
eth0. That shouldn't be happening, I thought ... except, it turns out,
it should.
Here's the deal. System names get assigned semi-randomly, according to
which devices are discovered first. udev allows for "locking" device
names on your computer, and in particular you can lock network adapter
names in the file /etc/udev/rules.d/70-persistent-net.rules . So if you
set up your /etc/udev/rules.d/70-persistent-net.rules it might look
something like this:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="00:18:8b:28:da:b4", ATTR{type}=="1", NAME="eth0"
Basically it's saying: if you find a device with an address of
"00:18:8b:28:da:b4", make sure to assign it the name "eth0".
Here's the problem with that: MERE MORTALS CANNOT OVERRIDE AUTOMATIC
SYSTEM NAMES. Linux will smile and nod when it reads that line I put
into 70-persistent.net.rules, but it won't act on it, because Linux has
its own ideas about eth0. In other words, you should assume you have
zero control over eth0, eth1, and so on. Here is a semi-official
confession:
https://bugs.freedesktop.org/show_bug.cgi?id=56929#c3
So, what can a person do? Well, the most reliable recourse is to use
udev to assign your own custom names, and then use those custom names in
the rest of your configuration. So change "eth0" to "myeth0" (or
whatever) in 70-persistent-net.rules:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="00:18:8b:28:da:b4", ATTR{type}=="1", NAME="myeth0"
Then further steps:
- In /etc/sysconfig/network-scripts, rename ifcfg-eth0 to ifcfg-myeth0.
- Edit ifcfg-myeth0 so it contains this line:
DEVICE=myeth0
- Do your iptables or other firewall rules make explicit mention of
eth0 or eth1? Fix 'em.
- How about your DHCP -- is it tied to eth0 or eth1? You know what
to do.
And by the way, this is also an issue with hard drives -- just having a
USB drive plugged in at boot time could be enough for your system to
misdiscover your drives. This was discussed a long time ago right here
on OLUG (the very issue that caused me to discover OLUG in fact). To
nail down your drive AND its partitions, do something like this:
KERNEL=="sd[a-z]", SUBSYSTEM=="block",
ENV{ID_SERIAL}=="3600508e000000000ebf986dc63d2910f", SYMLINK+="bootdrive"
KERNEL=="sd[a-z][1-9]", SUBSYSTEM=="block",
ENV{ID_SERIAL}=="3600508e000000000ebf986dc63d2910f", SYMLINK+="bootdrive%n"
And to figure out what the ID_SERIAL is, run this:
udevadm info --query=env --name=sda | grep ID_SERIAL=
More information about the OLUG
mailing list