WindowsファイアウォールにブロードキャストPingを通す

昨日ようやくRaspberry Piが到着。こいつがDHCPで取るIPアドレスを、Pingブロードキャストで確認しようと試みたところ、予想外に手がかかってしまいました。
Pingに応答しないサーバーはよく見かけるので、きっとPingを受信する側の設定が必要なのだと思い込んでいましたが、送信側(Windows機)の問題でした。

環境

送信側:Windows 7 Professional, Cygwinping
(受信側:Linux (debianっぽい) #本題にはあまり関係ない)

ブロードキャストPingを受信するためのファイアウォール設定


まず「セキュリティが強化されたWindowsファイアウォール」の設定。
コントロールパネルか、ネットワークの設定(コントロール パネル\ネットワークとインターネット\ネットワークと共有センター)の画面左下あたりから、普通のファイアウォール設定に入れます。そこの画面左にある「詳細設定」でこの画面へ。
たどり着いたら、「受信の規則」を左のツリーで選択し、右の「新しい規則」をクリックして新規作成。



規則の種類。TCPでもUDPでもないのでカスタム。



プロトコルとポート。Ping応答とはつまり、ICMPv4のEcho Replyなので、ICMPv4を選択。すると、「インターネット制御メッセージプロトコル(ICMP)の設定」の右側の、カスタマイズボタンが有効になるので押します。(このスクリーンショットだとドロップダウンメニューで隠れている…)



「特定の種類のICMP」を選びますが、Echo Reply (ICMP type=0)らしきものが一覧にないので、追加ボタンを押して追加。
最初は、Pingっぽいものあるじゃん!とエコー要求にチェックしてルールを作ってみたものの、要求はEcho Request (ICMP type=8)で別物なのでした。(諦めてファイアウォール切っちゃおうかと思った)

結果

~ % ping -b 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.105: icmp_seq=0 ttl=64 time=5 ms

応答きたー

Pitfall

最初、「アプリケーション指定すりゃ完了じゃね?」と考えましたが、これはダメでした。ブロードキャストだと、送信パケットから宛先ノードのアドレスが特定できないので、受信パケットを見て判断していい感じに通すことが出来ない、ということでしょう。それ(行きパケットで帰り道確保)が出来たら、そもそも設定なしで通ってるはず。