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

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

## ネットワーク
２つのVirtual Machine(VM)を用意する。ここではEthernet Switch AとEthernet Switch Bとし、それぞれが２つのネットワークI/Fをもち、それらがネットワークブリッジされている。
![構成図.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f836af33-fb6a-44eb-618b-29989820947e.png)

### Virtualboxでの設定
２つのVMでネットワークアダプタ（ネットワークI/F）を２つ作成。"intnet1"および"intnet2"という内部ネットワークをつくり、プロミスキャスモードは"すべて許可"、MACアドレスはすべてのアダプタで重複しないものを選ぶ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/18a00e30-0020-5cd6-26d0-a432537a8516.png", width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ef1f607b-41e3-8446-c127-e6a4e61a2008.png", width=70%>
これにより、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でのパケット。
![Wireshark（通常）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c8a10e91-0c3c-1096-225f-17af27132881.png)
パケットを発生させる。

```
root@live:~# ping6 ff02::1
```
全ノードあてのマルチキャストだけどいいでしょう。
![Wireshark（STPあり）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ef87d5c1-6724-d8a9-bb9c-1dcef3401dca.png)
conkyによる負荷状況。
![負荷（STPあり）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/cdfb2165-0575-e07f-ba97-014f02117916.png)
いたってノーマル。

### 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の状況。
![Wireshark（発散）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e0e66619-293a-6358-0fe8-b73626920b29.png)
ですが、そのうちこんな感じになる。
![Wireshark（発散３）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/aaeb2421-85f8-7072-bc2f-8fd4ff5025ac.png)
パケット番号に着目。conkyによる負荷状況はこちら。
![負荷（死亡）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/3f99cfd1-f87e-129a-7d4a-9d7c4b7f6328.png)

ファンが激しく回り続けて、VMがお亡くなりなることもありました。STPをオフにすると負荷は下がります（当然）。
![負荷（収束）.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a35d8306-148e-7370-a6f8-36f5bf6391d1.png)

### まとめ
実験成功。でもやってはいけない。