[Problem] Wake-on-LAN per Broadcast

PhrozenByte

Neuer User
Mitglied seit
24 Mrz 2012
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

hab einen gefritzte Speedport W701V mit der üblichen Firmware der Fritz!Box 7170 (Standard-Firmware, kein Freetz) und möchte Wake-on-LAN einrichten.

Um direkt zur Sache zu kommen:
Die "Computer starten"-Funktion der Fritz!Box funktioniert genauso wenig wie der folgende Befehl auf meinem parallel zum Zielrechner angeschlossenen Raspberry Pi:
Code:
$ sudo etherwake 00:19:66:E0:9A:AB

Was aber funktioniert ist folgender Befehl auf besagtem Raspberry Pi:
Code:
$ sudo etherwake -b 00:19:66:E0:9A:AB

Der Unterschied ist der -b Schalter: Send the wake-up packet to the broadcast address.

Meine Vermutung ist, dass die Fritz!Box bei der "Computer starten"-Funktion das Magic Packet nicht an Broadcast sondern die letzte bekannte IP-Adresse des Zielrechners versendet. Da es sich beim Zielrechner um einen Server mit zwei gebündelten Netzwerkkarten ("Bonding") handelt funktioniert die Zuordnung der IP-Adresse aber nicht richtig (denn: beim Bonding haben die physischen Interfaces eth0 und eth1 keine Adressen sondern nur das virtuelle Interface bond0).

Zur Frage: Wie bekomme ich die Fritz!Box dazu, dass sie das Magic Packet an Broadcast verschickt und nicht an die letzte bekannte IP-Adresse?

Viele Grüße,
PhrozenByte
 
Du verwechselst da IP-Broadcast mit MAC-Broadcast.
WOL Pakete werden nie an eine IP gesendet, sondern immer an eine MAC.
 
Das stimmt so nicht.
WOL Pakete werden immer per UDP entweder an die zuletzt bekannte IP oder an die Broadcast-Adresse des Subnetzes gesendet. Die MAC-Adresse liegt mehrfach im Datenteil des Pakets (s. auch hier).

Ich hab vor längerer Zeit selbst mal damit rumprogrammiert. An dem Code-Fragment sieht man recht gut, wie das funktioniert.
Code:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class WOLSender

    Public Sub WOLSend(ByVal strMAC As String)
        ' Build WOL packet
        Dim packet As Byte() = BuildWOLPaket(strMAC)

        ' Begin sending the data to the remote device.
        Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        Try
            Dim stHostname As String = Dns.GetHostName()
            Dim hostEntry As IPHostEntry = Dns.GetHostEntry(stHostname)
            Dim myIP As String = hostEntry.AddressList(0).ToString
            Dim ss() = Split(myIP, ".")
            Dim strBroadcast As String = ss(0) & "." & ss(1) & "." & ss(2) & ".255"
            Dim myBroadcast As IPAddress = IPAddress.Parse(strBroadcast)
            Dim endPoint As New IPEndPoint(myBroadcast, 40000)
            Debug.Print("Sending to " + strBroadcast + ": " + Packet2String(packet))
            s.SendTo(packet, 0, packet.Length, SocketFlags.None, endPoint)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "WOLSend")
        End Try
    End Sub 'Send

    Private Shared Function BuildWOLPaket(ByVal stMAC As String) As Byte()
        Dim packet As Byte()
        Dim i As Integer, j As Integer, k As Integer
        stMAC = Replace(stMAC, ":", "-")
        Dim s() = Split(stMAC, "-")
        ReDim packet(17 * 6 - 1)
        k = 0
        For i = 1 To 1
            For j = 0 To 5 : packet(k) = Convert.ToInt32("FF", 16) : k = k + 1 : Next j
        Next i
        For i = 1 To 16
            For j = 0 To 5 : packet(k) = Convert.ToInt32(s(j), 16) : k = k + 1 : Next j
        Next i
        BuildWOLPaket = packet
    End Function

    Private Shared Function Packet2String(ByVal p As Byte()) As String
        Dim l As Long
        Dim s As String
        s = ""
        For l = 0 To p.Length - 1
            If s.Length > 0 Then s = s + " "
            s = s + Hex(p(l))
        Next
        Packet2String = s
    End Function

