CML2を使いこなす。（その８：WAN Emulator）

# はじめに
ローカル環境や`CML`を使用した試験では、あまり遅延が無い状態で行うこととなりますが、実際のネットワークは距離や回線品質によりパケットが欠けたり、遅延があったり様々となります。

`CML2`ではそのような回線遅延を再現できる`WAN Emulator`がデフォルトで実装されているので、今回は`WAN Emulator`を試してみようと思います。

- 【前】[CML2を使いこなす。（その７：パケットキャプチャ）](https://qiita.com/sakai00kou/items/1686fb3a6f431bcd58b2)
- 【次】[CML2を使いこなす。（その９：ストレージの増設）](https://qiita.com/sakai00kou/items/28699d174bdd4ed28b76)

# WAN Emulatorの設定
`WAN Emulator`は機器間の通信で疑似的に遅延を発生させる機器であるため、機器の間に配置して使用します。

`WAN Emulator`を操作するためには、ルータ等の操作と同様、コンソールでログインして操作を行います。

設定方法としては簡単で、ログインすると以下の様なプロファイル選択画面が表示されるため、テストしようとしている環境に近いプロファイルを選択して、通信を発生させるだけになります。

![capture_11062021_074805.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/b8352267-6304-3b85-9096-140688f7e7d2.jpeg)

画面左下に表示されている値は左から`Latency`（遅延時間）、`Bandwidth`（帯域幅）、`Loss`（パケットロス率）となっており、プロファイルの値を任意の値に変更することも可能です。

また、画面左下の値には表示されていませんが、`Main Menu`画面の以下`Port Settings`より`Jitter`（ゆらぎ）も設定することができ、デフォルトではすべて0ms（ゆらぎ無し）となっております。

![capture_12062021_120640.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/79e7ada6-63db-9eef-3be3-78da74098826.jpeg)

以下各プロファイルのデフォルト設定。

|No.|プロファイル名|Latency|Bandwidth|Loss|Jitter|
|:--|:--|:--|:--|:--|:--|
|0|GPRS (good)|500ms|50kbit|2%|0ms|
|1|EDGE (good)|300ms|250kbit|1.5%|0ms|
|2|3G/HSDPA (good)|250ms|750kbit|1.5%|0ms|
|3|Dial-up (good)|185ms|40kbit|2%|0ms|
|4|DSL (poor)|70ms|2000kbit|2%|0ms|0ms|
|5|DSL (good)|40ms|8000kbit|0.5%|0ms|
|6|WIFI (good)|40ms|30000kbit|0.2%|0ms|
|7|Satellite|1500ms|1mbit|0.2%|0ms|
|8|WAN (limited)|80ms|256kbit|0%|0ms|
|9|WAN (unlimited)|80ms|100mbit|0%|0ms|

# WAN Emulatorのメニュー構成
コンソールから操作できるWAN Emulatorのメニュー画面は以下の様な画面構成となっております。

![capture_12062021_120532.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ccbd71bc-0272-8adc-e417-72cf0fc2297c.jpeg)

|No.|メニュー|説明|
|:--|:--|:--|
|1|Select Profile|上述のプロファイル選択画面|
|2|Port Settings|プロファイルの各種値を変更する|
|3|Current Settings|現在の設定をtcコマンドの形式で確認できる|
|4|iptraf|iptrafによるトラフィック表示|
|5|Shell|WAN EmulatorのOS操作|

`WAN Emulator`は`Alpine Linux`に`tr`コマンドによるトラフィック制御と`iptraf`コマンドによるトラフィック表示機能を実装したノードとなっています。

そのため、`tr`コマンド、`iptraf`コマンドの扱いを知っていれば、メニュー画面から設定できること以上の設定なども可能です。

例えば、メニュー画面からだと`iptraf`は基本の統計情報しか表示できませんが、`Shell`からシェルを起動し、以下の様にコマンドを実行すれば各インタフェースの詳細な統計情報も表示させることが可能となっています。

```shell:個別にiptrafを実行
iptraf-ng
```

# WAN Emulatorを使用した遅延確認
`WAN Emulator`による遅延を確認するため、以下の様にルータ2台を接続し、一方はルータ間直接、もう一方は間に`WAN Emulator`を挟んだ構成としてみます。

![capture_12062021_123428.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ae157c29-8179-7972-6042-4c22f765a573.jpeg)

`WAN Emulator`の設定プロファイルは`GPRS`にしてルータ間でそれぞれPingを実行してみた結果が以下となります。

```shell:ルータ間直結の構成の場合
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/3 ms
```

```shell:間にWAN_Emulatorを挟んだ構成の場合
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1003/1003/1004 ms
```

`WAN Emulator`を挟んだ構成のほうが明らかに応答時間がかかっているのが確認できるかと思います。

また、`GPRS`の`Latency`は500msなのに1000ms程度で表示されているのはパケットの往復分となるので、遅延を設定する際には注意しましょう。

# おわりに
中々`WAN Emulator`を使う機会は少ないかもしれませんが、数千キロ離れた拠点間や全国からの通信を想定したネットワークをテストする際に役立つものとなります。

`WAN Emulator`の操作自体は簡単なので、何かの機会に使えるよう頭の片隅にしまっておけばどこかで役に立つかもしれません。