使用 tc 和 iptables 模拟多个数据中心之间的延迟

使用 tc 和 iptables 模拟多个数据中心之间的延迟

我正在尝试使用 tc 和 iptables 模拟多个数据中心 (dc) 之间的网络延迟、丢失等。

使用 iptables,我已经配置了每个节点来标记数据包要发送到哪个 dc:下面是 2 个 dc(a1 和 a2)的 mangle 规则示例。

*mangle
-A POSTROUTING -j CLASSIFY --set-class 1:a1 -d 174.22.0.5
-A POSTROUTING -j CLASSIFY --set-class 1:a1 -d 174.22.0.6
-A POSTROUTING -j CLASSIFY --set-class 1:a2 -d 174.22.0.2
-A POSTROUTING -j CLASSIFY --set-class 1:a2 -d 174.22.0.4
COMMIT

到目前为止一切都很好(我认为)。

当我启用 tc 规则时出现了问题(甚至还没有开始使用 netem):

tc qdisc del dev eth0 root
tc qdisc add dev eth0 parent root handle 1:0   htb default aff
tc class add dev eth0 parent 1:0 classid 1:a   htb rate 1000kbit
tc class add dev eth0 parent 1:a classid 1:a1  htb rate 333kbit
tc class add dev eth0 parent 1:a classid 1:a2  htb rate 333kbit
tc class add dev eth0 parent 1:a classid 1:aff htb rate 333kbit

这样,所有数据包都会被丢弃:

tc -s qdisc show
qdisc noqueue 0: dev lo root refcnt 2 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
qdisc htb 1: dev eth0 root refcnt 2 r2q 10 default aff direct_packets_stat 0 direct_qlen 0
 Sent 0 bytes 0 pkt (dropped 15221, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
tc -s class show dev eth0
class htb 1:a2 parent 1:a prio 0 rate 333Kbit ceil 333Kbit burst 1599b cburst 1599b 
 Sent 0 bytes 0 pkt (dropped 7308, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 600593 ctokens: 600593

class htb 1:a root rate 1Mbit ceil 1Mbit burst 1600b cburst 1600b 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 200000 ctokens: 200000

class htb 1:aff parent 1:a prio 0 rate 333Kbit ceil 333Kbit burst 1599b cburst 1599b 
 Sent 0 bytes 0 pkt (dropped 1675, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 600593 ctokens: 600593

class htb 1:a1 parent 1:a prio 0 rate 333Kbit ceil 333Kbit burst 1599b cburst 1599b 
 Sent 0 bytes 0 pkt (dropped 7231, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 600593 ctokens: 600593
  1. 为何流量会下降?
  2. 我不一定需要进行速率限制,有没有更好的选择?

注意:此示例使用 IPv4,但也需要适用于 IPv6,这就是我使用 iptables 进行分类的原因。

相关内容