この投稿は vExperts Advent Calendar 2019 の8日目の記事です。
今回は「回線遅延シミュレータ」の作り方を掲載します。
なぜ、VMwareネタで「回線遅延シミュレータ」を書くかというと、VDI環境で、国内遠地(回線細い)、海外から接続時のトラブルの切り分け、事前検証で意外と重宝しているので、ご紹介します。
(東京オリンピックに向けてVDIでのテレワークも増えているのでニーズもある?)
一点、Blogを見て試す方向けのご注意です。手順を試すと本当に通信が遅延します。試す場合は、評価環境などで事前にお試しの上、自己責任で実施してください。
■回線遅延シミュレータとは?
Linuxのtcコマンドを使って意図的に、遅延やパケットロスなど発生させることが出来ます。(命名は適当です。)
【実際に1ms~1,000msでランダムに遅延させたときの結果】
VDIによくある問い合わせで「何msの応答速度までならストレスなく使えますか?」、「遠地からアクセスしているからネットワークが遅い。だから画面描写が遅くて使えない。」を手軽に検証することが出来ます。
VDIの場合は、10ms~300msぐらいまで、動画で撮り残しておくと指標になって良いかも。また、バックアップやストレージの遠隔地へのレプリケーションの時間確認や回線が細い拠点からのクラウドサービスを利用した場合の体感確認などでも使えます。
■構成イメージ
主にこの2つの使い方があるかと思います。
・遅延させたい機器の前に置くパターン
こちらだとシンクラ端末や物理機器での遅延検証ができます。
私は古いノートパソコンにUSB-LANアダプタ付けて検証しています。
・遅延させたいVMの前に置くパターン
こちらは今回、Blogを書くにあたり、VMware Workstation上で作ってみました。仮想環境さえあれば、物理的なものを準備しないで良いので、比較的簡単にできると思います。(十数年ぶりにVMware Workstation使ってみました。)
VDIだと、Connection Brokerやその先のVMの前に置くと良いと思います。
ネットワーク機器(Qos)や専用機器でも似たようなことできるかも。(やったことないけど)
■作り方
手順自体は、難しくないですが、記事は長めです。
普通にCentOSを入れられる人は、”1”、”2”は読み飛ばしてください。
今回 、Workstaionで作っていますが、ノートPCやESXiでも似た手順で作れます。
■1. 仮想マシンの作成(NIC2枚)
・CentOS7をダウンロードしてきます。
https://www.centos.org/download/
(他のLinuxでも良いです。)
・VMware Workstaion Proを起動します。
・[新規仮想マシンの作成]をクリックします。
・[次へ]をクリックします。
・[インストーラ ディスクイメージファイル]にlinuxのISOをマウントし、[次へ]。
・[使用マシン名]、[場所]を入れて[次へ]をクリックします。
・[次へ]をクリックします。
・[ハードウェアをカスタマイズ]をクリックします。
・[ネットワーク アダプタ 2]を作成し、[LAN セグメント]のチェックボックスを選びます。
[LANセグメント]ボタンを押して[seg1]を追加。[閉じる]をクリックします。
・[完了]をクリックします。
■2. CentOSのインストール
・仮想マシンが起動してくるので、コンソールで Enterを押します。
・[日本語]を選択し、[続行]をクリックします。
・[インストール先]をクリックします。
・[完了]をクリックします。
・[インストールの開始]をクリックします。
インストールが開始されます。待っている間にrootのパスワードを設定します。
・パスワードを入力し[完了]。
・インストールが完了すると次の画面になります。[再起動]をクリックします。
■3. CentOSをブリッジに設定
・インストール後、rootでCentOSへログインします。
・CentOS のDVDをマウントしPakagesに移動します。
mount /dev/cdrom /mnt
cd /mnt/Pakages
・bridge-utilsをインストールします。
rpm –i bridge-utils-1.5.-9.el.x86_64.rpm
インストールされたことを確認。
bridge-utils-1.5.-9.el.x86_64.
・インターフェースを確認します。
nmcli device
CentOS にens33、ens34の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
・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
・network サービスを再起動しNICの状態を確認します。
service network restart
nmcli device
br0 ができていて、ens33、ens34含めてconnectedになっていれば、OKです。
実際に遅延させるためのコマンドtcは、CentOS7 には入っていたので、
ここまでで、回線遅延シミュレータ自体の構築は完了です。
・対象VMで右クリックし[設定]をクリックします。
・ネットワークアダプタを[LANセグメント]、[seg1]にし、CentOS経由で通信するように変更します。
■5. 回線遅延のやり方
CentOSにログインします。
・100ms 遅延させる場合は次のコマンドを実行します。
tc qdisc add dev ens33 root netem delay 100ms
PINGによる応答速度の確認。
・遅延をやめる場合は次のコマンドを実行します。
tc qdisc del dev ens33 root
・1ms-1000msでランダムに 遅延させる場合は次のコマンドを実行します。
tc qdisc add dev ens33 root netem delay 1ms 1000ms
PING応答の確認。
・パケットロスさせる場合は次のコマンドです。
tc qdisc add dev eth0 root netem loss 15%
遅延とパケットロスを組み合わせて使うことも可能です。
tc qdisc add dev eth0 root netem delay 50ms 80ms loss 0.5%
以上で、回線遅延シミュレータのご紹介は終わりです。
駆け足で作ったので、誤記や手順の漏れ、わかりづらいところがあるかもしれません。ご不明な点はコメントして頂けば回答します。