VMware Fusionで複数のVMをホストオンリーネットワークに接続し、VMのひとつで tcpdump を動かしてみる。そうすると、ブロードキャスト以外のパケットまで見えることに気づく。まるでリピータハブに接続したときのように。
環境
- MacOS 10.6.8
- VMware Fusion 4.1.1
例
VMを3つ作って(OSは、tcpdump や ping が使えるなら何でもよい)、それらのNICをホストオンリーネットワークにつなぐ。
ホスト(MacOS)で認識されているNICのうち、"vmnet1"がVMwareのホストオンリーネットワーク用の仮想ネットワークアダプタ。以下のように、ネットワークアドレスは"192.168.105.0"になっている。
$ ifconfig vmnet1 vmnet1: flags=8863mtu 1500 ether 00:50:56:c0:00:01 inet 192.168.105.1 netmask 0xffffff00 broadcast 192.168.105.255
なので、VMを起動するとVMのNICには"192.168.105.128/24" や "192.168.105.129/24" などが設定される。
$ ip addr show eth0 2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:0a:48:1b brd ff:ff:ff:ff:ff:ff inet 192.168.105.128/24 brd 192.168.105.255 scope global eth0
準備ができたら、まず 1つのVMで "tcpdump -i eth0" を実行し、残り2つの VM間で ping をしてみる。すると tcpdump の出力に ping による通信が出てくる。
次に、プロミスキャスモードOFFの'-p'オプションをつけて tcpdump を実行して、同様に ping を実行すると、今度は出てこない。プロミスキャスモードが効く、つまり switched network には接続されていないときの動作になっている。
物理的な環境だとスイッチ(ングハブ)を常に使うから、VMware Fusionの世界もスイッチだと思い込んでいたが、違うらしい。また、VMwareのエディション等によっても挙動が変わってくる模様。