Dienste starten/stoppen bei Link up/down

Status
Für weitere Antworten geschlossen.

XPectIT

Benutzer
Mitglied seit
09. Jan 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Mahlzeit,

kennt jemand eine Möglichkeit auf der DS (212j in meinem Fall) Dienste zu starten wenn eine Netzwerkverbindung besteht und wieder zu stoppen wenn der Link (also die physikalische Verbindung) abbricht?

Hintergrund:
Meine DS ist "Mädchen für alles" im Heimnetzwerk. u.a. läuft Squid, DNS, DHCP und OpenVPN (als Client). Wenn keiner Zuhause ist, schalten wir den Router per Funksteckdose aus. Damit hat die DS keinen Link mehr.
Jetzt dreht OpenVPN (als ipkg) durch und will alle paar Sekunden (einstellbar in der Config) neu starten. Dabei schreibt es immer 2 Zeilen in sein Logfile. Das kann ich umgehen indem ich sämtliche OpenVPN Logs nach /dev/null schiebe. Ich logge auf meinem Server.
Ausserdem läuft der Squid und verhindert den Ruhezustand der Festplatten, weil er seinen Cache checkt/reorganisiert/$whatever.

Das sind beides Probleme die nicht an der DS hängen aber den Ruhezustand verhindern. Beides könnte ich umgehen, wenn ich bei Link up (nicht bei Interface up) die Dienste starten und bei Link down die Dienste stoppen kann.

Hat jemand ne Idee dazu?
 

XPectIT

Benutzer
Mitglied seit
09. Jan 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Ich habe mir mal selbst etwas aus den Fingern geschnitzt. Evtl. hat ja noch jemand Verwendung dafür.

ACHTUNG: Das Ding ist noch nicht lauffähig, wer sich das Skript kopiert und ausführt ist selbst schuld.
Rich (BBCode):
#! /bin/sh
# Startet Dienste bei Link-up.
# Link-up ist nicht interface up, sondern wenn der LINK auf der
# Netzwerkkarte hergestellt wird. 
# z.B. - Netzwerkkabel eingesteckt
#      - Switch eingeschaltet

STARTSERVICES="/root/S80squid /root/S06openvpn"
LS0=`ifconfig eth3 | grep RUNNING | wc -l`
LS1="$LS0"
LS2="$LS0"
LS3="$LS0"
STOPSERVICES="$STARTSERVICES"


while true
do  LS0=`ifconfig eth3 | grep RUNNING | wc -l`
    if [ "$LS3$LS2$LS1$LS0" == 0111 ]; then
        # Link wurde hergestellt, Dienste starten
        for SERV in $STARTSERVICES
        do  if [ -x $SERV ]; then
               echo `date`" $SERV wird gestartet"
               sh $SERV
            fi
        done
        # damit flackern vermieden wird
        sleep 10
    elif [ "$LS3$LS2$LS1$LS0" == 1000 ]; then
        # Link wurde entfernt, Dienste stoppen
        for SERV in $STOPSERVICES
        do  if [ -x $SERV ]; then
               echo `date`" $SERV wird gestoppt"
               sh $SERV
            fi
        done
        # damit flackern vermieden wird
        sleep 10
    else
        # nix zu tun
    fi
    LS3="$LS2"
    LS2="$LS1"
    LS1="$LS0"
    sleep 5
done

Das Skript wird bei Systemstart gestartet. Ich gehe mal von einem Link aus.
1111: Anfangsstatus
sleep 5
1111: nix tun
...
1110: Link down, noch nix machen
sleep 5
1100: Link down, noch nix machen
sleep 5
1000: Link down, Dienste stoppen
sleep 10
0000: nix tun
sleep 5
0000: nix tun
...

Wenn der Link wieder hochkommt, starten die Dienste wieder.
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.991
Punkte für Reaktionen
629
Punkte
484
Hallo!

Darf ich mal eine ganz blöde Frage stellen: warum schaltet ihr den Router ab, lasst die DS aber laufen?
 

XPectIT

Benutzer
Mitglied seit
09. Jan 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Einfach ausgedrückt aus Bequemlichkeit und auch wegen unnötigem WLAN beim Schlafen.

Die DS steht etwas "versteckt" auf einem Schrank und es ist nicht jeder 1.95m groß und kommt ohne Hilfe an den Schalter. :)

