Monthly Virtualization Blog

仮想化関連(特にVMUG)の記事をアップします。投稿は個人の見解であり、所属する組織を代表するものではありません。

回線遅延シミュレータの作り方(VDIの遅延検証で便利)

この投稿は vExperts Advent Calendar 2019 の8日目の記事です。

adventar.org

 

今回は「回線遅延シミュレータ」の作り方を掲載します。

 

なぜ、VMwareネタで「回線遅延シミュレータ」を書くかというと、VDI環境で、国内遠地(回線細い)、海外から接続時のトラブルの切り分け、事前検証で意外と重宝しているので、ご紹介します。

(東京オリンピックに向けてVDIでのテレワークも増えているのでニーズもある?)

 

一点、Blogを見て試す方向けのご注意です。手順を試すと本当に通信が遅延します。試す場合は、評価環境などで事前にお試しの上、自己責任で実施してください。

 

■回線遅延シミュレータとは?

Linuxのtcコマンドを使って意図的に、遅延やパケットロスなど発生させることが出来ます。(命名は適当です。)

 

【実際に1ms~1,000msでランダムに遅延させたときの結果】

f:id:MT9276:20191207232149p:plain

VDIによくある問い合わせで「何msの応答速度までならストレスなく使えますか?」、「遠地からアクセスしているからネットワークが遅い。だから画面描写が遅くて使えない。」を手軽に検証することが出来ます。

VDIの場合は、10ms~300msぐらいまで、動画で撮り残しておくと指標になって良いかも。また、バックアップやストレージの遠隔地へのレプリケーションの時間確認や回線が細い拠点からのクラウドサービスを利用した場合の体感確認などでも使えます。

 

■構成イメージ

主にこの2つの使い方があるかと思います。

・遅延させたい機器の前に置くパターン

f:id:MT9276:20191207232232p:plain

こちらだとシンクラ端末や物理機器での遅延検証ができます。

私は古いノートパソコンにUSB-LANアダプタ付けて検証しています。

 

・遅延させたいVMの前に置くパターン

f:id:MT9276:20191207232251p:plain

こちらは今回、Blogを書くにあたり、VMware Workstation上で作ってみました。仮想環境さえあれば、物理的なものを準備しないで良いので、比較的簡単にできると思います。(十数年ぶりにVMware Workstation使ってみました。)

VDIだと、Connection Brokerやその先のVMの前に置くと良いと思います。

ネットワーク機器(Qos)や専用機器でも似たようなことできるかも。(やったことないけど)

 

■作り方

手順自体は、難しくないですが、記事は長めです。

普通にCentOSを入れられる人は、”1”、”2”は読み飛ばしてください。

  1. 仮想マシンの作成(NIC2枚)
  2. CentOSのインストール
  3. CentOSをブリッジに設定
  4. 遅延させたいVMCentOS経由の通信に変更
  5. 回線遅延のやり方

 

今回 、Workstaionで作っていますが、ノートPCやESXiでも似た手順で作れます。

 

■1. 仮想マシンの作成(NIC2枚)

・CentOS7をダウンロードしてきます。

https://www.centos.org/download/

(他のLinuxでも良いです。)

 

VMware Workstaion Proを起動します。

・[新規仮想マシンの作成]をクリックします。

f:id:MT9276:20191207232645p:plain

・[次へ]をクリックします。

f:id:MT9276:20191207232656p:plain

・[インストーラ ディスクイメージファイル]にlinuxのISOをマウントし、[次へ]。

f:id:MT9276:20191207232719p:plain

・[使用マシン名]、[場所]を入れて[次へ]をクリックします。

f:id:MT9276:20191207232731p:plain

・[次へ]をクリックします。

f:id:MT9276:20191207232757p:plain

・[ハードウェアをカスタマイズ]をクリックします。

f:id:MT9276:20191207232810p:plain

・[ネットワーク アダプタ 2]を作成し、[LAN セグメント]のチェックボックスを選びます。

f:id:MT9276:20191207232827p:plain

[LANセグメント]ボタンを押して[seg1]を追加。[閉じる]をクリックします。

・[完了]をクリックします。

 f:id:MT9276:20191207232852p:plain

■2. CentOSのインストール

仮想マシンが起動してくるので、コンソールで Enterを押します。

f:id:MT9276:20191207232924p:plain

・[日本語]を選択し、[続行]をクリックします。

