¿Cómo detecta automáticamente una nueva tarjeta de red en CentOS 6 / RedHat?

46

Estoy usando CentOS 6 en un entorno virtual. Al clonar una versión virtual de CentOS, los viejos adaptadores eth se "eliminan" y se reemplazan por otros nuevos y direcciones MAC netas. Sin embargo, los archivos ifcfg-ethn todavía existen. Estoy tratando de descubrir cómo hacer que CentOS vuelva a escanear y recrear automáticamente los adaptadores de red / archivos eth, tal como sucedió en la instalación.

De lo contrario, me queda el proceso tedioso como se describe aquí: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

Sé que hay una forma rápida de hacer esto en la GUI, pero estamos usando un servidor, por lo que la GUI no se aplica en este caso. ¿Ayuda?

Editar: @OldWolf sugirió Kudzu, sin embargo, Kudzu se ha eliminado a partir de Centos 5, así que preferiría evitar eso. Hay un procedimiento que Linux ejecuta en la instalación inicial: ¿alguien puede ayudarme a descubrir qué es eso para que pueda activarlo manualmente?

Joshua
fuente

Respuestas:

52

Con CentOS 6 todo lo maneja udev ahora. Entra /etc/udev/rules.dy elimina el 70-persistent-net.rulesarchivo y reinicia. Si lo abre con anterioridad, lo más probable es que vea el NIC MAC original en la lista eth0y el nuevo como eth1.

Ahora necesita editar /etc/sysconfig/network-scripts/ifcfg-eth0y actualizar manualmente al MAC de su nueva tarjeta NIC.

La eliminación del archivo obliga al proceso de detección a ejecutarse nuevamente en el arranque sin que quede equipaje del proceso de clonación, es decir, las antiguas direcciones MAC de NIC.

Tengo que hacerlo con mis clones CentOS 6 en VMware ESXi 4.1 todo el tiempo. Es un dolor que Kudzu lo manejara en el pasado con versiones anteriores.

Tracy Carlton
fuente
2
Sonaba maravilloso, pero no funcionó como lo describiste. El antiguo archivo ifcfg-eth0 todavía estaba allí, con la dirección MAC original, etc., en lugar de la nueva correcta.
Joshua
2
Lo siento, sí, lo había olvidado. También debe actualizar MANUALMENTE la dirección mac en ifcfg-eth0, lo siento. Eso lo hará funcionar. Puede haber una manera más fácil, pero aún no la he encontrado ...
Tracy Carlton
Este fue un buen comienzo. Parece que podría ser posible escribir un script que automatice el proceso, incluso los bits manuales descritos, en el arranque. El problema es activar el script solo después de que la máquina ha sido clonada / movida. Todavía no hay una respuesta completa a esto ...
Joshua
55
Entra /etc/udev/rules.dy elimina el 70-persistent-net.rulesarchivo y NO reinicies. Ingrese /etc/sysconfig/network-scripts/ifcfg-eth0y actualice manualmente al MAC de su nueva tarjeta NIC. Reiniciar y la red debería cobrar vida.
2
@ user151091 En lugar de reiniciar, start_udevluego service network restarttrabajó para mí.
doshea
5

También puede usar esta herramienta (esta no es una herramienta GUI, su herramienta TUI, interfaz de usuario basada en texto)

[root @ localhost ~] # system-config-network-tui

Escriba el comando anterior y presione Entrar

Entonces aparecerá esta pantalla

ingrese la descripción de la imagen aquí

Seleccione Configuración del dispositivo y presione Entrar

Entonces aparecerá esta pantalla

ingrese la descripción de la imagen aquí

Aquí eth0 se refiere /etc/sysconfig/network-scripts/ifcfg-eth0

Cualquiera que sea la edición realizada en eth0eso afectará al ifcfg-eth0archivo

max
fuente
Si bien esta podría ser una respuesta útil para algunas personas / casos, el objetivo de esto era hacer un script o automatizar la configuración de los adaptadores de red, lo que no se puede hacer a través de una TUI / GUI. Lea la publicación original: "Estoy tratando de descubrir cómo hacer que CentOS vuelva a escanear y recrear automáticamente los adaptadores de red / archivos eth, tal como sucedió en la instalación".
Joshua
@Joshua lo siento ... + 1
máximo
@max, system-config-networktambién parece abrir esta interfaz.
Acumenus
2
@QiFan Pruebe este comandoyum install system-config-network-tui
máximo
1
@QiFan Para averiguar qué paquete contiene ese comando, intente estoyum whatprovides */system-config-network-tui
máximo
4

Elimine el archivo de reglas persistentes:

rm /etc/udev/rules.d/70-persistent-net.rules

