Ubuntu 16.04 (Xenial Xerus) replaces the now familiar network interface names (e.g. eth0) with slightly less familiar Predictable Nework Interfaces Names (e.g. enp0s3). Although they appear less predictable (what slot is the NIC in a VM?), they do appear consistent across system restarts and MAC address changes (negating an old headache for cloning VMs).
The systemd documentation outlines "four options" [sic] to disable Predictable Network Interface Names:
- 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
Neither 1 nor 2 actually work on Ubuntu 16.04 though. #2 is only partially broken though, as illustrated with the following
[Match] MACAddress=00:00:00:00:00:00 [Link] MTUBytes=1450 Name=arbitrary0
MTUBytes changes the default MTU, indicating a successful match, but the interface does not adopt the "arbitrary0" name (or any other). Just the Name part failing suggests a specific (and hopefully short-lived) bug in systemd handling on Ubuntu 16.04. Interestingly, #1 failed to disable Predictable Network Interface Names while also disabling processing of
Odd behavior aside, fix #3 does solve the problem:
# disable https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="net.ifnames=0"/g' /etc/default/grub sudo grub-mkconfig -o /boot/grub/grub.cfg
Exciting releases are frustrating...