Wie kann man `eth0` so konfigurieren, dass` dhclient` erneut versucht wird, wenn der Plug und der Plug-in wieder entfernt werden?

20072
CoolAJ86

Ich arbeite an einem Linux-Gadget.

Ich möchte, dass es DHCP erhält, wenn ich das Netzwerkkabel nach dem Hochfahren des Computers einstecke oder wenn das Netzwerkkabel nicht angeschlossen und wieder angeschlossen wird.

Eine Lösung ist, ein Skript wie das folgende auszuführen (was übrigens funktioniert):

#!/bin/bash  NET_STATUS='different'  while true do NEW_NET_STATUS=`ifconfig | grep RUNNING | grep -v LOOPBACK` if [ "$" = "$" ] then echo "no change" sleep 1 continue fi NET_STATUS=$ if [ "$" ] then echo "cable plugged in" else echo "cable unplugged" fi sleep 1 done 

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

10
Leider erscheinen sowohl ifplugd als auch netplugd ab 2016 nicht gepflegt. Diese ähnliche Frage scheint jedoch eine gute (einfache) Antwort mit udev-Regeln zu haben - es ist kein zusätzliches Paket erforderlich. http://serverfault.com/a/312296/275255 Thom Nichols vor 8 Jahren 1
Ändern Sie "auto" in "allow-hotplug" in "interface". Ken Sharp vor 5 Jahren 0

4 Antworten auf die Frage

8
CoolAJ86

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 
4
byronc

ifplugd geht mit dieser Situation sehr gut um:

ifplugdist ein Linux-Daemon, der Ihr Ethernet-Gerät automatisch konfiguriert, wenn ein Kabel angeschlossen wird, und die Konfiguration wird bei einem Ziehen des Kabels automatisch aufgehoben. Dies ist bei Laptops mit integrierten Netzwerkadaptern hilfreich, da die Schnittstelle nur dann konfiguriert wird, wenn ein Kabel wirklich angeschlossen ist.

ifplugd Schnittstellen zu den nativen Netzwerkkonfigurationsprogrammen Ihrer Distribution.

Einige Eigenschaften:

  • Verwendet die systemeigenen ifup/ ifdownProgramme Ihrer Distribution .
  • [...]
  • Unterstützt die Linux SIOCETHTOOL(neuere, auch als ethtoolAPI bezeichnet), SIOCGMIIREG(ältere, auch als mii-diag/ mii-toolAPI) und SIOCDEVPRIVATE(älteste, auch als mii-toolAPI bezeichnete) ioctl()s, um den Link-Status zu erhalten. Release 0.24 führt Unterstützung für die Erkennung von Verbindungen mit dem IFF_RUNNINGSchnittstellenflag ein.
  • [...]
  • Kann so konfiguriert werden, dass kurze "unplugged" -Perioden ( -dOption) oder kurze "gesteckte" Perioden ( -uOption) ignoriert werden.
  • [...]
  • Kompatibilitätsmodus für Netzwerkgeräte, die keine Kabelerkennung unterstützen ( -FOption)
Meine lokale LUG hat mich zu "netplug" verwiesen, also bin ich stattdessen mitgegangen. Vielen Dank! CoolAJ86 vor 12 Jahren 0
4
NGRhodes

Ich würde empfehlen, 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 wird, und die Konfiguration des Konfigu- rates bei Ziehen des Kabels automatisch aufheben. Dies ist bei Laptops mit integrierten Netzwerkadaptern hilfreich, da die Schnittstelle nur dann konfiguriert wird, wenn ein Kabel wirklich angeschlossen ist.

2
Ambroz Bizjak

Diese Software von mir für die Netzwerkkonfiguration zu verwenden, ist sehr einfach.

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

Das folgende NCD-Programm reicht aus. Außerdem wird gezeigt, wie Sie die Konfiguration erweitern können. In diesem Fall führen Sie etwas aus, wenn das Netzwerk auf / ab 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 hier nicht nur das eingesteckte oder herausgezogene Netzwerkkabel gehandhabt wird, sondern auch die Netzwerkschnittstelle selbst erscheint 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 auf eine begrenzte Anzahl fest codierter Funktionen beschränkt zu sein.

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 bekommst es in Ubuntu / Fedora Repos? CoolAJ86 vor 12 Jahren 0
Derzeit habe ich Pakete für Arch und Gentoo und sonst nichts, weil ich keine anderen Distributionen verwende. Ich kann etwas Zeit finden, um Pakete für andere Distros zu erstellen. Es ist jedoch einfach, es einfach zu kompilieren und in / usr / local oder etwas anderes zu installieren und ein einfaches Init-Skript zum Starten zu erstellen. Ambroz Bizjak vor 12 Jahren 0
Ubuntu-Pakete nach Ihren Wünschen fertig :) Ambroz Bizjak vor 12 Jahren 0