Background: predictable vs classic naming¶
Modern distros default to "predictable network interface names" (enp1s0, enx...) driven by systemd, replacing the older kernel-assigned eth0/wlan0 scheme whose ordering could shift between boots on multi-NIC systems. Forcing the classic scheme back is occasionally useful for compatibility with older scripts/docs, but predictable naming is generally the better default on anything with more than one NIC.
Forcing classic naming (eth/wlan)¶
Debian/Ubuntu¶
sudo vi /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
sudo update-grub
sudo shutdown -r now
RHEL/CentOS¶
sudo vi /etc/default/grub
# GRUB_CMDLINE_LINUX="... net.ifnames=0 biosdevname=0"
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo shutdown -r now
Assigning a fully custom interface name via udev¶
Useful when you want a memorable name (wan0, lan-uplink) independent of either naming scheme, pinned to a specific NIC's MAC address:
export INTERFACE=enp3s0
export MATCHADDR=$(ip addr show "$INTERFACE" | grep ether | awk '{ print $2 }')
echo "$MATCHADDR"
Then create a udev rule pinning that MAC to your chosen name:
sudo vi /etc/udev/rules.d/70-persistent-net-rules
# SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<mac_address>", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="wan0"
sudo shutdown -r now
Cheat sheet¶
ip -br link show # current interface names
cat /etc/default/grub # check/set net.ifnames=0 for classic naming
udevadm test-builtin net_id /sys/class/net/<iface> # see what predictable name systemd would assign