¿Cómo configurar `eth0` para volver a intentar` dhclient` cuando se desconecta y se vuelve a conectar?


12

Estoy trabajando en un dispositivo de Linux.

Quiero que obtenga DHCP si conecto el cable de red después de que ya se haya iniciado o si el cable de red se desconectó y se volvió a enchufar.

Una solución es ejecutar un script como este (que funciona, por cierto):

#!/bin/bash

NET_STATUS='different'

while true
do
  NEW_NET_STATUS=`ifconfig | grep RUNNING | grep -v LOOPBACK`
  if [ "${NEW_NET_STATUS}" = "${NET_STATUS}" ]
  then
    echo "no change"
    sleep 1
    continue
  fi
  NET_STATUS=${NEW_NET_STATUS}
  if [ "${NET_STATUS}" ]
  then
    echo "cable plugged in"
  else
    echo "cable unplugged"
  fi
  sleep 1
done

Sin embargo, tengo una sensación en el fondo de mi dedo pequeño que me dice que hay una mejor manera de lidiar con los eventos de conexión en caliente para el cable de Ethernet.


1
Desafortunadamente partir de 2016 tanto ifplugdy netplugdaparecerá sin mantenimiento. Sin embargo, esta pregunta similar parece tener una buena respuesta (simple) usando las reglas de udev: no se necesita un paquete adicional. serverfault.com/a/312296/275255
Thom Nichols

Cambiar autoa allow-hotplugen interfaces.
Ken Sharp

Respuestas:


9

netplug

netpluges la solución con la que fui. ifplugdpuede funcionar igual de bien.

Instalación

sudo apt-get install netplug

Configuración de la interfaz

cat /etc/netplug/netplugd.conf
eth*

Configuración de eventos

cat /etc/netplug/netplug
#!/bin/sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH

dev="$1"
action="$2"

case "$action" in
in)
    echo "$dev : $action : plugged in" >> /tmp/netplug.log
    ;;
out)
    echo "$dev : $action : unplugged" >> /tmp/netplug.log
    ;;
probe)
    echo "$dev : $action : probed" >> /tmp/netplug.log
    ;;
*)
    echo "$dev : $action : I feel violated" >> /tmp/netplug.log
    exit 1
    ;;
esac

Pruebas

/etc/init.d/netplug stop
/etc/init.d/netplug start

cat /tmp/netplug.log
eth0 : probe : probed
eth1 : probe : probed
...
eth15 : probe : probed
eth0 : in : plugged in

5

ifplugd maneja muy bien esta situación:

ifplugdes un demonio de Linux que configurará automáticamente su dispositivo ethernet cuando se conecta un cable y desconfigurará automáticamente si se tira del cable. Esto es útil en computadoras portátiles con adaptadores de red integrados, ya que solo configurará la interfaz cuando un cable esté realmente conectado.

ifplugd interactúa con las utilidades de configuración de red nativas de su distribución.

Algunas caracteristicas:

  • Utiliza los programas ifup/ nativos de su distribución ifdown.
  • [...]
  • Admite Linux SIOCETHTOOL(más reciente, también conocido como ethtoolAPI), SIOCGMIIREG(más antiguo, también conocido como mii-diag/ mii-toolAPI) y SIOCDEVPRIVATE(más antiguo, también conocido como mii-toolAPI) ioctl()para obtener el estado del enlace. La versión 0.24 presenta soporte para la detección de enlaces con el IFF_RUNNINGindicador de interfaz.
  • [...]
  • Se puede configurar para ignorar períodos cortos "desconectados" ( -dopción) o períodos cortos "conectados" ( -uopción)
  • [...]
  • Modo de compatibilidad para dispositivos de red que no admiten detección de cable ( -Fopción)

Mi LUG local me lo indicó netplug, así que en su lugar fui con eso. ¡Gracias!
CoolAJ86

Esto hizo el truco para mí con una advertencia. Con netplugdpermitido, me encontré con que tenía que eliminar auto <interface>a partir /etc/network/interfaces. Si no, tuve que enchufar el cable Ethernet, quitarlo y enchufarlo nuevamente antes de obtener una dirección IP de DHCP. Con esta línea eliminada, obtengo una dirección IP de DHCP en el primer evento de complemento o en el arranque si el cable ya estaba enchufado (IP en el arranque funcionó con o sin la línea eliminada cuando ifplugdestaba habilitada).
MrMas

5

Sugeriría usar ifplugd sobre netplugd, ya que funciona mejor y se mantiene activamente.

ifplugd es un demonio de Linux que configurará automáticamente su dispositivo ethernet cuando se conecta un cable y desconfigurará automáticamente si se tira del cable. Esto es útil en computadoras portátiles con adaptadores de red integrados, ya que solo configurará la interfaz cuando un cable esté realmente conectado.


2

Usar este software mío para la configuración de la red es muy fácil.

http://code.google.com/p/badvpn/wiki/NCD

El siguiente programa de ENT servirá. También muestra cómo puede extender la configuración, en este caso ejecutando algo cuando la red sube / baja.

process eth0 {
    # Set device.
    var("eth0") dev;

    # Wait for device to appear, set it up, and wait for cable to be plugged in.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # DHCP configuration.
    # net.ipv4.dhcp() will block here until it obtaines an IP address.
    # It doesn't check the obtained address in any way,
    # so as a basic security measure, do not proceed if it is local.
    net.ipv4.dhcp(dev) dhcp;
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    # Assign IP address to interface, as obtained by DHCP.
    net.ipv4.addr(dev, dhcp.addr, dhcp.prefix);

    # Add default route.
    net.ipv4.route("0.0.0.0", "0", dhcp.gateway, "20", dev);

    # Add DNS servers.
    net.dns(dhcp.dns_servers, "20");

    # Run an external program when network comes up or goes down.
    list("/some/program/to/run/when/up", "argument") do;
    list("/some/program/to/run/when/down", "argument") undo;
    run(do, undo);
}

Tenga en cuenta que esto no solo manejará el cable de red que está enchufado o desconectado, sino también la interfaz de red que aparece y desaparece (útil si es USB).

La ventaja de usar NCD en comparación con otro software como ifplugd es que su diseño permite una gran flexibilidad. Básicamente le permite programar su propia configuración de red, en lugar de limitarse a un conjunto limitado de capacidades codificadas.

ACTUALIZACIÓN: hice paquetes de Ubuntu para BadVPN y NCD. También actualicé el wiki con instrucciones de instalación y uso para Ubuntu: http://code.google.com/p/badvpn/wiki/NCD#Running_it


Esto realmente parece útil, ¿crees que lo conseguirás en los repositorios de Ubuntu / Fedora?
CoolAJ86

Actualmente tengo paquetes para Arch y Gentoo, y nada más porque no uso otras distribuciones. Puedo encontrar algo de tiempo para hacer paquetes para otras distribuciones. Sin embargo, es fácil compilarlo e instalarlo en / usr / local o algo así, y crear un script de inicio simple para iniciarlo.
Ambroz Bizjak

Paquetes de Ubuntu realizados, según su solicitud :)
Ambroz Bizjak
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.