Naming Network Interfaces on LInux

Introduction

When the Linux kernel boots, it assigns names (eth0 etc..) to
network devices in the order that it finds them. This means that two
different versions of the kernel, say 2.4 and 2.6, might find the network
interfaces in a diffent order. When this happens you might have to
swap all the cables to get your connections to work the way you want.

One way to rename the network interface is to use a udev rule.

Take a note of the MAC address of the interface you would like to rename and create a rule file in /etc/udev/rules.d/

[root@host]# vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:60:dd:45:c7:9f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth-pub"

Then you can either reboot your systems or restart the udev daemon and run udevadm to trigger the change.

An older way to do this is to name the interfaces with the nameif command (part of the net-tools).
You can install net-tools by running:


[root@host]# yum install net-tools

MACTAB and NAMEIF

The nameif command can be driven from the command line, if you want to do that, then read it's man page. Another way is to set up a /etc/mactab file to relate the MAC addresses of the network cards to
the names you want.

Every NIC interface in the (known) universe has a unique MAC address (Media Access Control address), which is usually expressed as a 12 digit hexadecimal number, colon-dotted in pairs for readability.

You will need to find the MAC addresses of each of your network cards.
The easiest way to find these (if you didn't make a note of the MAC label when you installed the card) is to use ifconfig, each interface that is configured will report its MAC address. e.g:


[root@host]# /sbin/ifconfig

eth0      Link encap:Ethernet  HWaddr 00:60:97:52:9A:94 

inet addr:192.168.1.3  Bcast:192.168.1.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6043 errors:0 dropped:0 overruns:0 frame:0

TX packets:6039 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:1439604 (1.3 Mb)  TX bytes:509857 (497.9 Kb)

Interrupt:10 Base address:0xc800 

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:7218 errors:0 dropped:0 overruns:0 frame:0

TX packets:7218 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0 

RX bytes:1085452 (1.0 Mb)  TX bytes:1085452 (1.0 Mb)

Take note of the HWaddr, this the NIC's MAC address.
Now you can decide what you would like the NIC to be called, and set up your /etc/mactab, here's mine as an example:

# Begin /etc/mactab

# This file relates MAC addresses to interface names.

# We need this so that we can force the name we want

# even if the kernel finds the interfaces in the

# wrong order.

# eth0 under 2.4, eth1 under 2.6

cyberint 00:60:97:52:9A:94

# eth1 under 2.4, eth0 under 2.6

newint 00:A0:C9:43:8F:77

# End /etc/mactab

If you run nameif (without parameters) now you will probably get an error message, since nameif must be run when the interfaces are down.

[root@host]# nameif

cannot change name of eth0 to beannet: Device or resource busy

so, first take the interface down, then rename it:

[root@host]# ifconfig eth0 down

[root@host]# nameif

[root@host]# ifconfig eth0 up

[root@host]# ifconfig

cyberint   Link encap:Ethernet  HWaddr 00:60:97:52:9A:94

inet addr:192.168.1.3  Bcast:192.168.1.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 
RX packets:6617 errors:0 dropped:0 overruns:0 frame:0

TX packets:6596 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100 

RX bytes:1748349 (1.6 Mb)  TX bytes:598513 (584.4 Kb)

Interrupt:10 Base address:0xc800 

lo        Link encap:Local Loopback  

inet addr:127.0.0.1  Mask:255.0.0.0

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:9097 errors:0 dropped:0 overruns:0 frame:0

TX packets:9097 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1340480 (1.2 Mb)  TX bytes:1340480 (1.2 Mb)

Using ifrename as a newer alternative

nameif has been obsoleted by the ifrename command.

To use the ifrename command first create the /etc/iftab file containing the new interface name and the corresponding MAC address like this:

ifname      mac 00:16:3E:3B:B0:52

Bring the interface down and run:

[root@host]# ifrename

Then bring the interface up with the new name specified in the config file:

[root@host]# ifconfig ifname up