VyOS でネットワーク遅延やロスを発生させるには
WAN を模したテストをしている場合、遅延や損失(パケットロス)、帯域制限等を擬似的に発生させ、意図的に品質の悪い回線を模したい場合があります。そういった場合には以下のような手段があるかと思います。
- FreeBSD で DummyNet を使う
- Linux で tc や WANem を使う
- Windows で Wlinee を使う
- Vyatta や VyOS の NetworkEmulator 機能を使う
今回は VyOS の NetworkEmulator 機能を簡単にテストしてみます。
前提条件
以下の構成でテストします。
各々のバージョンは以下の通りです。
- Ubuntu 14.04.1 LTS
- VyOS 1.1.3
設定の基本
NetworkEmulator 機能を設定するには、大凡以下のような流れになります。
- NetworkEmulator 用の TrafficPolicy を設定する
- 設定した TrafficPolicy をインターフェイスに設定する
TrafficPolicy を設定する際に「遅延を挿入するのか?」「損失を発生させるのか?」等、どういったネットワーク品質を擬似的に再現するのかを定義します。注意点ですが、(本来の TrafficPolicy 自体は in / out 両方に設定可能なのですが)NetworkEmulator として利用する場合のみ、インターフェイスの out 側にしか TrafficPolicy を設定することは出来ません。
遅延を設定してみる
以下のパラメータに従い、遅延を設定してみます。
項目 |
値 |
インターフェイス |
eth2 |
向き |
out |
ポリシー名 |
DELAY-100 |
遅延(ミリ秒) |
100msec |
VyOS での設定例は以下の通りです。
| set traffic-policy network-emulator DELAY-100 network-delay 100
set interfaces ethernet eth2 traffic-policy out DELAY-100
commit
|
commit して設定を反映すると、トラフィックに遅延が挿入されます。下記は Ubuntu-A から Ubuntu-B に Ping(hping3)を実施中に VyOS で遅延を挿入した際の実行例です。シーケンス番号 30 と 31 の間で commit が実行された為、シーケンス番号 31 から 100msec の遅延が発生しているのが分かります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | ## hping3 --icmp --fast 172.16.2.1
・
・
・
len=46 ip=172.16.2.1 ttl=63 id=9537 icmp_seq=26 rtt=4.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9538 icmp_seq=27 rtt=4.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9539 icmp_seq=28 rtt=4.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9540 icmp_seq=29 rtt=4.5 ms
len=46 ip=172.16.2.1 ttl=63 id=9541 icmp_seq=30 rtt=4.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9542 icmp_seq=31 rtt=103.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9543 icmp_seq=33 rtt=103.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9544 icmp_seq=34 rtt=103.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9545 icmp_seq=35 rtt=103.5 ms
len=46 ip=172.16.2.1 ttl=63 id=9546 icmp_seq=36 rtt=103.4 ms
|
損失を設定してみる
以下のパラメータに従い、損失を設定してみます。
項目 |
値 |
インターフェイス |
eth2 |
向き |
out |
ポリシー名 |
LOSS-50 |
損失(%) |
50% |
VyOS での設定例は以下の通りです。
| set traffic-policy network-emulator LOSS-50 packet-loss 50
set interfaces ethernet eth2 traffic-policy out LOSS-50
commit
|
遅延の場合と同乗、commit して設定を反映すると、トラフィックに損失が挿入されます。下記例の場合、シーケンス番号 20 辺りで commit が実行されました。以降、パケットのロスが発生していることが分かります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | ## hping3 --icmp --fast 172.16.2.1
・
・
・
len=46 ip=172.16.2.1 ttl=63 id=9660 icmp_seq=16 rtt=4.5 ms
len=46 ip=172.16.2.1 ttl=63 id=9661 icmp_seq=17 rtt=4.5 ms
len=46 ip=172.16.2.1 ttl=63 id=9662 icmp_seq=18 rtt=4.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9663 icmp_seq=19 rtt=4.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9664 icmp_seq=20 rtt=4.4 ms
len=46 ip=172.16.2.1 ttl=63 id=9665 icmp_seq=21 rtt=3.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9666 icmp_seq=27 rtt=3.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9667 icmp_seq=30 rtt=3.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9668 icmp_seq=31 rtt=2.2 ms
len=46 ip=172.16.2.1 ttl=63 id=9669 icmp_seq=32 rtt=2.2 ms
len=46 ip=172.16.2.1 ttl=63 id=9670 icmp_seq=33 rtt=2.2 ms
len=46 ip=172.16.2.1 ttl=63 id=9671 icmp_seq=36 rtt=2.2 ms
len=46 ip=172.16.2.1 ttl=63 id=9672 icmp_seq=37 rtt=2.3 ms
len=46 ip=172.16.2.1 ttl=63 id=9673 icmp_seq=39 rtt=2.3 ms
|