Virtualboxでブロードキャストストーム


VirtualboxのVMを使ってブロードキャストストームをつくってみる

ネットワーク

2つのVirtual Machine(VM)を用意する。ここではEthernet Switch AとEthernet Switch Bとし、それぞれが2つのネットワークI/Fをもち、それらがネットワークブリッジされている。

Virtualboxでの設定

2つのVMでネットワークアダプタ(ネットワークI/F)を2つ作成。"intnet1"および"intnet2"という内部ネットワークをつくり、プロミスキャスモードは"すべて許可"、MACアドレスはすべてのアダプタで重複しないものを選ぶ。


これにより、VMに用いたLinux(Busterdog)のネットワークI/Fの"eth0"が内部ネットワーク"intnet1"、"eth1"が内部ネットワーク"intnet2"に割り当てられる。

Linuxでの設定

起動時にネットワークブリッジが構成されるように、"/etc/network/interfaces"を設定する。起動時にSTP(Spanning Tree Protocol)はON。(でないと危険)

root@live:~# cat /etc/network/interfaces
auto eth0
iface eth0 inet static
  address 0.0.0.0
auto eth1
iface eth1 inet static
  address 0.0.0.0

auto br0
iface br0 inet static
  address 0.0.0.0
  bridge_ports eth0 eth1
  bridge_stp on

起動後の状態確認。

root@live:~# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::a00:27ff:feb4:1e00  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:b4:1e:00  txqueuelen 1000  (イーサネット)
        RX packets 18  bytes 1968 (1.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 866 (866.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:27:b4:1e:00  txqueuelen 1000  (イーサネット)
        RX packets 102  bytes 7290 (7.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1076 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:27:cc:b0:74  txqueuelen 1000  (イーサネット)
        RX packets 99  bytes 6974 (6.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 180 (180.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 340  bytes 24672 (24.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 340  bytes 24672 (24.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@live:~# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.080027b41e00   yes         eth0
                                        eth1

ブリッジネットワークI/F"br0"にはIPv6アドレスが割り当てられている。

実験

STPオン(起動時状態)

ping6送付前のWiresharkでのパケット。

パケットを発生させる。

root@live:~# ping6 ff02::1

全ノードあてのマルチキャストだけどいいでしょう。

conkyによる負荷状況。

いたってノーマル。

STPオフ

コマンドでSTPをオフにする。

root@live:~# brctl stp br0 off
root@live:~# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.080027b41e00   no          eth0
                                        eth1

同じくパケットを発生させる。

root@live:~# ping6 ff02::1

直後のWiresharkの状況。

ですが、そのうちこんな感じになる。

パケット番号に着目。conkyによる負荷状況はこちら。

ファンが激しく回り続けて、VMがお亡くなりなることもありました。STPをオフにすると負荷は下がります(当然)。

まとめ

実験成功。でもやってはいけない。