如何使用TC对特定端口进行限速


Linux下有个特别好用的工具叫TC(traffic control),主要用来在网卡或者是针对某个IP进行限速,时延处理。

下面将为你介绍如何在特定网卡上对特定端口配合iptables命令应用不同的限速规则进行限速。

前提条件

  1. root权限
  2. 独立网卡(容器内不适用,VM或物理机可以)

清除所有配置

tc qdisc del dev ens3 root
iptables -t mangle -F

开始配置

tc qdisc add dev ens3 root handle 1: htb default 2
tc class add dev ens3 parent 1: classid 1:1 htb rate 40000mbit
#建立3个限速规则
tc class add dev ens3 parent 1:1 classid 1:10 htb rate 8kbit
tc class add dev ens3 parent 1:1 classid 1:20 htb rate 8kbit
tc class add dev ens3 parent 1:1 classid 1:30 htb rate 8kbit
tc filter add dev ens3 protocol ip parent 1:0 prio 1 handle 10 fw classid 1:10
tc filter add dev ens3 protocol ip parent 1:0 prio 1 handle 20 fw classid 1:20
tc filter add dev ens3 protocol ip parent 1:0 prio 1 handle 30 fw classid 1:30

#ipables针对source port使用不同的规则
iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 10
iptables -A OUTPUT -t mangle -p tcp --sport 443 -j MARK --set-mark 20
iptables -A OUTPUT -t mangle -p udp --sport 451 -j MARK --set-mark 30