Wie konfiguriere ich "eth0", um "dhclient" erneut zu versuchen, wenn es ausgesteckt und neu angeschlossen wird?


12

Ich arbeite an einem Linux-Gadget.

Ich möchte, dass es DHCP erhält, wenn ich das Netzwerkkabel anschließe, nachdem es bereits hochgefahren wurde, oder wenn das Netzwerkkabel abgezogen und neu angeschlossen wurde.

Eine Lösung besteht darin, ein Skript wie dieses auszuführen (was übrigens funktioniert):

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

Ich habe jedoch tief in meinem kleinen Zeh ein Gefühl, das mir sagt, dass es einen besseren Weg gibt, mit Hotplug-Ereignissen für das Ethernet-Kabel umzugehen.


1
Leider ab 2016 beide ifplugdund netplugdscheinen nicht gepflegt zu sein. Diese ähnliche Frage scheint jedoch eine gute (einfache) Antwort mit udev-Regeln zu haben - es wird kein zusätzliches Paket benötigt. serverfault.com/a/312296/275255
Thom Nichols

Wechseln Sie autozu allow-hotplugin interfaces.
Ken Sharp

Antworten:


9

Netzstecker

netplugist die Lösung, mit der ich gegangen bin. ifplugdkann genauso gut funktionieren.

Installation

sudo apt-get install netplug

Schnittstellenkonfiguration

cat /etc/netplug/netplugd.conf
eth*

Ereigniskonfiguration

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

Testen

/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 geht sehr gut mit dieser Situation um:

ifplugdist ein Linux-Daemon, der Ihr Ethernet-Gerät automatisch konfiguriert, wenn ein Kabel eingesteckt ist, und es automatisch dekonfiguriert, wenn das Kabel gezogen wird. Dies ist bei Laptops mit integrierten Netzwerkadaptern nützlich, da die Schnittstelle nur konfiguriert wird, wenn ein Kabel wirklich angeschlossen ist.

ifplugd Schnittstellen zu den nativen Netzwerkkonfigurationsprogrammen Ihrer Distribution.

Einige Eigenschaften:

  • Verwendet die Native ifup/ ifdownProgramme Ihrer Distribution .
  • [...]
  • Unterstützt Linux SIOCETHTOOL(neuere, aka ethtoolAPI), SIOCGMIIREG(ältere, aka mii-diag/ mii-toolAPI) und SIOCDEVPRIVATE(älteste, aka mii-toolAPI) ioctl()s, um den Linkstatus zu erhalten. Release 0.24 IFF_RUNNINGbietet Unterstützung für die Verbindungserkennung mit dem Schnittstellenflag.
  • [...]
  • Kann so konfiguriert werden, dass kurze "Unplugged" -Perioden ( -dOption) oder kurze "Plugged" -Perioden ( -uOption) ignoriert werden.
  • [...]
  • Kompatibilitätsmodus für Netzwerkgeräte, die keine Kabelerkennung unterstützen ( -FOption)

Meine örtliche LUG hat mich angewiesen netplug, also habe ich mich stattdessen dafür entschieden. Vielen Dank!
CoolAJ86

Dies hat den Trick für mich mit einer Einschränkung getan. Mit netplugdaktiviert ist , fand ich , dass ich entfernen musste auto <interface>aus /etc/network/interfaces. Wenn nicht, musste ich das Ethernet-Kabel anschließen, entfernen und erneut anschließen, bevor ich eine IP-Adresse von DHCP erhielt. Wenn diese Leitung entfernt wird, erhalte ich beim ersten Plug-In-Ereignis oder beim Booten eine IP-Adresse von DHCP, wenn das Kabel bereits eingesteckt war (IP beim Booten funktionierte mit oder ohne die Leitung, die bei ifplugdAktivierung entfernt wurde).
MrMas

5

Ich würde vorschlagen, ifplugd über netplugd zu verwenden, da es besser funktioniert und aktiv gewartet wird.

ifplugd ist ein Linux-Daemon, der Ihr Ethernet-Gerät automatisch konfiguriert, wenn ein Kabel eingesteckt ist, und es automatisch dekonfiguriert, wenn das Kabel gezogen wird. Dies ist bei Laptops mit integrierten Netzwerkadaptern nützlich, da die Schnittstelle nur konfiguriert wird, wenn ein Kabel wirklich angeschlossen ist.


2

Mit meiner Software für die Netzwerkkonfiguration ist das sehr einfach.

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

Das folgende NCD-Programm reicht aus. Es wird auch gezeigt, wie Sie die Konfiguration erweitern können, in diesem Fall indem Sie etwas ausführen, wenn das Netzwerk hoch / runter geht.

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

Beachten Sie, dass dies nicht nur das Netzwerkkabel behandelt, das eingesteckt oder herausgezogen wird, sondern auch die Netzwerkschnittstelle selbst, die angezeigt wird und verschwindet (nützlich, wenn es sich um USB handelt).

Der Vorteil der Verwendung von NCD im Vergleich zu anderer Software wie ifplugd besteht darin, dass das Design eine große Flexibilität ermöglicht. Grundsätzlich können Sie Ihre eigene Netzwerkkonfiguration programmieren, anstatt sich auf einen begrenzten Satz fest codierter Funktionen zu beschränken.

UPDATE: Ich habe Ubuntu-Pakete für BadVPN und NCD erstellt. Ich habe das Wiki auch mit Installations- und Verwendungsanweisungen für Ubuntu aktualisiert: http://code.google.com/p/badvpn/wiki/NCD#Running_it


Das sieht wirklich nützlich aus. Glaubst du, du wirst es in die Ubuntu / Fedora-Repos bekommen?
CoolAJ86

Derzeit habe ich Pakete für Arch und Gentoo und sonst nichts, da ich keine anderen Distributionen verwende. Ich kann einige Zeit finden, um Pakete für andere Distributionen zu machen. Es ist jedoch einfach, es einfach zu kompilieren und in / usr / local oder so zu installieren und ein einfaches Init-Skript zu erstellen, um es zu starten.
Ambroz Bizjak

Ubuntu-Pakete fertig, auf Ihre Anfrage :)
Ambroz Bizjak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.