Para volver a utilizar el antiguo esquema de nombres de interfaces de red en distribuciones basadas en la familia 7 de Red Hat hay que modificar el parámetro net.ifname y biosdevname=0 en tiempo de arranque y restaurar los antiguos esquemas de configuración de udev.
- Para ello hay que añadir «net.ifname=0» y «biosdevname=0» en la linea de GRUB_CMDLINE_LINUX de /etc/default/grub .
/etc/default/grub
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VG/root rd.lvm.lv=VG/swap net.ifname=0 biosdevname=0 rhgb quiet" GRUB_DISABLE_RECOVERY="true"
- Después de modificar el archivo hay que reconfigurar los parámetros del kernel .
~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-327.22.2.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-327.22.2.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-327.10.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-327.10.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-2d3aa073f57b24438b30ee0a252a1a8c Found initrd image: /boot/initramfs-0-rescue-2d3aa073f57b24438b30ee0a252a1a8c.img done
- Una vez reconfigurados los parámetros de arranque debemos restaurar los antiguos esquemas de configuración de udev, personalizándolos en caso de querer usar algún nombre en particular. Es importante que modifiquemos ATTR{address} con los valores de las direcciones MAC de los interfaces de red que tenemos activos en nuestros sistema.
/etc/udev/rules.d/60-net.rules
~]# vim /etc/udev/rules.d/60-net.rules SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:c7:e2:04", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:39:e7:3c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
- Una vez preparados los nuevos nombres de los interfaces debemos modificar los archivos de configuración actuales para que encajen con los nuevos nombres.
/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet" DEVICE="eth0" ONBOOT="yes" IPADDR="192.168.1.120" PREFIX="24" GATEWAY="192.168.1.1" DNS1="8.8.8.8" NM_CONTROLLED="no"
/etc/sysconfig/network-scripts/ifcfg-eth1
TYPE="Ethernet" DEVICE="eth1" ONBOOT="yes" IPADDR="192.168.1.121" PREFIX="24" GATEWAY="192.168.1.1" DNS1="8.8.8.8" NM_CONTROLLED="no"
- Ya con los archivos de configuración preparados para su uso procederemos a reiniciar el sistema.
Después de esto deberíamos poder tener el esquema de nombres antiguo operativo en nuestro nuevo sistema. De todos modos, como suele pasar en el mundo de la informática, pequeños detalles pueden hacer que sigamos sin ver los interfaces renombrados. Por poner un ejemplo os cuento un caso que me he encontrado hace poco.
Experiencia personal
Como muchos de vosotros, para mis experimentos, hago uso de todo tipo de técnicas de virtualización con distintos tipos de tecnologías. En mi caso estaba probando un servidor CentOS 7 en un host con virtualización por KVM. Para las pruebas necesitaba utilizar multiples interfaces de red, y con las prisas por empezar a meterme en materia no me pare a mirar los parámetros de configuración. Pues resulto que el segundo interfaz de red virtual se agrego como un dispositivo rtl8139. Por costumbre me gusta renombrar los interfaces de red a la convención antigua (manias que tiene uno) y me encontré con que la primera si que se renombraba sin problemas pero la segunda no. La solución, una vez que sabes lo que tienes que buscar, es muy sencilla, la configuración de udev no coincidía con el interfaz en cuestión. Si tenéis algún problema renombrando interfaces revisad que a configuración de /etc/udev/rules.d/60-net.rules coincide con los parámetros de la interfaz en cuestión. Para ello os pongo un par de comandos para ello:
~]# ls -l /sys/class/net/ total 0 lrwxrwxrwx. 1 root root 0 Aug 27 06:12 ens9 -> ../../devices/pci0000:00/0000:00:09.0/net/ens9 lrwxrwxrwx. 1 root root 0 Aug 27 06:12 eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0 lrwxrwxrwx. 1 root root 0 Aug 27 06:12 lo -> ../../devices/virtual/net/lo
~]# udevadm info -a -p /sys/class/net/ens9 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:09.0/net/ens9': KERNEL=="ens9" SUBSYSTEM=="net" DRIVER=="" ATTR{mtu}=="1500" ATTR{type}=="1" ATTR{netdev_group}=="0" ATTR{flags}=="0x1003" ATTR{speed}=="100" ATTR{dormant}=="0" ATTR{addr_assign_type}=="0" ATTR{dev_id}=="0x0" ATTR{duplex}=="full" ATTR{gro_flush_timeout}=="0" ATTR{iflink}=="3" ATTR{addr_len}=="6" ATTR{address}=="52:54:00:39:e7:3c" ATTR{operstate}=="up" ATTR{broadcast}=="ff:ff:ff:ff:ff:ff" ATTR{tx_queue_len}=="1000" ATTR{dev_port}=="0" ATTR{ifalias}=="" ATTR{ifindex}=="3" ATTR{link_mode}=="0" ATTR{carrier}=="1" looking at parent device '/devices/pci0000:00/0000:00:09.0': KERNELS=="0000:00:09.0" SUBSYSTEMS=="pci" DRIVERS=="8139cp" ATTRS{irq}=="10" ATTRS{subsystem_vendor}=="0x1af4" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x020000" ATTRS{driver_override}=="(null)" ATTRS{consistent_dma_mask_bits}=="64" ATTRS{dma_mask_bits}=="64" ATTRS{local_cpus}=="f" ATTRS{device}=="0x8139" ATTRS{enable}=="1" ATTRS{msi_bus}=="" ATTRS{local_cpulist}=="0-3" ATTRS{vendor}=="0x10ec" ATTRS{subsystem_device}=="0x1100" ATTRS{numa_node}=="-1" ATTRS{d3cold_allowed}=="0" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""