内部LAN上の一部のコンピューターをインターネットからウェイクアップする必要があります。
ある程度閉じたルーターがあり、構成方法はほとんどありません。
デーモンなどを必要としないため、これを行うためにnetfilter(iptables)を使用したいのですが、他のソリューションでも問題ありません。
私が考えていること:
- 外部コンピューターがWOL(Wake-On-LAN)パケットを(正しいMACが内部にある)パブリックIPアドレスに発行する
- ルーターで正しいポートが開いており(たとえば1234)、データをLinuxボックスにリダイレクトします。
- Linuxボックスは、UDPユニキャストパケットをブロードキャストパケットに変換します(まったく同じ内容、宛先アドレスのみが255.255.255.255または192.168.0.255に変更されます)
- マルチキャストパケットがすべてのNICに到達し、目的のコンピューターが起動している
そのため、非常に単純なnetfilterルールは次のとおりです。
iptables --table nat --append PREROUTING --in-interface eth+ --protocol udp --destination-port 1234 --jump DNAT --to-destination 192.168.0.255
ああnetfilterはブロードキャストへの変換を無視しているようです。192.168.0.255と255.255.255.255は何も与えません。また、192.168.0.0と0.0.0.0でテストしました。tcpdump
を使用して何が起こるかを確認しました
tcpdump -n dst port 1234
13:54:28.583556 IP www.xxx.yyy.zzz.43852 > 192.168.0.100.1234: UDP, length 102
。次のような2行目が必要です。
13:54:28.xxxxxx IP www.xxx.yyy.zzz.43852 > 192.168.0.255.1234: UDP, length 102
非マルチキャストアドレスにリダイレクトする場合は、すべて問題ありません。予想される2つの行があります。しかし、明らかにこれはWOLでは機能しません。
ブロードキャストパケットを発行するようにnetfilterに指示する方法はありますか?
私が考える他の方法:
- iptablesを使用して目的のパケットを照合し、ログに記録し、デーモンを使用してログファイルを監視し、ブロードキャストパケットを起動します
- iptablesを使用して、目的のパケットをローカルデーモンにリダイレクトします。ローカルデーモンは、ブロードキャストパケットを起動します(より単純)。
- socatを使用する(方法?)