Andrew Mercer
on this page

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