End Class
 
gmeyer schrieb:
WOL Pakete werden immer per UDP entweder an die zuletzt bekannte IP oder an die Broadcast-Adresse des Subnetzes gesendet.
Es ist egal, in welche Protokoll-Hülle (IP, TCP, UDP, ...) Du das WOL-Paket steckst. Im "Schlafzustand" hat der Netzwerk-Adapter des zu weckenden Rechners keine IP-Adresse, der kennt nur seine MAC und reagiert nur auf MAC-Adressierung. Ein simpler Ethernet-Frame mit dem WOL-Paket als Nutzdaten täte es auch.

G., -#####o:
 
Ob an IP oder MAC ist in dem Fall wurscht da die Kommunikation auf Layer2 stattfindet. Da ist die Adresse immer die MAC.

jo
 
Meines Wissens gibt es Netzwerkkarten die nicht nur den Payload (das eigentliche Magic Packet) sondern auch den Paket-Header (hier: Port und IP-Adresse) prüfen... Diese Daten können auch abseits des Ziel-Netzwerk-Adapters relevant sein, Stichwort Layer-3-Switches.

Aber: Ich wollte hier keine technische Grundsatzdiskussion anstoßen und technische Details besprechen. Hat jemand einen Lösungsvorschlag für mein Problem?
 
PhrozenByte schrieb:
Meines Wissens gibt es Netzwerkkarten ...
Das kann schon sein. Für WOL nach dem Magic-Packet-Verfahren ist das irrelevant, da spielen IP-Adressen keine Rolle.

G., -#####o:
 
Das versteh ich. Frag doch einfach mal bei AVM nach, wie die die WOL-Funktion umgesetzt haben.

Wenn dass nicht per Broadcast implementiert wurde, seh ich schwarz bei deiner Konfiguration.
Bringt das "Bonding" überhaupt was? Irgendwie passt 7170 (100 MBits/s) und IP-Bündelung nicht wirklich zusammen. Brächte da ein wirklicher Umstieg auf GBit-Ethernet nicht wesentlich mehr?
 
Ich denke nicht, dass eine Supportanfrage bei AVM sonderlich hilfreich sein wird - zum einen gibt es für die 7170 kein Support mehr, zum anderen für einen gefritzten Speedport erst recht nicht. Ich dachte, dass hier vielleicht schonmal jemand vor dem gleichen Problem stand und eine Lösung gefunden hat (eine Einstellung in der ar7.conf oder so). Die Alternative ist das Wake-on-LAN-Paket übers Raspberry Pi zu verschicken, muss ich halt ein kleines Webinterface schreiben, das sollte aber nicht das Problem sein. Die Fritz!Box zu nutzen wäre aber halt schöner und einfacher.

Wegen dem Bonding: Ja, das bringt etwas. Die Rechner hängen an einem Gigabit-Switch, Datenverkehr zwischen den Rechnern läuft also nicht über den Router - der bedient lediglich Internet, WLAN fürs Smartphone und das Raspberry Pi (dafür reichen 100 MBit/s). Zwischen den Rechnern bewege ich häufig große Datenmengen, da ist es schon eine nette Sache wenn zwei Rechner gleichzeitig mit vollem Gigabit vom Server Daten ziehen bzw. raufladen können.
 
Na ja, bei gerade mal 2 Clients lohnt sich das nicht wirklich. Wann senden/empfangen die schon gleichzeitig? - ist eher akademisch. Bei 40-50 Clients würde ich es verstehen.

Und mit der 7170 (bzw. dem gefritzten Speedport) bist du viele Firmware-Generationen zurück. Wer weiß, wie aktuelle Firmwares das abhandeln. Evtl. solltest du doch mal über den Kauf einer aktuellen Fritzbox nachdenken.
 
Es gibt diverse Anleitungen etherwake auf die Fritz!Box zu bringen. Sollte doch mit Freetz erst recht möglich sein.

jo
 
Kostenlos!

Statistik des Forums

Themen
248,927
Beiträge
2,305,512
Mitglieder
378,653
Neuestes Mitglied
M.CH.