レイヤー 2 インターフェイス (TAP) をエンドポイントとして使用する小さなトンネリング アプリを作成しています。OSX でこれをテストする過程で、トンネルが単一の OSX マシンで実行されているときと、OSX と Linux ボックスの間でトンネリングされているときの両方で、トンネルで予期しないあらゆる種類のトラフィックが発生していることに気付きました。このトラフィックを除外したいのですが、これを行う最善の方法は何だろうと考えています。
トンネルは次のようになります (両方のエンドポイントが同じマシン上にある可能性があることに注意してください)。
tap0 -> tunnel app -> UDP tunnel -> tunnel app -> tap1
注目すべきトラフィックは、宛先ポート 5353 の Bonjour パケットと ICMP/IGMP です。マルチキャストは、TAP インターフェイスで有効になっています。この種のトラフィックをブロックしたいと思います。これを行うことについての私の考え:
- インターフェイスでマルチキャストをオフにします (OSX では機能しません。以下を参照してください)。
- 使用する
ebtables
- トンネル アプリ内のインターフェイスから送信されるパケットを解析し、そこで無視する
これを行うためのより良い/より簡単な方法はありますか?
OSX インターフェイス (tap0 と呼びましょう) でマルチキャストをオフにしようとしましたが、エラーが発生します。
$ ifconfig tap0 -multicast
ifconfig: -multicast: bad value
編集: もう少し調べてみると、UNIX と BSD の ifconfig には異なるオプションがあるようです。OSX/BSD の特定のインターフェイスでマルチキャスト/ICMP トラフィックをブロックする別の方法はありますか?
ここにifconfigの出力があります...
OSX (osxtuntap を使用):
$ ifconfig tap1
tap1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 92:d9:e6:65:5a:8c
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
open (pid 17121)
Linux:
$ ifconfig tunX
tunX Link encap:Ethernet HWaddr 4a:29:02:e6:b0:b9
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::4829:2ff:fee6:b0b9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)