I just upgraded a virtual 14.04 server machine to 16.04. After rebooting the VM I see the following error:
[FAILED] Failed to start Raise network interfaces. See 'systemctl status networking.service' for detailsAfter login I can run the mentioned command and get the following output (image as I'm not able to connect):
The configuration in /etc/network/interfaces looks fine - featuring the manually configured eth0 (not using dhcp here)
What makes me wondering is that ifconfig -a lists
- ens160
- lo
Where I would expect
- eth0
- lo
Trying to up the eth0 device via
sudo ifup -v eth0 outputs:
...
Cannot find device "eth0"
Failed to bring up eth0.The virtual wired network device itself is still configured in the VM itself as it was before.
ip link shows as well lo and ens160 - where ens160 has the mac address configured in vmware for the single configured virtual network device.
UPDATE
I am able to solve the issue if i change all references of eth0 in /etc/network/interfaces to ens160.
BUT - this feels wrong for me for several reasons:
- I would like to understand this problem
- I would like to stick to eth0 instead of ens160
So please can someone explain this change, which didn't happen to several other 14.04 machines on the same server which I also upgraded to 16.04.
24 Answers
Reason
The problem was caused by Predictable-Network-Interface-Names from systemd/udev.
Possible solution
According to this source you can either:
- You disable the assignment of fixed names, so that the unpredictable kernel names are used again. For this, simply mask udev's rule file for the default policy: ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
- You create your own manual naming scheme, for example by naming your interfaces "internet0", "dmz0" or "lan0". For that create your own .link files in /etc/systemd/network/, that choose an explicit name or a better naming scheme for one, some, or all of your interfaces. See systemd.link(5) for more information.
- You pass the net.ifnames=0 on the kernel command line
Applied solutions
I did create a new file 10-rename-network.rules in /etc/udev/rules.d/ and added the following content to it:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0"where
eth0= desired network interface name, used in/etc/network/interfacesff:ff:ff:ff:ff:ff= hardware mac address of the network device
I'd recommend rebooting after completing this to make sure the change is sticky.
4Solved by changing file /etc/network/interfaces.d/setup from:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcpto:
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp 3 In my case this problem was related to trying to bring up my bridge br0. I had forgotten to do this:
sudo apt-get install bridge-utilsbefore and so my adapter couldn't get started.
1You might want to delete/modify the udev cache for persistent/consistent network interface names, located here: /etc/udev/rules.d/70-persistent-net.rules