No eth0
interface in your system!
If you are using Ubuntu or Debian on ARM, as I am doing at the moment, you may be surprised to see that your system has an eth1
interface (or even eth5
), but no eth0
!.
This also happens on x86, of course, and probably with other distributions. I faced and understood this problem when I migrated a KVM virtual machine from a regular network interface card to a virtio one. eth0
was gone, and because my network settings were bound to this interface, I couldn’t connect to my virtual machine anymore.
In recent releases of Ubuntu, this happens because of some udev rules, which try to make sure that each network card always gets bound to the same ethx
device. So, every time the system see a new network card, the /etc/udev/rules.d/70-persistent-net.rules
file gets updated as follows:
# This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x14e4:0x167a (tg3) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:8b:87:52:12", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # USB device 0x:0x (asix) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:00:eb:eb:26", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
This can happen if you replace a USB to Ethernet dongle by another one with a different MAC address, or if you reuse a filesystem built on another board. Even if the board and Ethernet device are the same, you will get eth1
instead of eth0
. This can be annoying if you configured your network through /etc/network/interfaces
or if you bring up your network with your own scripts.
A clean solution for this problem is simply to remove the /etc/udev/rules.d/70-persistent-net.rules
file. The next time you boot, you will get back to a normal eth0
network device.
I checked that these persistent net naming rules are not part of udev releases. In other distributions, you could have udev without such rules.