Editar ifcfg-eth0:

nano /etc/sysconfig/network-scripts/ifcfg-eth0

RETIRE la HWADDRlínea por completo (o cámbiela para que coincida con la nueva dirección MAC de su NIC).

Reinicie su sistema:

reboot

Si vuelve a cambiar la NIC, solo repita los pasos 1 y 3.

Martin Anderson
fuente
¿Realmente necesitas reiniciar? ¿Por qué no simplemente reiniciar el servicio de red?
vgoff
Si bien esta podría ser una respuesta útil para algunas personas / casos, el objetivo de esto era hacer un script o automatizar la configuración de los adaptadores de red. De la publicación original: "Estoy tratando de descubrir cómo hacer que CentOS vuelva a escanear y recrear automáticamente los adaptadores de red / archivos eth, tal como lo hizo en la instalación".
Joshua
@vgoff sí, reiniciar el servicio de red, obviamente, funciona bien :) Tal vez se está refiriendo a reiniciar el dispositivo de red en sí misma, por ejemplo, "ifup eth0", etc.
Joshua
Eso puede ser, pero él dice 'sistema' no 'dispositivo'.
vgoff
Puede que me equivoque, pero creo que el "reinicio de la red de servicio" no hará que se cambie el nombre de los adaptadores después de eliminar el archivo de reglas persistentes, y que se requiere un reinicio o "start_udev" para cambiar el nombre.
doshea
4

Modificar archivos después de clonar no funcionaría para mi caso de uso, por lo tanto, resolví el problema de la siguiente manera.

Debe editar dos archivos, eliminando las referencias a las direcciones Mac en cada uno:

/etc/sysconfig/network-scripts/ifcfg-eth0 - elimine la línea HWADDR =.

/etc/udev/rules.d/70-persistent-net.rules - eliminar de ATTR {dirección} == hasta e incluyendo la siguiente coma.

Ahora, cuando clone la VM y cambie la dirección de red, la red funcionará ya que la dirección de Mac nunca se escribe en ninguno de los archivos.

Scot Inscore
fuente
Esto funcionó para mí: como se señaló, la dirección MAC nunca se vuelve a escribir en ninguno de los archivos, por lo que puede seguir cambiándola y su interfaz seguirá siendo "eth0" con la misma configuración. Sin embargo, esto parece funcionar solo si tiene un adaptador de red, de lo contrario, tuve un largo retraso de arranque en "Iniciando udev:" y mi segundo dispositivo se llamó "rename3", presumiblemente porque las reglas sugerían que ambos dispositivos deberían llamarse "eth0" ".
doshea
Solución viable para 1 adaptador. Además, no olvide hacer el tipo de conexión como Bridge en la configuración de red.
Cherry
3

Creo y elimino tantas máquinas virtuales CentOS 6 que escribí algunos Bashfu para arreglar eth0 al clonar en VirtualBox.

   [root@jp-xm-base ~]# cat fixeth0.sh
if grep -q eth1 /etc/udev/rules.d/70-persistent-net.rules; then
   sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules;
   sed -i 's/eth1/eth0/g' /etc/udev/rules.d/70-persistent-net.rules;
   ETHERNET=`grep eth0 /etc/udev/rules.d/70-persistent-net.rules | awk -F"," '{print $4}' | awk -F"\"" '{print $2}'`;
   echo Ethernet Addr: $ETHERNET;
   sed -i 's/HWADDR=".*"/HWADDR="'$ETHERNET'"/' /etc/sysconfig/network-scripts/ifcfg-eth0;
   /sbin/start_udev
   /sbin/service network restart;
fi
Electrawn
fuente
1

Si su único problema es la dirección mac, puede ejecutar algo similar a

TEST=`ifconfig | grep eth | awk '{ print $5}'`; sed "s/HWADDR.*/HWADDR\=$TEST/g" ifcfg-eth0 > TMP; mv TMP ifcfg-eth0

Para actualizar la entrada HWADDR.

Editar: dado que parece que el problema es un cambio real en el hardware virtual, puede intentar lo siguiente. (no probado y referenciado desde aquí )

edite / etc / sysconfig / hwconf y elimine toda referencia a la NIC anterior y vuelva a ejecutar kudzu para ver si detecta el nuevo hardware. Es posible que deba reiniciar.

