Wir müssen einige Computer in unserem internen LAN aus dem Internet aktivieren.
Wir haben einen etwas geschlossenen Router mit sehr wenigen Möglichkeiten, ihn zu konfigurieren.
Ich würde gerne netfilter (iptables) verwenden, um dies zu tun, da es keinen Daemon oder ähnliches beinhaltet, aber andere Lösungen sind in Ordnung.
Was ich vorhabe:
- Der externe Computer gibt ein WOL-Paket (Wake-On-LAN) an die öffentliche IP-Adresse aus (mit dem richtigen MAC im Inneren).
- Auf dem Router ist der richtige Port geöffnet (z. B. 1234), und die Daten werden auf eine Linux-Box umgeleitet
- Die Linux-Box wandelt das UDP-Unicast-Paket in ein Broadcast-Paket um (genau der gleiche Inhalt, nur die Zieladresse wird in 255.255.255.255 oder 192.168.0.255 geändert).
- Das Multicast-Paket kommt zu jeder Netzwerkkarte, und der gewünschte Computer ist jetzt wach
Dafür lautet eine sehr einfache Netzfilterregel:
iptables --table nat --append PREROUTING --in-interface eth+ --protocol udp --destination-port 1234 --jump DNAT --to-destination 192.168.0.255
Leider scheint Netfilter die Umwandlung in Broadcast zu ignorieren. 192.168.0.255 und 255.255.255.255 geben nichts. Auch mit 192.168.0.0 und 0.0.0.0 getestet
Ich habe tcpdump verwendet, um zu sehen, was passiert:
tcpdump -n dst port 1234
13:54:28.583556 IP www.xxx.yyy.zzz.43852 > 192.168.0.100.1234: UDP, length 102
und sonst nichts. Ich sollte eine zweite Zeile haben wie:
13:54:28.xxxxxx IP www.xxx.yyy.zzz.43852 > 192.168.0.255.1234: UDP, length 102
Wenn ich zu einer Nicht-Multicast-Adresse umleitung, ist alles in Ordnung. Ich habe die 2 erwarteten Zeilen. Aber offensichtlich funktioniert das bei WOL nicht.
Gibt es eine Möglichkeit, netfilter anzuweisen, Broadcast-Pakete auszugeben?
Andere Methoden, über die ich nachdenke:
- Verwenden Sie iptables, um die gewünschten Pakete abzugleichen, sie zu protokollieren, und verwenden Sie einen Daemon, um die Protokolldatei zu überwachen und das Broadcast-Paket auszulösen
- Verwenden Sie iptables, um die gewünschten Pakete an einen lokalen Daemon umzuleiten, der das Broadcast-Paket auslöst (einfacher).
- benutze socat (wie?)