Abends wenn wir ins Bettchen gehen: -> Router aus
Morgens gehe ich ins Büro, meine Frau nicht immer. Ist sie auch arbeiten, bleibt der Router aus. Ist sie daheim: -> Router an

Also bleibt der Router manchmal von ca. 23 bis ca. 17 Uhr aus und manchmal "nur" von 23:30 bis 6 Uhr. Hier kann ich keinen Terminplan hinterlegen.
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.991
Punkte für Reaktionen
629
Punkte
484
Danke!
Obwohl "bequem" wäre ja, ihn dauerhaft eingeschaltet zu lassen. :)
Bei mir läuft eben auch das Telefon über den Router, da lasse ich ihn lieber eingeschaltet. Aber das WLAN läßt sich ja zeitgesteuert ein- und ausschalten - bei dir vermutlich nicht.
 

XPectIT

Benutzer
Mitglied seit
09. Jan 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
...Bei mir läuft eben auch das Telefon über den Router, ....
Bei mir zu Glück nicht.

Wir haben ja nicht nur die eine Funksteckdose im Haus. Das ganze Wohnzimmer wird damit entsaftet, so gibts auch kein Standby-Stromverbrauch.

Etwas inkonsequent ja, einerseits die DS laufen lassen und andererseits wegen Standby das Wohnzimmer abschalten. ;-)
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.991
Punkte für Reaktionen
629
Punkte
484
Bei mir zu Glück nicht.

Ach, das ist schon in Ordnung. Der Router muß eh 24/7 laufen, sonst wäre meine DS von aussen nicht erreichbar.
Aber immer interessant, wie andere ihre Geräte schalten - auch wenn es manchmal etas 'inkonsequent' ist. :)
 

XPectIT

Benutzer
Mitglied seit
09. Jan 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Nach längerer Zeit grabe ich hier mal meinen eigenen Beitrag aus um einen Nachtrag zu machen:

Ich habe zwischenzeitlich mein Netzwerk Daheim etwas erneuert/verändert (300 MBit/s WLAN, pfSense Firewall, ...).
Mein ("neuer" DLINK DIR-615 von eBay) WLAN Router ist zugleich 5-Port Switch und wird abends und wenn keiner hier ist, per Fernbedienungssteckdose vom Strom getrennt.
Kein Strom -> kein WLAN, kein LAN, kein Verbrauch (hab ich ja schonmal geschrieben).

Ich hatte jedoch jetzt plötzlich das folgende Problem (und bringe die Lösung gleich mit):
Schalte ich also Nachts den Router/Switch aus, so geht die DS danach auch in den Ruhezustand. Das ist gut.
Wenn ich den Switch am nächsten Tag wieder einschalte, so wacht die DS nicht mehr auf. Das ist nicht gut.

Es hat mich wireshark, tcpdump und nicht wenig Hirnschmalz gekostet die Ursache zu finden und ist wohl in den verbauten Komponenten bzw. den verwendeten Betriebssystemen begründet (Auf dem DIR-615 läuft z.B. DD-WRT als Software und ne pfSense hat auch nicht jeder Zuhause).
Der Switch hat intern eine Tabelle in der steht welche MAC-Adresse an welchem Port hängt. Wird der Switch vom Strom genommen, geht diese Zuordnung verloren. Wenn der Switch wieder Strom hat, baut er die Tabelle anhand vom Datenfluss wieder neu auf. Normalerweise läuft das mit arp-Broadcasts. Wenn die DS allerdings im Ruhezustand ist, antwortet sie nicht auf die Broadcasts.
Als Folge weiß der Switch nicht mehr, dass die DS an einem seiner Ports hängt und die DS schläft weiter da sie keine Netzwerkpakete bekommt.

Was hat das jetzt eigentlich mit diesem Beitrag zu tun?
Ganz einfach. Hier die Lösung dazu:
Mit dem o.a. Skript (und kleinen Anpassungen) lasse ich auf meiner DS prüfen ob der Carrier, also der Physikalische Link, gerade hergestellt wurde. Wenn ja, dann sendet die DS einen Ping an irgendeinen Rechner. Der Switch erkennt, das hier ein Gerät ist und schreibt es in die Port-zu-MAC Tabelle. Ab jetzt ist die DS im Netz auch ansprechbar.

Ich bezweifle zwar, dass es jemanden gibt, der ähnliche Probleme hat, aber vielleicht suche ich ja irgendwann selbst meine Lösung ;-)

Grüße aus der Rhön
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat