WAKE ON LAN
(Letzte Version wiederhergestellt) |
Negge (Diskussion | Beiträge) (→Probleme: /etc/init.d/networking als Beispiel hinzugefügt) |
||
Zeile 81: | Zeile 81: | ||
</pre> | </pre> | ||
Ich habe diese Zeile einfach in meine /etc/init.d/networking an entsprechender Stelle nach dem Aktivieren des Netzwerks gesetzt. | Ich habe diese Zeile einfach in meine /etc/init.d/networking an entsprechender Stelle nach dem Aktivieren des Netzwerks gesetzt. | ||
− | |||
Falls es noch Fragen gibt könnt Ihr mich auch direkt anmailen: Thorsten at Gehrig.de | Falls es noch Fragen gibt könnt Ihr mich auch direkt anmailen: Thorsten at Gehrig.de | ||
+ | |||
+ | Bei Debian (c't vdr3) sieht das dann z.B. so aus: (einfach nacht ethool suchen, um die passenden Stellen zu finden): | ||
+ | <pre> | ||
+ | #!/bin/sh | ||
+ | # | ||
+ | # manage network interfaces and configure some networking options | ||
+ | |||
+ | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | ||
+ | |||
+ | if ! [ -x /sbin/ifup ]; then | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | spoofprotect_rp_filter () { | ||
+ | # This is the best method: turn on Source Address Verification and get | ||
+ | # spoof protection on all current and future interfaces. | ||
+ | |||
+ | if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then | ||
+ | for f in /proc/sys/net/ipv4/conf/*/rp_filter; do | ||
+ | echo 1 > $f | ||
+ | done | ||
+ | return 0 | ||
+ | else | ||
+ | return 1 | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | spoofprotect () { | ||
+ | echo -n "Setting up IP spoofing protection: " | ||
+ | if spoofprotect_rp_filter; then | ||
+ | echo "rp_filter." | ||
+ | else | ||
+ | echo "FAILED." | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | ip_forward () { | ||
+ | if [ -e /proc/sys/net/ipv4/ip_forward ]; then | ||
+ | echo -n "Enabling packet forwarding..." | ||
+ | echo 1 > /proc/sys/net/ipv4/ip_forward | ||
+ | echo "done." | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | syncookies () { | ||
+ | if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then | ||
+ | echo -n "Enabling TCP/IP SYN cookies..." | ||
+ | echo 1 > /proc/sys/net/ipv4/tcp_syncookies | ||
+ | echo "done." | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | doopt () { | ||
+ | optname=$1 | ||
+ | default=$2 | ||
+ | opt=`grep "^$optname=" /etc/network/options` | ||
+ | if [ -z "$opt" ]; then | ||
+ | opt="$optname=$default" | ||
+ | fi | ||
+ | optval=${opt#$optname=} | ||
+ | if [ "$optval" = "yes" ]; then | ||
+ | eval $optname | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | case "$1" in | ||
+ | start) | ||
+ | doopt spoofprotect yes | ||
+ | doopt syncookies no | ||
+ | doopt ip_forward no | ||
+ | |||
+ | echo -n "Configuring network interfaces..." | ||
+ | ifup -a | ||
+ | ethtool -s eth0 wol g | ||
+ | echo "done." | ||
+ | ;; | ||
+ | stop) | ||
+ | if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | | ||
+ | grep -q "^/ nfs$"; then | ||
+ | echo "NOT deconfiguring network interfaces: / is an NFS mount" | ||
+ | elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | | ||
+ | grep -q "^/ smbfs$"; then | ||
+ | echo "NOT deconfiguring network interfaces: / is an SMB mount" | ||
+ | elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | | ||
+ | grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then | ||
+ | echo "NOT deconfiguring network interfaces: network shares still mounted." | ||
+ | else | ||
+ | echo -n "Deconfiguring network interfaces..." | ||
+ | ifdown -a --exclude=lo | ||
+ | echo "done." | ||
+ | fi | ||
+ | ;; | ||
+ | force-reload|restart) | ||
+ | doopt spoofprotect yes | ||
+ | doopt syncookies no | ||
+ | doopt ip_forward no | ||
+ | echo -n "Reconfiguring network interfaces..." | ||
+ | ifdown -a --exclude=lo | ||
+ | ifup -a | ||
+ | ethtool -s eth0 wol g | ||
+ | echo "done." | ||
+ | ;; | ||
+ | *) | ||
+ | echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}" | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | </pre> | ||
=== Windows === | === Windows === |
Version vom 29. November 2005, 18:10 Uhr
Unter Wake on LAN (Abgekürzt: WOL) versteht man einen Rechner per Netzwerk einzuschalten. Dies ist z. B. sehr schön wenn man einen Linux-Router hat - sich per Internet zu diesem verbindet - und dann seinen VDR einschalten kann (um z. B. neue Timer zu speichern).
Das Einschalten erfolgt meistens durch das sogenante "MagicPacket(TM)".
Inhaltsverzeichnis |
Programme
Die Programme müssen das "MagicPacket(TM)" erzeugen und an die MAC-Adresse der Netzwerkkarte des aufzuweckenden Rechners schicken.
Browser
Bequem per Browser läßt sich über diesen Wake-On-Lan über Router-Dienst das MagicPacket(TM) aus Web-Formular senden. Das funktioniert teilweise sogar durch (DSL-) Router hindurch.
Linux
Ein passendes Linux-Programm ist ether-wake.
Compiliert wird der source-code mit
wget ftp://ftp.scyld.com/pub/diag/ether-wake.c gcc -O -Wall -o ether-wake ether-wake.c cp ./ether-wake /usr/local/bin
Der Aufruf erfolgt so:
ether-wake 00:11:22:33:44:55
wobei man für die Zahlenfolge einfach die MAC-Adresse des aufzuweckenden Rechners eingeben muss. Wenn man die nicht hat, kann man sich diese mit
ifconfig eth0
anzeigen lassen (natürlich auf dem Rechner den man später wecken will!).
- als Alternative dazu gibt es z.B. noch wol
Probleme
- seit dem 2.6er Kernel gibt es Probleme dass WOL nicht funktioniert Das Problem liegt darin, dass die meisten Netzwerkkarten-Treiber das WOL deaktivieren.
- 3Com Karten die den Treiber 3c59x verwenden, müssen den Parameter "enable_wol=1" angeben, um WOL zu aktivieren. Dies geht allerdings nur wenn der Treiber als Modul eingebunden wird.
Lösung des Problems: Es gibt ein Programm namens "ethtool". Hiermit kann man - nachdem der Netzwerktreiber geladen ist - die Netzwerkkartenparameter auslesen und ändern. So bekommt man angezeigt, wie die Parameter derzeit sind:
ethtool eth0
Beispiel:
ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000001 (1) Link detected: yes
Besonders die Zeilen "Supports Wake-on:" und "Wake-on:" sollte man hier im Auge behalten. Die Buchstaben bedeuten:
wol p|u|m|b|a|g|s|d... Set Wake-on-LAN options. Not all devices support this. The argument to this option is a string of characters specifying which options to enable. p Wake on phy activity u Wake on unicast messages m Wake on multicast messages b Wake on broadcast messages a Wake on ARP g Wake on MagicPacket(tm) s Enable SecureOn(tm) password for MagicPacket(tm) d Disable (wake on nothing). This option clears all previous options.
So aktiviert man das Wake-On-Lan beim Eintreffen eines "MagicPacket(TM)":
ethtool -s eth0 wol g
Ich habe diese Zeile einfach in meine /etc/init.d/networking an entsprechender Stelle nach dem Aktivieren des Netzwerks gesetzt. Falls es noch Fragen gibt könnt Ihr mich auch direkt anmailen: Thorsten at Gehrig.de
Bei Debian (c't vdr3) sieht das dann z.B. so aus: (einfach nacht ethool suchen, um die passenden Stellen zu finden):
#!/bin/sh # # manage network interfaces and configure some networking options PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin if ! [ -x /sbin/ifup ]; then exit 0 fi spoofprotect_rp_filter () { # This is the best method: turn on Source Address Verification and get # spoof protection on all current and future interfaces. if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done return 0 else return 1 fi } spoofprotect () { echo -n "Setting up IP spoofing protection: " if spoofprotect_rp_filter; then echo "rp_filter." else echo "FAILED." fi } ip_forward () { if [ -e /proc/sys/net/ipv4/ip_forward ]; then echo -n "Enabling packet forwarding..." echo 1 > /proc/sys/net/ipv4/ip_forward echo "done." fi } syncookies () { if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then echo -n "Enabling TCP/IP SYN cookies..." echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo "done." fi } doopt () { optname=$1 default=$2 opt=`grep "^$optname=" /etc/network/options` if [ -z "$opt" ]; then opt="$optname=$default" fi optval=${opt#$optname=} if [ "$optval" = "yes" ]; then eval $optname fi } case "$1" in start) doopt spoofprotect yes doopt syncookies no doopt ip_forward no echo -n "Configuring network interfaces..." ifup -a ethtool -s eth0 wol g echo "done." ;; stop) if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | grep -q "^/ nfs$"; then echo "NOT deconfiguring network interfaces: / is an NFS mount" elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | grep -q "^/ smbfs$"; then echo "NOT deconfiguring network interfaces: / is an SMB mount" elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then echo "NOT deconfiguring network interfaces: network shares still mounted." else echo -n "Deconfiguring network interfaces..." ifdown -a --exclude=lo echo "done." fi ;; force-reload|restart) doopt spoofprotect yes doopt syncookies no doopt ip_forward no echo -n "Reconfiguring network interfaces..." ifdown -a --exclude=lo ifup -a ethtool -s eth0 wol g echo "done." ;; *) echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
Windows
Für Windows gibt es die Freeware LANStart.
Wakeup per CGI
Einen eigenen Wakeupdienst mit MagicPacket(TM) und Web-Formular ist aber ansich auch keine größere Schwierigkeit. Also wenn man sich z.B. die eigene MAC Adresse nicht permanent nicht merken möchte, und wenn ein eigener Webserver, der CGI+Perl unterstützt, zur Verfügung steht, kann mit folgendem HTML-Wrapper und CGI-Script ein eigener Wakeupdienst aufgesetzt werden.
Dieser HTML-Teil in die Webseite einbetten.
<form action="/cgi/wakeup.pl" method="post"> <table> <tr><td>HWaddress:</td><td><input size="40" maxlength="40" name="HWaddress" value="00:11:22:33:44:55"></td></tr> <tr><td>IPaddress:</td><td><input size="40" maxlength="40" name="IPaddress" value="1.2.3.4"></td></tr> <tr><td>Port:</td><td><input size="40" maxlength="40" name="Port" value="9"></td></tr> <tr><td> </td><td><input type="submit" value="Absenden"></td></tr> </table> </form>
und diesen CGI-Teil als "/cgi/wakeup.pl" auf dem Webserver speichern.
#!/usr/bin/perl -w use strict; use Socket; use CGI; my $cgi = new CGI; use CGI::Carp qw(fatalsToBrowser); $cgi->default_dtd('-//W3C//DTD HTML 4.01 Transitional//EN'); print $cgi->header(-type =>'text/html'), $cgi->start_html('Wakeup'), $cgi->h1('Wakeup'), wake($cgi->param('HWaddress'),$cgi->param('IPaddress'),$cgi->param('Port')), $cgi->end_html(); sub wake { my $hwaddr = shift; my $ipaddr = shift || '255.255.255.255'; my $port = shift || getservbyname('discard', 'udp'); my ($raddr, $them, $proto); my ($hwaddr_re, $pkt); # Validate hardware address (ethernet address) $hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6); if ($hwaddr !~ m/^$hwaddr_re$/) { return $cgi->p({-style => 'color:red'}, "Invalid hardware address: $hwaddr" ); } # Generate magic sequence foreach (split /:/, $hwaddr) { $pkt .= chr(hex($_)); } $pkt = chr(0xFF) x 6 . $pkt x 16; # Allocate socket and send packet $raddr = gethostbyname($ipaddr); $them = pack_sockaddr_in($port, $raddr); $proto = getprotobyname('udp'); if(!socket(S, AF_INET, SOCK_DGRAM, $proto)) { return $cgi->p({-style => 'color:red'}, "socket : $!"); } if(!setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1)) { return $cgi->p({-style => 'color:red'}, "setsockopt : $!" ); } if(!send(S, $pkt, 0, $them)) { return $cgi->p({-style => 'color:red'}, "send : $!"); } close S; return $cgi->p("Sending magic packet to $ipaddr:$port with $hwaddr"); }
Sonstiges
Das ganze ist im BIOS zu aktivieren: Power On by Ring bzw. Wake on LAN
Vor allem bei älteren Netzwerkkarten, bzw. Mainboards muss außerdem ein Kabel zwischen Mainboard und Netzwerkkarte gesteckt werden: (Ausnahme sind Mainboards mit Onboard-Netzwerkkarte). Abhängig ist dies von der verwendeten PCI-Spezifikation.
Eine genauere Erläuterung dazu ist auf den c't Hotline Seiten zur Ausgabe 24/2004 unter Komplizierter Netzverkehr zu finden
Links
[1] | Thread zu "Wake-On-Lan aus Internet durch DSL-Router (hier FritzBox)" |
[2] | Wake-On-Lan über Router-Dienst: MagicPacket(TM) aus Web-Formular senden |