我正在尝试模拟多个虚拟机之间的流量。每个连接应该有不同的参数,即延迟。因此,我尝试为不同的链接创建不同的 qdisc 过滤器,因为这样我可以轻松地向每个 qdisc 附加延迟。只有我意识到我不能使用 tc 添加超过 16 个 qdisc。
有没有办法添加超过 16 个 qdisc?我可以创建另一个句柄,句柄 2 吗?
此外,我的命令不适用于我添加的第 10 个 qdisc:与句柄 10 的连接(192.168.0.105 到 192.168.0.102)。此连接似乎使用句柄 20 的 qdisc 规则,因为我测量到延迟略高于 30 毫秒。
以下是 bash 中执行的命令:
/sbin/tc qdisc add dev eth1 root handle 1: prio bands 11
/sbin/tc qdisc add dev eth1 parent 1:1 handle 10: netem delay 200ms
/sbin/tc qdisc add dev eth1 parent 1:2 handle 20: netem delay 30ms
/sbin/tc qdisc add dev eth1 parent 1:3 handle 30: netem delay 300ms
/sbin/tc qdisc add dev eth1 parent 1:4 handle 40: netem delay 70ms
/sbin/tc qdisc add dev eth1 parent 1:5 handle 50: netem delay 80ms
/sbin/tc qdisc add dev eth1 parent 1:6 handle 60: netem delay 90ms
/sbin/tc qdisc add dev eth1 parent 1:7 handle 70: netem delay 110ms
/sbin/tc qdisc add dev eth1 parent 1:8 handle 80: netem delay 400ms
/sbin/tc qdisc add dev eth1 parent 1:9 handle 90: netem delay 110ms
/sbin/tc qdisc add dev eth1 parent 1:a handle 100: netem delay 250ms
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.102/32 flowid 10:1
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.103/32 flowid 20:2
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.104/32 flowid 30:3
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 4 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.105/32 flowid 40:4
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 5 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.106/32 flowid 50:5
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 6 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.108/32 flowid 60:6
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 7 u32 match ip dst 192.168.0.101/32 match ip src 192.168.0.109/32 flowid 70:7
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 8 u32 match ip dst 192.168.0.102/32 match ip src 192.168.0.103/32 flowid 80:8
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 9 u32 match ip dst 192.168.0.102/32 match ip src 192.168.0.104/32 flowid 90:9
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio a u32 match ip dst 192.168.0.102/32 match ip src 192.168.0.105/32 flowid 100:a
/sbin/tc qdisc add dev eth1 parent 1:b handle 110: pfifo
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio b u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 110:b
我正在使用 Ubuntu 16.04.6 LTS。
答案1
我知道这已经晚了,但我遇到了同样的问题,我通过使用 htb 和 tc 类解决了它。
尝试这个:
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 flowid 1:1 match ip dst 192.168.0.101/32 match ip src 192.168.0.102/32
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 200ms
tc class add dev eth0 parent 1: classid 1:2 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 flowid 1:2 match ip dst 192.168.0.101/32 match ip src 192.168.0.103/32
tc qdisc add dev eth0 parent 1:2 handle 20: netem delay 30ms
等等...
我相信这将允许您创建 9,999 条不同的规则,尽管我自己从未尝试过这么多。
我希望这有帮助!