OldWolf
fuente
Intenté cambiar manualmente la dirección MAC en eth0, por ejemplo, pero todavía no funcionó. Los intentos posteriores de "red de servicio de recarga forzada", "ifup eth0", etc. siempre terminarían en "El dispositivo eth0 no parece estar presente ..." ¿Ayuda?
Joshua
¿Qué tipo de virtualización está utilizando y cómo clonó el sistema?
OldWolf
VirtualBox, pero no creo que la virtualización importe. Esto debería ser como cerrar una caja física, eliminar los adaptadores de red existentes y agregar diferentes.
Joshua
@Josh ¿Dónde están los archivos ifcfg- * que está editando, ya que posiblemente hay tres conjuntos? Consulte / etc / sysconfig / network-scripts y / etc / sysconfig / networking / devices y / etc / sysconfig / networking / profiles / default ( Sí, lo sé, parece tener algo que ver con las herramientas que usas para configurar los adaptadores). Los primeros deben ser los que marcan la diferencia, pero es posible que también deba tratar con los demás.
Linker3000
1
La razón por la que pregunté y porque el tipo de virtualización es importante es que determina cómo se ve el proceso de clonación. Un clon de VMware en el mismo host no cambiaría el hardware de la red virtual a menos que se lo indique. En su caso, el problema no es la dirección mac ni el proceso de clonación, es que está cambiando el hardware virtual.
OldWolf
1

No estoy usando Vmware sino KVM con virsh: esto es lo que he hecho.

Creé una imagen 'base' con CentOS 6.4, esta es la fuente de todos mis clones. Después del primer arranque, creé un script como este

cat /etc/init.d/manglemac 
#!/bin/bash
#
# manglemac        This starts and stops mangle-mac
#
# chkconfig: 2345 11 88
# description: This obtains tha mac of eth0 and writes into ifcfg

mac=$(grep -H . /sys/class/net/*/address | grep eth0 | cut   -d ':' -f2-10)
match_mac=$(grep $mac /etc/sysconfig/network-scripts/ifcfg-eth0)

if [ -z "$match_mac" ];
then
   echo HWADDR=$mac >> /etc/sysconfig/network-scripts/ifcfg-eth0
fi

Lo agregó a init con

chkconfig --add manglemac

Eliminó todas las referencias en / etc / sysconfig / network-scripts / ifcfg-eth0 de HWADDR o UUID, también eliminó las reglas udev de /etc/udev/rules.d/70-persistent-net.rules.

En este punto apagué la máquina y comencé a clonar. Todo funciona bien. El script que hice es muy simple pero funciona bien, sin embargo, hace algunas suposiciones sobre su configuración para la red (solo eth0).

Espero te sirva de ayuda.

silviud
fuente
0

Estaba tratando con múltiples NIC y nada de lo anterior funcionó para mí (VMware Fusion 7 / VMware 6 y abajo), así que escribí un script. El tarball está aquí .

Aquí está lo READMEque viene con esto:

  • Este tarball y los scripts relacionados cambiarán la dirección MAC de su máquina VMware CentOS 6 o inferior recientemente clonada (sin systemd).
  • Todo lo que necesita hacer en la máquina lo clonará solo una vez:

    1. Instalar en pc lshw
    2. reemplace la dirección MAC en todos sus /etc/sysconfig/network-scripts/ifcfg-eth?con MACDADDY num donde num es el número de la interfaz de red. Debe seguir el patrón de nomenclatura para el archivo.
    3. correr:

      chckconfig change_mac_address on
      

      Esto debería agregar enlaces sym en los niveles de ejecución adecuados especificados en el archivo

    4. Clone la máquina como de costumbre y enciéndala. Debería cambiar la dirección MAC en cada uno de sus ifcfg-eth?archivos,
      • borrar el archivo udev,
      • vuelva a escanear su dispositivo e1000,
      • y reiniciar la red

Problemas:

  • No estoy seguro de por qué, pero a veces es necesario reiniciar la red por segunda vez para que se reconozcan todas las NIC:

    /etc/init.d/network restart
    

    Se corrigió esto poniendo un sleep 20al principio de/etc/init.d/network

  • Esto no ha sido un problema para mí, pero el script se basa en lshwdevolver las NIC en el mismo orden queifcfg-eth?
  • Esto supone que su (s) dispositivo (s) NIC son e1000. VMware estándar?
  • Podría valer la pena cambiar la numeración de los ifcfg-eth?archivos para que coincidan con lo que lshwestá dando vuelta en el improbable caso de que no funciona y que está haciendo un montón de máquinas con una gran cantidad de tarjetas de red.
  • Con una NIC debería funcionar.
  • Después del primer inicio, /usr/bin/change_mac_address.plse mueve a/usr/bin/change_mac_address.pl.old
  • Esto evitará que se ejecute en cada reinicio a pesar de que no hará nada si no hay MACDADDY? en tusifcfg-eth?
  • También puedes y probablemente deberías correr

    chkconfig change_mac_address off
    
FFQ
fuente