wir haben hier im Forum immer wieder Diskussionen um WoL aus dem Internet oder WoC. Ich experimentiere gerade mit einer neuen Variante, oder zumindest hab ich noch nirgends einen entsprechenden Bericht gelesen. Meine Variante schaltet den WHS vollautomatisch an, wenn er einen Service für die Außenwelt erbringen soll. Ob sich das ganze für den produktiven Einsatz eignet ist mir noch nicht so klar. Ich will also auch nicht eine perfekte Lösung präsentieren sondern Ideen austauschen.
Ich verwende eine Fritzbox 7050 mit einer erweiterten Originalfirmware (14.04.33) . Die Erweiterungen hab ich aus dem Freetzprojekt rauskopiert, direkt Freetz zu verwenden scheitert bei mir daran, daß ich Teile benötige die zu groß für die gute alte 7050 sind, nämlich libpcap und tcpdump. Ich verwende daher ein debug.cfg das meinen WHS beim Booten der Fritzbox anschaltet und dann die entsprechenden Komponenten nach /var/tmp lädt. Bei neueren Fritzboxen mit mehr Flash sollte Freetz mit den entsprechenden Packages auch direkt gehen. Das Auslagern von Packages gibt es bei Freetz auch, aber bisher nur wenn der Server auch an bleibt - oder so hab ich es bisher verstanden, bitte korrigiert mich wenn das falsch ist.
Die Idee ist nun, bei einem externen Verbindungsaubau für bestimmte Services den WHS einfach automatisch einzuschalten. Erstmal die Services: ein Verbindungsaubau für TCP Services läßt sich viel besser erkennen als bei UDP Services, denn bei TCP kann man den Verbindungsaufbau am SYN Flag erkennen. Glücklicherweise sind die interessantesten Services für die Aussenwelt - smtp, http, https - TCP basiert. Natürlich kann es sein, daß vor dem Verbindungsaufbau der Router erstmal die Ethernetadresse ermitteln muß, also muß man auch ARP Anfragen des Routers berücksichtigen. Ist der Server aus, gehen natürlich sowohl die ARP Anfragen als auch das TCP SYN erstmal verloren, aber in aller Regel werden die mehrfach wiederholt, und der WHS ist meist schnell genug verfügbar um ohne Fehlermeldung eine Verdindung aufzubauen.
Das Skript macht folgendes (hoffentlich ohne Tipfehler, cat << und $ vertragen sich nicht so toll)
Code: Alles auswählen
router="192.168.178.1"
server="192.168.178.22"
portlist="25 or 80 or 443"
interface="eth1"
mac="00:26:2D:00:88:A0"
{
while true; do
./tcpdump -c 1 -f '(((tcp[tcpflags] & tcp-syn) != 0) and dst host $server and (dst port $portlist)) or (arp dst host $server and src host $router)' >>tcpdump.log
ether-wake -b -i $interface $mac
done
} &
- Mit "not" in tcpdump hab ich keine guten Erfahrungen gemacht, vielleicht war ich zu ungeschickt. Deswegen teste ich beim SYN nicht auf lokales Netz. Daher wird der WHS auch bei interner Nutzung der Services angeschaltet, wenn der Client die MAC-Adresse nocht kennt, also kein ARP braucht.
- Ohne Test auf lokales Netz und ohne Portliste geht der WHS auch wegen dem WHS-Trayicon an, weil dafür eine Verbindung aufgebaut wird. Aus dem gleichen Grund sollte man nur ARP Anfragen der Fritzbox verwenden, weil bei ARP noch unklar ist warum der Server gebraucht wird.
- Die Kindersicherung der Fritzbox muß aus sein. Sonst schickt die Fritzbox kurz nachdem der WHS ausgeht eine ARP-Anfrage um eine TCP-Verbdinung auf Port 14013 aufzubauen, und das obwohl der Server keinem Verbot unterliegt.
Kann jemand damit was mit der Idee anfangen?
Viele Grüße
Joachim