Como configurar 'eth0' para tentar novamente 'dhclient' quando desconectado e plugado?

10

Estou trabalhando em um gadget do Linux.

Eu quero que ele receba o DHCP se eu conectar o cabo de rede depois que ele já tiver sido inicializado ou se o cabo de rede estiver desconectado e conectado novamente.

Uma solução é executar um script como este (que funciona, btw):

#!/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

No entanto, tenho uma sensação profunda no meu dedinho que me diz que há uma maneira melhor de lidar com eventos hotplug para o cabo ethernet.

    
por CoolAJ86 07.09.2011 / 19:08

4 respostas

8

netplug

netplug é a solução com a qual eu fui. ifplugd pode funcionar igualmente bem.

Instalação

sudo apt-get install netplug

Configuração da Interface

cat /etc/netplug/netplugd.conf
eth*

Configuração de evento

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

Teste

/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
    
por 07.09.2011 / 21:22
4

ifplugd lida muito bem com esta situação:

ifplugd is a Linux daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled. This is useful on laptops with onboard network adapters, since it will only configure the interface when a cable is really connected.

ifplugd interfaces with your distribution's native network configuration utilities.

Some features:

  • Uses your distribution's native ifup/ifdown programs.
  • [...]
  • Supports the Linux SIOCETHTOOL (newer, aka ethtool API), SIOCGMIIREG (older, aka mii-diag/mii-tool API) and SIOCDEVPRIVATE (oldest, aka mii-tool API) ioctl()s for getting link status. Release 0.24 introduces support for link detection with the IFF_RUNNING interface flag.
  • [...]
  • Can be configured to ignore short "unplugged" periods (-d option) or short "plugged" periods(-u option)
  • [...]
  • Compatibility mode for network devices which do not support cable detection (-F option)
    
por 07.09.2011 / 19:55
4

Sugiro usar ifplugd sobre netplugd , pois funciona melhor e é mantido ativamente.

ifplugd is a Linux daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled. This is useful on laptops with onboard network adapters, since it will only configure the interface when a cable is really connected.

    
por 05.11.2012 / 15:58
2

Usando este software meu para configuração de rede, é muito fácil.

link

O seguinte programa de DNT serve. Também mostra como você pode estender a configuração, neste caso executando algo quando a rede sobe / desce.

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);
}

Observe que isso não apenas manipulará o cabo de rede sendo conectado ou desconectado, mas também a própria interface de rede aparecendo e desaparecendo (útil se for USB).

A vantagem de usar o NCD em comparação com outros softwares como o ifplugd é que seu design permite uma grande flexibilidade. Ele basicamente permite que você programe sua própria configuração de rede, em vez de se limitar a um conjunto limitado de recursos codificados.

UPDATE: Eu fiz pacotes do Ubuntu para BadVPN e NCD. Atualizei o wiki com instruções de instalação e uso para o Ubuntu também: link

    
por 07.09.2011 / 20:04

Tags