Chúng tôi cần đánh thức một số máy tính trên mạng LAN nội bộ của chúng tôi, từ Internet.
Chúng tôi có một bộ định tuyến hơi kín, với rất ít cách để cấu hình nó.
Tôi muốn sử dụng netfilter (iptables) để làm điều này bởi vì nó không liên quan đến trình nền hoặc tương tự, nhưng các giải pháp khác đều ổn.
Những gì tôi có trong tâm trí:
- máy tính bên ngoài phát hành gói WOL (Wake-On-LAN) đến địa chỉ IP công cộng (bên trong có MAC chính xác)
- cổng chính xác được mở trên bộ định tuyến (giả sử 1234), chuyển hướng dữ liệu sang hộp Linux
- hộp Linux chuyển đổi gói unicast UDP thành gói quảng bá (chính xác cùng một nội dung, chỉ có địa chỉ đích được sửa đổi thành 255.255.255.255 hoặc 192.168.0.255)
- gói multicast đến với mọi NIC và máy tính mong muốn đã hoạt động
Vì thế, một quy tắc bộ lọc mạng rất đơn giản là:
iptables --table nat --append PREROUTING --in-interface eth+ --protocol udp --destination-port 1234 --jump DNAT --to-destination 192.168.0.255
Alas netfilter dường như bỏ qua chuyển đổi để phát sóng. 192.168.0.255 và 255.255.255.255 không cung cấp gì. Cũng được thử nghiệm với 192.168.0.0 và 0.0.0.0
Tôi đã sử dụng tcpdump để xem điều gì xảy ra:
tcpdump -n dst port 1234
13:54:28.583556 IP www.xxx.yyy.zzz.43852 > 192.168.0.100.1234: UDP, length 102
và không có gì khác. Tôi nên có một dòng thứ hai như:
13:54:28.xxxxxx IP www.xxx.yyy.zzz.43852 > 192.168.0.255.1234: UDP, length 102
Nếu tôi chuyển hướng đến một địa chỉ không phát đa hướng, mọi thứ đều ổn. Tôi có 2 dòng dự kiến. Nhưng rõ ràng điều này không làm việc cho WOL.
Có cách nào để nói với netfilter phát hành các gói phát sóng không?
Các phương pháp khác tôi nghĩ về:
- sử dụng iptables để khớp với các gói mong muốn, ghi nhật ký và sử dụng trình nền để theo dõi tệp nhật ký và kích hoạt gói tin quảng bá
- sử dụng iptables để chuyển hướng các gói mong muốn đến một daemon cục bộ, nó kích hoạt gói quảng bá (đơn giản hơn)
- sử dụng socat (thế nào?)