f:id:MT9276:20191207232936p:plain

・[インストール先]をクリックします。

f:id:MT9276:20191207232948p:plain

・[完了]をクリックします。

f:id:MT9276:20191207233013p:plain

・[インストールの開始]をクリックします。

f:id:MT9276:20191207233030p:plain

インストールが開始されます。待っている間にrootのパスワードを設定します。

f:id:MT9276:20191207233047p:plain

・パスワードを入力し[完了]。

f:id:MT9276:20191207233103p:plain

・インストールが完了すると次の画面になります。[再起動]をクリックします。

f:id:MT9276:20191207233121p:plain

■3. CentOSをブリッジに設定

・インストール後、rootでCentOSへログインします。

f:id:MT9276:20191207233148p:plain

CentOS のDVDをマウントしPakagesに移動します。

mount /dev/cdrom /mnt

cd /mnt/Pakages

 

・bridge-utilsをインストールします。

rpm –i bridge-utils-1.5.-9.el.x86_64.rpm

インストールされたことを確認。

rpm –qa | grep bridge

bridge-utils-1.5.-9.el.x86_64.

 

・インターフェースを確認します。

nmcli device

f:id:MT9276:20191207233408p:plain

CentOS にens33、ens34のNICがあり、接続されていないことがわかります。

別名の場合は、以降は読み替えてください。

 

NICの設定をいじるため、ディレクトを移動します。

cd /etc/sysconfig/network/network-script/

 

NICの設定をバックアップします。

cp ifcfg-ens33 old-ens33

cp ifcfg-ens34 old-ens34

 

・ifcfg-br0作成します。

vi  ifcfg-br0 

 

DEVICE=br0

TYPE=Bridge

ONBOOT=yes

BOOTPROTO=none

DELAY=0

STP=off

 f:id:MT9276:20191207233313p:plain

 

・ifcfg-ens33、ifcfg-ens34を、viなどで次のように編集をします。

 

・ifcfg-ens33

DEVICE=ens33

TYPE=Ethernet

UUID= ifcfg-ens33に書かれているまま

ONBOOT=yes

NM_CONTROLLED=YES

BOOTPROTO=none

BRIDGE=br0

 

・ifcfg-ens34

DEVICE=ens34

TYPE=Ethernet

UUID= ifcfg-ens34に書かれているまま

ONBOOT=yes

NM_CONTROLLED=YES

BOOTPROTO=none

BRIDGE=br0

 

f:id:MT9276:20191207233443p:plain

・network サービスを再起動しNICの状態を確認します。

service network restart

nmcli device

f:id:MT9276:20191207233508p:plain

br0 ができていて、ens33、ens34含めてconnectedになっていれば、OKです。

実際に遅延させるためのコマンドtcは、CentOS7 には入っていたので、

ここまでで、回線遅延シミュレータ自体の構築は完了です。

 

■4. 遅延させたいVMCentOS経由の通信に変更

・対象VMで右クリックし[設定]をクリックします。

f:id:MT9276:20191207233550p:plain

ネットワークアダプタを[LANセグメント]、[seg1]にし、CentOS経由で通信するように変更します。

f:id:MT9276:20191207233606p:plain

■5. 回線遅延のやり方

CentOSにログインします。

・100ms 遅延させる場合は次のコマンドを実行します。

tc qdisc add dev ens33 root netem delay 100ms

f:id:MT9276:20191207233637p:plain

PINGによる応答速度の確認。

f:id:MT9276:20191207233647p:plain

・遅延をやめる場合は次のコマンドを実行します。

tc qdisc del dev ens33 root

 

・1ms-1000msでランダムに 遅延させる場合は次のコマンドを実行します。

tc qdisc add dev ens33 root netem delay 1ms 1000ms

f:id:MT9276:20191207233700p:plainPING応答の確認。

f:id:MT9276:20191207233725p:plain 

・パケットロスさせる場合は次のコマンドです。

tc qdisc add dev eth0 root netem loss 15%

f:id:MT9276:20191207233750p:plain

遅延とパケットロスを組み合わせて使うことも可能です。

tc qdisc add dev eth0 root netem delay 50ms 80ms loss 0.5%

 

以上で、回線遅延シミュレータのご紹介は終わりです。

駆け足で作ったので、誤記や手順の漏れ、わかりづらいところがあるかもしれません。ご不明な点はコメントして頂けば回答します。