Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 26 de octubre de 2015

Cómo cambiar la "ubicación" de los puertos de red en Linux

El pequeño post que relataré a continuación está especialmente dirigido a aquellos que está acostumbrados a trabajar con más de una interfaz de red física en Linux. Cualquiera que haya experimentado con varias interfaces de red sabrá que cada interfaz física de red tiene asignado una nomenclatura interna que comienza por eth (wlan y ath serían en caso de ser inalámbrica). Estas nomenclaturas son asignadas automáticametne a cada interfaz de red, siguiendo un orden que ,supuestamente, ya ha sido preestablecido a nivel de hardware... El problema con este supuesto es que no siempre es así: A veces el fabricante ha errado con el posicionamiento de los puertos de red (lo he visto más de una vez) o a veces la ubicación física de eth0 (que podría denominarse como la primera interfaz física de red) no se encuentra en una posición tan intuitiva como nos gustaría.


Este problema es bastante conocido y por suerte tiene una solución bastante sencilla: Cada puerto de red posee una mac en concreto, MAC que se asocia internamente con una nomenclatura interna fácilmente identificable: eth0, eth1, etc... Dicha interfaz puede ser configurada con gran facilidad gracias a multitud de recursos: desde el famoso Network Manager de Debian hasta la configuración "a pelo" en el fichero /etc/network/interfaces; pero las únicas modificaciones que se pueden realizar desde ambos pertenecen al ámbito de configuración de red (ip, mascara) nada con respecto a su ubicación física en el equipo...

Para alcanzar nuestro objetivo deberemos recurrir a un fichero bastante poco conocido pero que puede resultar realmente útil para todo lo relativo a las tarjetas físicas de red... Este fichero se denomina 70-persistent-net.rules, ubicado /etc/udev/rules.d y aloja las reglas referentes a las interfaces de red, desde su MAC a su nombre interno en el sistema. Cada línea del fichero en cuestión posee una estructura muy parecida a la siguiente:

SUBSYSTEM=="net",ACTION=="add", DRIVERS=="?*", ATTR{address}=="${MAC}", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="${nombre_interno}"

Aunque la estructura puede parecer compleja, en verdad únicamente hay tres valores que nos interesan en cada línea, estos valores son::
  • ATTR{address}: Aquí se mostraría la MAC del puerto de red detectado por el sistema; dicha MAC es un identificador único que posee cada interfaz de red.
  • KERNEL: Dependiendo del tipo de puerto de red detectado, el kernel lo asociará a un tipo de "grupo"... Las interfaces de red físicas siempre tienen la nomenclatura eth, más un número. Las inalámbricas suelen poseer la denominación wlan o ath, dependiendo del típo de tarjeta inalámbrica.
  • NAME: Aquí veríamos el nombre designado por sistema a la tarjeta de red (eth0, eth1, wlan0...). Dicho nombre será el que asociará el sistema con la tarjeta de red; por ejemplo eth0 estaría asociado a una MAC x, eth1 a una MAC y, etc...
Pongamos que tenemos este contenido dentro del fichero 70-persistent-net.rules:

  1. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0 (bnx2)
  2. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7b", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth0"
  3. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.1 (bnx2)
  4. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7c", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth1"

Si quisiesemos que la ubicación física de estas dos tarjetas se intercambiasen la una con la otra, simplemente habría que cambiar sus nombres de esta forma:


  1. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0 (bnx2)
  2. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7b", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth1"
  3. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.1 (bnx2)
  4. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7c", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth0"


Ahora únicamente con reiniciar el equipo podríamos disfrutar de las nuevas posiciones de nuestros puertos de red.

Espero que os resulte útil.

Saludos.

No hay comentarios :

Publicar un comentario