Comment configurer `eth0` pour réessayer` dhclient` lorsqu'il est débranché et rebranché?

12

Je travaille sur un gadget Linux.

Je veux qu'il obtienne DHCP si je branche le câble réseau après qu'il a déjà démarré ou si le câble réseau est débranché et rebranché.

Une solution consiste à exécuter un script comme celui-ci (qui fonctionne, 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

Cependant, j'ai une sensation au fond de mon petit orteil qui me dit qu'il existe une meilleure façon de gérer les événements de connexion à chaud pour le câble Ethernet.

CoolAJ86
la source
1
Malheureusement , à partir de 2016 à la fois ifplugdet netplugdapparaissent unmaintained. Cependant, cette question similaire semble avoir une bonne réponse (simple) en utilisant les règles udev - aucun package supplémentaire n'est nécessaire. serverfault.com/a/312296/275255
Thom Nichols
Passez autoà allow-hotplugin interfaces.
Ken Sharp

Réponses:

9

netplug

netplugest la solution que j'ai choisie. ifplugdpeut aussi bien fonctionner.

Installation

sudo apt-get install netplug

Configuration de l'interface

cat /etc/netplug/netplugd.conf
eth*

Configuration d'événement

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

Essai

/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
CoolAJ86
la source
5

ifplugd gère très bien cette situation:

ifplugdest un démon Linux qui configurera automatiquement votre périphérique Ethernet lorsqu'un câble est branché et le déconfigurera automatiquement si le câble est tiré. Ceci est utile sur les ordinateurs portables dotés d'adaptateurs réseau intégrés, car il ne configurera l'interface que lorsqu'un câble est réellement connecté.

ifplugd s'interface avec les utilitaires de configuration réseau natifs de votre distribution.

Certaines fonctionnalités:

  • Utilise les programmes ifup/ natifs de votre distribution ifdown.
  • [...]
  • Prend en charge les Linux SIOCETHTOOL(plus récent, aka ethtoolAPI), SIOCGMIIREG(plus ancien, aka mii-diag/ mii-toolAPI) et SIOCDEVPRIVATE(plus ancien, aka mii-toolAPI) ioctl()pour obtenir l'état du lien. La version 0.24 introduit la prise en charge de la détection de liens avec l' IFF_RUNNINGindicateur d'interface.
  • [...]
  • Peut être configuré pour ignorer les courtes périodes "débranchées" ( -doption) ou courtes "branché" ( -uoption)
  • [...]
  • Mode de compatibilité pour les périphériques réseau qui ne prennent pas en charge la détection de câble ( -Foption)
byronc
la source
Mon LUG local m'a dirigé vers netplug, donc je suis allé avec cela à la place. Merci!
CoolAJ86
Cela a fait l'affaire pour moi avec une mise en garde. Avec netplugdactivé, j'ai constaté que je devais retirer auto <interface>de /etc/network/interfaces. Sinon, j'ai dû brancher le câble Ethernet, le retirer et le rebrancher avant d'obtenir une adresse IP de DHCP. Avec cette ligne supprimée, j'obtiens une adresse IP de DHCP lors du premier événement de plug-in ou au démarrage si le câble était déjà branché (IP au démarrage fonctionnait avec ou sans la ligne supprimée lorsqu'elle ifplugdétait activée).
MrMas
5

Je suggère d'utiliser ifplugd sur netplugd car il fonctionne mieux et est activement maintenu.

ifplugd est un démon Linux qui configure automatiquement votre périphérique Ethernet lorsqu'un câble est branché et le déconfigure automatiquement si le câble est tiré. Ceci est utile sur les ordinateurs portables dotés d'adaptateurs réseau intégrés, car il ne configurera l'interface que lorsqu'un câble est réellement connecté.

NGRhodes
la source
2

En utilisant ce logiciel à moi pour la configuration du réseau, c'est très facile.

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

Le programme NCD suivant fera l'affaire. Il montre également comment vous pouvez étendre la configuration, dans ce cas en exécutant quelque chose lorsque le réseau monte / descend.

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

Notez que cela ne gérera pas seulement le câble réseau branché ou débranché, mais aussi l'interface réseau elle-même apparaissant et disparaissant (utile si c'est USB).

L'avantage d'utiliser NCD par rapport à d'autres logiciels comme ifplugd est que sa conception permet une grande flexibilité. Il vous permet essentiellement de programmer votre propre configuration réseau, au lieu d'être limité à un ensemble limité de capacités codées en dur.

MISE À JOUR: J'ai créé des packages Ubuntu pour BadVPN et NCD. J'ai également mis à jour le wiki avec les instructions d'installation et d'utilisation d'Ubuntu: http://code.google.com/p/badvpn/wiki/NCD#Running_it

Ambroz Bizjak
la source
Cela semble vraiment utile, pensez-vous que vous l'aurez dans les dépôts Ubuntu / Fedora?
CoolAJ86
Actuellement, j'ai des packages pour Arch et Gentoo, et rien d'autre parce que je n'utilise pas d'autres distributions. Je trouverai peut-être un peu de temps pour créer des packages pour d'autres distributions. Cependant, il est facile de simplement le compiler et de l'installer dans / usr / local ou quelque chose, et d'avoir créé un simple script d'initialisation pour le démarrer.
Ambroz Bizjak
Paquets Ubuntu terminés, selon votre demande :)
Ambroz Bizjak