読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

VyOS でネットワーク遅延やロスを発生させるには

Network VyOS

WAN を模したテストをしている場合、遅延や損失(パケットロス)、帯域制限等を擬似的に発生させ、意図的に品質の悪い回線を模したい場合があります。そういった場合には以下のような手段があるかと思います。

今回は VyOS の NetworkEmulator 機能を簡単にテストしてみます。

前提条件

以下の構成でテストします。

f:id:sig9:20150201011049p:plain

各々のバージョンは以下の通りです。

  • Ubuntu 14.04.1 LTS
  • VyOS 1.1.3

設定の基本

NetworkEmulator 機能を設定するには、大凡以下のような流れになります。

  1. NetworkEmulator 用の TrafficPolicy を設定する
  2. 設定した TrafficPolicy をインターフェイスに設定する

TrafficPolicy を設定する際に「遅延を挿入するのか?」「損失を発生させるのか?」等、どういったネットワーク品質を擬似的に再現するのかを定義します。注意点ですが、(本来の TrafficPolicy 自体は in / out 両方に設定可能なのですが)NetworkEmulator として利用する場合のみ、インターフェイスの out 側にしか TrafficPolicy を設定することは出来ません。

f:id:sig9:20150201014153p:plain

遅延を設定してみる

以下のパラメータに従い、遅延を設定してみます。

項目
インターフェイス 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 の遅延が発生しているのが分かります。

# 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 が実行されました。以降、パケットのロスが発生していることが分かります。

# 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