Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

jueves, 11 de febrero de 2016

Nombres de Interfaz de Red Predictivos (cambios de eth0 a enp2s0, etc)

systemd es un conjunto de demonios o daemons de administración de sistema, bibliotecas y herramientas diseñados como una plataforma de administración y configuración central para interactuar con el núcleo del Sistema operativoGNU/Linux. Descrito por sus autores como un "bloque de construcción básico" para un sistema operativo,4 systemd se puede utilizar como un sistema de inicio de Linux (el proceso init llamado por el núcleo o kernel de Linux para inicializar el espacio de usuario durante el proceso de arranque de Linux y gestionar posteriormente todos los demás procesos). El nombre systemd se adhiere a la convención Unix de distinguir los demonios fácilmente por tener la letra d como la última letra del nombre de archivo.5
Se desarrolló systemd para reemplazar el sistema de inicio (init) heredado de los sistemas operativos estilo UNIXSystem V y Berkeley Software Distribution (BSD). En el proceso de arranque en Linux, es el primer proceso que se ejecuta en el espacio de usuario, por lo tanto, también es el proceso padre de todos los procesos hijos en el espacio de usuario. systemd se diseñó para el núcleo de Linux y programado exclusivamente para la API de Linux. Escrito porLennart Poettering1 y se publica como Software_libre_y_de_código_abierto bajo los términos de laGNU_General_Public_License (LGPL) versión 2.1 o posterior.6 Uno de los principales objetivos de systemd es unificar configuraciones básicas de Linux y los comportamientos de servicios en todas las distribuciones.7
(Fuente Wikipedia)


















(Fuente freedesktop.org)


¿Y que tiene que ver todo esto con que ahora mi interfaz de red se llame enp2s0 o enx78e7d1ea46da en vez de eth0? Pues bien, todo esto es a causa de la nueva versión de systemd. Una modificación en este gestor de demonios que afecta a partir de la versión 197. A partir de dicha versión, systemd/udev asigna automáticamente los nombres de interfaz de red para Ethernet, WLAN y WWAN. Desde esta modificación se ha optado por una nomenclatura segun las características físicas (hardware):

1. Nombres que incorporan información del Firmware o BIOS del hardware (ejemplo:ENO1).
2. Nombres que incorporan información del Firmware o BIOS que proporciona el slot PCI Express (ejemplo: ens1)
3. Nombres que incorporan ubicación física del conector (ejemplo: enp2s0)
4. Nombres que incorporan la dirección MAC de las interfaces (ejemplo:enx78f8d1ea46da)
5. El estilo clásico del kernel (ejemplo: eth1)
(Fuente detrás del pingüíno y freedesktop.org)

Sabiendo esta información, vamos a dejar de quejarnos del cambio de nombre (porque despues de tantos años es un cambio al que seguro somos algo reacios) y vamos a empezar a 'jugar'. Vamos a averiguar que entiende udev de nuestro dispositivo de red (por ejemplo, eth0):

eithel@inside:~$ udevadm info -e | grep -A 9 ^P.*eth0
P: /devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8P67 and other motherboards)
E: ID_MODEL_ID=0x8168
E: ID_NET_DRIVER=r8169
E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
E: ID_NET_NAME=enp4s0
E: ID_NET_NAME_MAC=enxf46d04ae330e

Segun esta lectura, mi eth0 con la nueva nomenclatura se llamaría enp4s0.

Vale.... pero esto de que es predictivo.... ¿Por que? . Bueno, porque ahora tenemos que entender que significa el nombre que le ha dado. Esto lo podemos ver en las fuentes src/udev/udev-builtin-net_id.c
en donde veremos que significa cada cosa:

/*
 * Predictable network interface device names based on:
 *  - firmware/bios-provided index numbers for on-board devices
 *  - firmware-provided pci-express hotplug slot index number
 *  - physical/geographical location of the hardware
 *  - the interface's MAC address
 *
 * http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
 *
 * Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan
 *
 * Type of names:
 *   b                             -- BCMA bus core number
 *   ccw                             -- CCW bus group name
 *   o[d]                 -- on-board device index number
 *   s[f][d]     -- hotplug slot index number
 *   x                                -- MAC address
 *   [P]ps[f][d]
 *                                         -- PCI geographical location
 *   [P]ps[f][u][..][c][i]
 *                                         -- USB port number chain


Entonces ahora sabemos que si mi eth0 se llama ahora enp4s0 es porque es un ethernet, en el bus 4 y slot 0.

Podemos comprobar mediante lspci que efectivamente alli tengo una tarjeta de red:

lspci -s 04:00
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

*He buscado 04:00 ya que la salida de udevadm de más arriba, en la linea que empezaba por P: así me indicaba donde encontrarlo.

Bueeeno, pues ahora ya esta. Ya se como funciona. Pero puedo decidir no usar la nueva nomenclatura. ¿Puedo cambiarlo? . La respuesta es, como casi todo en GNU/Linux, que si. Vamos a ver como :

1.- Deshabilitando el enlace de asignaciones a nombres fijos:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

2.- Crearse tu propio esquema de nombrado. Esto lo haremos un archivo .link en /etc/systemd/network . Para ello mirad systemd.link(5)

3.- Decirle al kernel que no lo use mediante el parámetro net.ifnames=0 en /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

y luego actualizar grub mediante sudo update-grub

Espero que os haya ayudado a entender el porqué del cambio, como aprovecharse de las nuevas funcionabilidades y, en caso de que no estemos agusto o por compatibilidades de scripts, etc no podamos usarlo, como deshabilitarlo.


Enlaces de interes

  • https://www.freedesktop.org/wiki/Software/systemd/
  • https://es.wikipedia.org/wiki/Freedesktop.org

Algunos ejemplos (en ingles)

emN
Ethernet interface on the motherboard, where N is the number of the interface starting from 1.
pSpP
Network interface on a PCI card, where S is the slot number and P is the port number.
pSpP_V
Virtual interface, where S is the slot number, P is the port number, and V is the virtual interface number.
If biosdevname is set to 0 (the default), systemd naming assigns the prefixes, enwl, and ww to Ethernet, wireless LAN, and wireless WAN interfaces respectively. The prefix is followed by a suffix based on the hardware configuration, system bus configuration, or MAC address of the device:
oN
Onboard device with index number N.
pBsS[fF][dD]
PCI device with bus number B, slot number S, function number F, and device ID D.
pBsS[fF][uP]...[cC][iI]
USB device with bus number B, slot number S, function number F, port number P, configuration number C, and interface number I.
sS[fF][dD]
Hot-plug device with slot number S, function number F, and device ID D.
xM
Device with MAC address M.

That u don't know what you've got 'til it's gone