Kita perlu membangunkan beberapa komputer di LAN internal kita, dari Internet.
Kami memiliki router yang agak tertutup, dengan sangat sedikit cara untuk mengkonfigurasinya.
Saya ingin menggunakan netfilter (iptables) untuk melakukan ini karena tidak melibatkan daemon atau yang serupa, tetapi solusi lain baik-baik saja.
Apa yang ada dalam pikiran saya:
- komputer eksternal mengeluarkan paket WOL (Wake-On-LAN) ke alamat IP publik (dengan MAC yang benar di dalamnya)
- port yang benar terbuka pada router (katakanlah 1234), mengarahkan data ke kotak Linux
- kotak Linux mengubah paket unicast UDP menjadi paket siaran (konten yang sama persis, hanya alamat tujuan yang diubah menjadi 255.255.255.255 atau 192.168.0.255)
- paket multicast datang ke setiap NIC, dan komputer yang diinginkan sekarang bangun
Untuk itu, aturan netfilter yang sangat sederhana adalah:
iptables --table nat --append PREROUTING --in-interface eth+ --protocol udp --destination-port 1234 --jump DNAT --to-destination 192.168.0.255
Alas netfilter tampaknya mengabaikan transformasi untuk siaran. 192.168.0.255 dan 255.255.255.255 tidak memberikan apa pun. Juga diuji dengan 192.168.0.0 dan 0.0.0.0
Saya menggunakan tcpdump untuk melihat apa yang terjadi:
tcpdump -n dst port 1234
13:54:28.583556 IP www.xxx.yyy.zzz.43852 > 192.168.0.100.1234: UDP, length 102
dan tidak ada yang lain. Saya harus memiliki baris kedua seperti:
13:54:28.xxxxxx IP www.xxx.yyy.zzz.43852 > 192.168.0.255.1234: UDP, length 102
Jika saya mengalihkan ke alamat non-multicast, semuanya baik-baik saja. Saya memiliki 2 garis yang diharapkan. Tapi jelas ini tidak bekerja untuk WOL.
Apakah ada cara untuk memberitahu netfilter untuk mengeluarkan paket siaran?
Metode lain yang saya pikirkan:
- gunakan iptables untuk mencocokkan paket yang diinginkan, catat, dan gunakan daemon untuk memantau file log dan nyalakan paket siaran
- gunakan iptables untuk mengarahkan ulang paket yang diinginkan ke daemon lokal, yang meluncurkan paket siaran (lebih sederhana)
- gunakan socat (bagaimana?)