背景
ネットワーク機器のテストするときによくやる内容を備忘録的に書いておく
環境
・ESXi
・Ubuntu22.04
・その他 仮想ネットワーク機器達
概要構成
NW機器 - ポートグループ1 - ens224_Ubuntu_ens192 - ポートグループ2 - NW機器
ens160はデフォルトの最初のNICなのでそれ以外の2つを使う感じにした
追加2つのNICを入れると勝手にens192やens224このような番号が付くはず
2つのNICをブリッジ設定にすることで回線エミュレータのようにつかえる
ESXiのポートグループのセキュリティ設定を
無差別モード、MAC アドレス変更、偽装転送をOKにしておくのが重要
※Ubuntu側でも同じようなコマンドをやってあげる 後述
Ubuntu ブリッジ作成
# APT install
sudo apt get install bridge-utils
# Bridge interface
brctl addbr br0
#ip add addr 192.168.x.x dev br0 #if you need
# Flush ip address
ip addr flush ens224
ip addr flush ens192
# Promisc ON
ip link set dev ens224 promisc on
ip link set dev ens192 promisc on
# Interface DOWN/UP
ip link set dev ens224 down
ip link set dev ens192 down
ip link set dev ens224 up
ip link set dev ens192 up
ip link set dev br0 up
# Check command
brctl show
# Sample
# bridge name bridge id STP enabled interfaces
# br0 xxxx.xxxxxxxx no ens224
ens192
Ubuntu TCコマンド
TCコマンドはパケットの出る方向に効力がある。
例えば、ens224-->ens192に対してパケットが流れている場合
"eno192"を指定してtcコマンドを実行する
遅延100ms ロス5%の場合
sudo tc qdisc add dev ens224 root netem delay 100ms loss 5%
sudo tc qdisc add dev ens192 root netem delay 100ms loss 5%
アップロード方向 (ens224) の帯域制限
アップロードで使用するインターフェースens224に10Mbpsの帯域制限を適用
# 上り方向に HTB を設定
sudo tc qdisc add dev ens224 root handle 1: htb default 10
# HTB のルートクラスを作成し、最大帯域を指定
sudo tc class add dev ens224 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
# デフォルトクラスを作成
sudo tc class add dev ens224 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
ダウンロード方向 (ens192) の帯域制限
ダウンロードで使用するインターフェース ens192に10Mbpsの帯域制限を適用
# 下り方向に HTB を設定
sudo tc qdisc add dev ens192 root handle 1: htb default 10
# HTB のルートクラスを作成し、最大帯域を指定
sudo tc class add dev ens192 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
# デフォルトクラスを作成
sudo tc class add dev ens192 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
遅延100ms ロス5%、10Mbps帯域制限 全部まとめて設定する
# アップロード方向 (ens224)
sudo tc qdisc add dev ens224 root handle 1: htb default 10
sudo tc class add dev ens224 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo tc class add dev ens224 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
sudo tc qdisc add dev ens224 parent 1:10 handle 10: netem delay 100ms loss 5%
# ダウンロード方向 (ens192)
sudo tc qdisc add dev ens192 root handle 1: htb default 10
sudo tc class add dev ens192 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo tc class add dev ens192 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
sudo tc qdisc add dev ens192 parent 1:10 handle 10: netem delay 100ms loss 5%
確認
sudo tc qdisc show dev ens224
sudo tc qdisc show dev ens192
削除
遅延、ロス、帯域制限の値を変えるときには一回これで消す
sudo tc qdisc del dev ens224 root
sudo tc qdisc del dev ens192 root
参考
tcコマンドでネットワークの障害を再現して動作検証する方法
https://zenn.dev/ryoma_dq/articles/20241126-network-tc
Ubuntuのブリッジ化とネットワークエミュレート(簡易版) - Qiita
https://qiita.com/ikedaS-06/items/6013c3f733140b18f052
tcコマンドでNetworkの帯域と遅延を制御してみてみた - Qiita
https://qiita.com/shirok/items/f57e0ecd86abec33a087
Linux日和~Linuxネットワーク設定:netemでパケット遅延、ロス~
https://linux-biyori.sakura.ne.jp/setting/st_netem.php
tcコマンドでネットワーク遅延やパケットロスを疑似的に発生させるメモ
https://inokara.hateblo.jp/entry/2016/02/14/191853
Linuxでネットワーク遅延を模倣する方法
https://ittrip.xyz/soft/linux/simulate-network-latency-linux
Linux上でネットワークの帯域制限と遅延を設定する
https://blog.bitmeister.jp/?p=3930
tcconfigを使って、ネットワークの帯域制限や遅延を再現する方法 - Qiita
https://qiita.com/ntrlmt/items/67ac87d7f8852c4ed68b
tcコマンドの使い方 - hana_shinのLinux技術ブログ
https://hana-shin.hatenablog.com/entry/2022/03/13/183444
【Ubuntu】TC Command 通信に遅延を入れる方法
https://papaeng.net/ubuntu_tc_command/