Help Center/ Huawei Cloud EulerOS/ User Guide/ Renaming Network Interfaces
Updated on 2025-07-21 GMT+08:00

Renaming Network Interfaces

Introduction

In an earlier OS (such as Fedora 13, Ubuntu 15, and CentOS 6), network interfaces are named eth0, eth1, and eth2. During system initialization, the Linux kernel allocates names to network interfaces by combining fixed prefixes and indexes. For example, eth0 indicates the first Ethernet interface detected during system startup. If a new network interface is added, the existing network interface names may change because they may be initialized in a different sequence after the system is restarted.

To solve this problem and make it easier to identify network devices, modern Linux distributions use a consistent network device naming rule and use udev to manage devices in a unified manner based on these rules. There are multiple naming rules available for udev. By default, udev allocates names to network interfaces based on firmware information, topology, and physical device locations. The renaming service for network interfaces is provided by systemd-udevd which can ensure the consistency and stability of network device names.

A Consistent Network Naming Rule

The naming rule is: device type + device location.

Device type

  • en: Ethernet
  • wl: WLAN
  • ww: WWAN

Device location

Table 1 Device locations

Format

Description

o<on-board_index_number>

Network interface built in BIOS of the mainboard

s<hot_plug_slot_index_number>[f<function>][d<device_id>]

PCI-E network interface built in BIOS of the mainboard

x<MAC>

MAC address

p<bus>s<slot>[f<function>][d<device_id>]

Independent PCI-E network interface

P<domain_number>]p<bus>s<slot>[f<function>][u<usb_port>][.][c<config>][i<interface>]

USB network interface

Procedure

Rename a network interface. For example, rename ens5 to eth0.

  1. Modify the configuration file of the network interface.

    • If the configuration file /etc/sysconfig/network-scripts/ifcfg-ens5 exists, change its name from ifcfg-ens5 to ifcfg-eth0.
      mv /etc/sysconfig/network-scripts/ifcfg-ens5 /etc/sysconfig/network-scripts/ifcfg-eth0

      Edit the ifcfg-eth0 file to change the values of NAME and DEVICE to the new network interface name eth0.

    • If the configuration file /etc/sysconfig/network-scripts/ifcfg-ens5 does not exist, create a configuration file /etc/sysconfig/network-scripts/ifcfg-eth0 and add the following content to the new file:
      DEFROUTE=yes
      BOOTPROTO=dhcp
      NAME=eth0
      DEVICE=eth0
      ONBOOT=yes

  2. Modify the GRUB configuration.

    Modify /etc/default/grub to add net.ifnames=0 and biosdevname=0 to GRUB_CMDLINE_LINUX. Then, run the following command to reload the GRUB configuration:
    grub2-mkconfig -o /boot/grub2/grub.cfg

  3. Create a persistent rule file.

    Create a file 70-persistent-net.rules in /etc/udev/rules.d/ and add the following content to the file:

    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"

  4. Restart the node.

Alternatively, you can use a script to change a network interface name. Enter the original and new network interface names as prompted when the script is executed. After the execution is complete, restart the system. The new name will be applied.

#!/bin/bash

function check_networkcard() {
    while true; do
        echo "Enter the original network interface name (for example, ens33):"
        read interface_name
        if [[ -z "$interface_name" ]]; then
            echo "The input cannot be empty."
            continue
        fi
        ifconfig -a | grep -q "$interface_name"
        if [[ $? -eq 0 ]]; then
            break
        else
            echo "Network interface $interface_name cannot be found. Enter another one."
        fi
    done
}
function modify_grub() {
    sed -i 's/resume/net.ifnames=0 biosdevname=0 &/' /etc/sysconfig/grub
    grub2-mkconfig -o /boot/grub2/grub.cf
}
function modify_adaptername() {
    while true; do
        echo "Enter a new network interface name (for example, eth0):"
        read new_interface_name
        if [[ -z "$new_interface_name" ]]; then
            echo "The input cannot be empty."
            continue
        else
            break
        fi
    done
    cd /etc/sysconfig/network-scripts/
    if [[ -e ifcfg-$interface_name ]]; then
        mv ifcfg-$interface_name ifcfg-$new_interface_name
        sed -i "s/$interface_name/$new_interface_name/g" ifcfg-$new_interface_name
    else
       sudo cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$new_interface_name
DEFROUTE=yes
BOOTPROTO=dhcp
NAME="$new_interface_name"
DEVICE="$new_interface_name"
ONBOOT=yes
EOF
    fi
}
function reload_network() {
    mac=$(ip link show $interface_name | awk '/ether/{print $2}')
    echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$mac\", NAME=\"$new_interface_name\"" >> /etc/udev/rules.d/70-persistent-net.rules
}
function clear_variable() {
    unset interface_name
    unset interface_cardname
    unset mac
}
function main() {
    check_networkcard
    modify_adaptername
    modify_grub
    reload_network
    clear_variable
    echo "The network interface has been renamed. Reboot the node to make the new name take effect."
}
main

During the script execution, if the original configuration file of the network interface cannot be found, DHCP will be added into the generated new configuration file by default. If you need static IP addresses, manually modify the new configuration file after the script execution is complete.