Linux Shellscript-Projekt: WakeOnLan

    • Offizieller Beitrag

    Moin!
    Ich hätt mal wieder ein Problemschen. Da ich mittlerweile weiß, dass hier doch einige Leute mit richtig Ahnung sind, wende ich mich vertauensvoll an die Community. Es geht um ein Shellscript-Projekt, mit dem Rechner automatisch heruntergefahren werden, wenn sie nicht benötigt werden, und natürlich gestartet werden, wenn sie Anfragen bekommen:


    Hintergrund:
    Meine Rechner (außer meinem PC) stehen in einem Kabuff im Dachgeschoss. Die Wärmeentwicklung ist enorm. Dadurch ist mein Backup-Server kürzlich ausgestiegen. Also will ich Wärme und Stromverbrauch reduzieren, indem die Maschinen abschalten, sollten diese nicht benötigt werden.
    Eine Verbindungsanfrage oder ein simpler Ping sollte wieder dafür sorgen, dass die Maschinen wieder starten.


    Planung:
    Auf dem Firewall-Server wird über iptables alles geloggt, was new, established oder related ist. Über eine Referenzdatei wird ausgelesen, welche Rechner überprüft werden. Also wird die letzte Zeile aus der Firewall-Log gesucht, wo die Maschine drinsteht, und das Datum als Vergleich genommen.


    Ist dieses Datum älter als beispielsweise 30 Minuten, wird geprüft, ob die Maschine rennt (ping). Ist die Maschine aktiv, wird bei ihr über ssh (bei Linux-Maschinen) der init 0 angestossen.


    Ist dieses Datum neuer als 30 Minuten, wird geprüft, ob die Maschine rennt (ping). Ist die Maschine ausgeschaltet, wird sie mit WakeOnLan gestartet.


    Problem:
    Das Ganze arbeitet wie vorgesehen. Nur gibt es ein kleines Problem, was ich nicht bedacht habe. Wenn man eine Samba-Freigabe über UNC-Pfad mountet (z.B.: \\192.168.0.33\Freigabe) und sich authentifiziert, bleibt diese Freigabe gespeichert.
    Schlimmer noch: der Client-PC (WinXP) sendet alle 5 Minuten eine Anfrage über TCP445. Dadurch rennt die Maschine tagelang, wenn man nicht "net use /delete \\192.168.0.33\Freigabe" eingibt.
    Klar kann man das umgehen, indem man ne Batch-File zum Mounten und Unmounten schreibt, aber es ist halt umständlich.


    Frage:
    Hat irgendjemand eine Idee, wie ich das umgehen kann? Ich kann schlecht die Kommunikation TCP445 established,related nicht loggen. Dann würde die Kiste nach einer halben Stunde herunterfahren - egal ob Daten übertragen werden, oder nicht. ?(


    Ich wäre auf jeden Fall dankbar für Anregungen. :]


    [edit]
    P.s.: Falls es hilfreich ist, kann ich ja auch mal das Shellscript. die Referenzdatei und die Firewall-Logregeln posten, wenn die jemand haben will.
    [/edit]

  • Mal 'ne ganz andere Frage: warum lässt Du nicht jeden Rechner selbst entscheiden, ob es Zeit ist herunterzufahren. So wie Deine Planung aussieht, liegt bei Deinem Firewall-Server ein zumindest root-ähnlicher-Zugang (womöglich noch einer ohne Passphrase) zu all Deinen Rechnern herum. Du könntest genausogut auch ein iptables auf den einzelnen Rechnern laufen lassen und diese dann bei Bedarf selbst das init 0 ausführen lassen.


    Warum der Umweg über eine externe Firewall?

    • Offizieller Beitrag

    naja, es gibt von der Firewall aus einen Root-Zugang ohne Passphrase mit ssh. Das Script selber behandelt sowohl Boot als auch Shutdown. Und da das mit mehreren Maschinen über eine Referenzliste läuft (bzw. laufen wird - momentan ist das nur eine), wollte ich das zentral laufen lassen. Das mit dem Zugang ohne Passphrase finde ich jetzt nicht so schlimm, denn wenn es jemand schafft auf die Firewall zu kommen, isses eh vorbei mit meinem Netzwerk. :D


    [edit]
    Ups, was ich noch sagen wollte: Die Firewall ist eigentlich nicht extern. Ich habe eine wesentliche Information vergessen: Alle Maschinen im Kabuff befinden sich in einer DMZ. Um mit Ihnen von Außen oder über mein LAN zu kommunizieren, geht eh alles über die Firewall.
    Außerdem sind unter den Maschinen auch Windows-Rechner. Da geht kein iptables (auf cygwin habe ich keinen Bock *g*).
    [/edit]