linux Traffic Control Configuration example 限速 配置示例 进出双方向

时间:2022-10-15 16:57:45

linux Traffic Control Configuration example 限速 配置示例 进出双方向

背景

公司的公网是没有限速设备的,导致公网带宽相互抢占,奈何有个大佬业务线说自己的产品架构脆弱,经不起因为网络波动(就是说带宽被别人抢占了)而丢数据,自己的产品架构也没法改的更强壮,于是便要求运维提供限速,呵呵,把一个困难的问题丢给我们,幸亏我们锲而不舍,一开始查了好多资料,发现根本限不住入方向的流量,甚至出现tcp握手之后无法传数据的情况,终于,我们在2020年找到了配置命令,没想到关键点居然是添加一个虚拟网卡,因为tc只能限制从本机发出的数据,而不能限制接收的数据,配置一个虚拟网卡,就是把数据包导入出向队列,这样统一进行限制。哼,我就在想,设计者你把命令和逻辑设计的简单点不好吗,非搞出个虚拟网卡,竟难为我们。

原理

原理啥的我就不说了,毕竟自己也是半斤八两,网上也没查到很不错的博文,看看下边的命令,照葫芦画瓢,用一下还是没问题的。

可以限制ingress和egress双方向的速度(基于wondershaper调整的命令):centos7 成功

##删除网卡上已经存在的限速配置
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc del dev ifb0 root
tc qdisc del dev ifb0 ingress
##egress出方向
tc qdisc add dev eth0 root handle 1: htb default 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 2000kbps
tc class add dev eth0 parent 1: classid 1:3 htb rate 7600kbps
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 10.0.0.0/8 flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:3
##ingress入方向
modprobe ifb numifbs=1
ip link set dev ifb0 up
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root handle 2: htb default 1
tc class add dev ifb0 parent 2: classid 2:1 htb rate 2000kbps
tc class add dev ifb0 parent 2: classid 2:3 htb rate 7600kbps
tc filter add dev ifb0 protocol ip parent 2: prio 1 u32 match ip src 10.0.0.0/8 flowid 2:1
tc filter add dev ifb0 protocol ip parent 2: prio 1 u32 match ip src 0.0.0.0/0 flowid 2:3

开机自启

vim /etc/rc.local

查看tc的状态

## 接口eth0(egress)
tc -s -d qdisc show dev eth0
tc -s -d class show dev eth0
tc -s -d -p filter show dev eth0
## 接口ifb0(ingress)
tc -s -d qdisc show dev ifb0
tc -s -d class show dev ifb0
tc -s -d -p filter show dev ifb0

修改规则

## 对eth0的带宽进行修改该,单位是bit
tc class replace dev eth0 parent 1: classid 1:1 htb rate 500kbit ceil 500kbit
## 对ifb0的带宽进行修改该,单位是Byte
tc class replace dev ifb0 parent 2: classid 2:3 htb rate 500kbps ceil 500kbps

删除规则

##删除网卡上已经存在的限速配置
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc del dev ifb0 root
tc qdisc del dev ifb0 ingress

注意

经过简单的测试,我到是没发现加了限速之后对设备的性能有啥压力,限速效果挺不错了。有问题可以给我发邮件跟我交流。