GNS3は期待通り断線を模擬してくれました。期待が膨らみます。

ルータをまたいで繋がっているサーバ・プログラムをデバッグする必要があり、物理マシンでネットワーク構成を再現するのはたいへんなことから、仮想環境で模擬することができないか模索しました。今のところ、[GNS3](https://www.gns3.com/)を使えばなんか実現できそうなことが分かりました。

# 課題

自宅[^homeenv]でリッチなネットワークとサーバを模擬する。例えば、以下のようなトポロジ。`VPCS`[^whatisvpcs]、`C6_0`と`C6_1`は、同じネットワークアドレスとします。
![ss_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72237/e1205d5e-1552-dd26-2cea-e762452bd548.png)

GNS3が無い場合、すなわちVirtualBox上の仮想マシンとしては直結[^directline]なのでpingは通ります。もし、GNS3がネットワークを模擬できるなら、断線するとpingは通らなくなります。

[^homeenv]: ルータやスイッチはない、サーバもない。
[^directline]: `C6_0`及び`C6_1`のeth0(NIC)は、VirtualBox上でホストオンリー・アダプタを割り当てている。つまり、仮想アダプタ（仮想ネットワークであり物理的な配線はない）。
[^whatisvpcs]: Virtual PC Simulator。pingを返すだけのPC模擬（に見える）。

# 実験

結線時、断線時ふたつの条件下でお互いにpingします。VirtualBoxの設定は変更しません。IPアドレスの指定などすべてGNS3からおこないます。

## 環境

 * ホストOS : Ubuntu 18.04(64bit)
 * ゲストOS : CentOS 6.10(32bit)　※C6_0, C6_1
 * GNS3 : 2.1.21
 * VirtualBox : 5.2.18_Ubuntu r123745

# 結果

## 結線時

```text:C6_0→C6_1
CentOS release 6.10 (Final)
Kernel 2.6.32-754.15.3.el6.i686 on an i686

localhost.localdomain login: root
Password: 
Last login: Sun Jul 28 09:44:07 on ttyS0
[root@localhost ~]# ifconfig eth0 192.168.100.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:19:9D:FF  
          inet addr:192.168.100.10  Bcast:192.168.100.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1100 (1.0 KiB)  TX bytes:2604 (2.5 KiB)
[root@localhost ~]# ping 192.168.100.11
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=1.03 ms
64 bytes from 192.168.100.11: icmp_seq=2 ttl=64 time=1.25 ms
64 bytes from 192.168.100.11: icmp_seq=3 ttl=64 time=1.39 ms
64 bytes from 192.168.100.11: icmp_seq=4 ttl=64 time=1.35 ms
64 bytes from 192.168.100.11: icmp_seq=5 ttl=64 time=1.35 ms

--- 192.168.100.11 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4569ms
rtt min/avg/max/mdev = 1.030/1.277/1.390/0.131 ms
[root@localhost ~]# 

```

C6_1→C6_0は同様の結果なので省略します。

## 断線時
![ss_20190728_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72237/353aacd1-252e-f1aa-2684-31dbd5f7f1bc.png)

```text:C6_0→C6_1
[root@localhost ~]# ping 192.168.100.11
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
From 192.168.100.10 icmp_seq=9 Destination Host Unreachable
From 192.168.100.10 icmp_seq=10 Destination Host Unreachable
From 192.168.100.10 icmp_seq=11 Destination Host Unreachable
From 192.168.100.10 icmp_seq=13 Destination Host Unreachable
From 192.168.100.10 icmp_seq=14 Destination Host Unreachable
From 192.168.100.10 icmp_seq=15 Destination Host Unreachable

```

C6_1→C6_0は同様の結果なので省略します。

# 考察

期待通り、GNS3上の設定を変更するだけで、あたかも断線したかのようにpingが通らなくなりました。

GNS3には、ルータを加えることもできるようです。Cisco IOS[^ciscoruteros]があると、CISCOのルータを模擬することもできるようです。むしろ、ネット上の参考文献を拝見する限り、GNS3は、CCNA/CCNPの教材として使われている方が多いようです。

[^ciscoruteros]: Cisco Internetwork Operating System。CISCOルータのソフトウェア。

今回の実験とネット上の情報を拝見する限り、期待通りネットワークを模擬することができそうです。今回はpingだけだったので、今後は、アプリケーション層の通信やマルチキャスト等も期待通りの結果になるか（物理的なネットワークを模擬するツール足りうるか）試してみたいと思います。期待が膨らみます。

# 参考文献

 * [GNS3](https://www.gns3.com/)