可以用来限制对外服务端口的速度,以免带宽被单个服务占满
确定是否已安装 iptables 和 tc
各大主流发行版均已内置,个人用的 OpenSUSE Tumbleweed
无需再次安装。
找到对外服务的网卡名称
输入
ip a
找到对外暴露的网卡名称,可能是诸如 eth0
或 enp7s0
(视发行版而定)。
限制上行网速
给 eth0 添加一个流控根规则。
tc qdisc add dev eth0 root handle 1: htb default 1
创建根类。 这里的带宽填写服务器的总带宽就好。
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbps
可以继续创建不同的规则。
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 80Mbit ceil 120Mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 180Mbit ceil 200Mbit prio 1
#一条代表一个规则,示例,以此类推
classid 1:x 意思是每 x 秒钟检查一次 参考如何对 Linux 服务器的端口限速?
rate 后的为长时间传输最大带宽
ceil 后的参数代表突发传输最大带宽
ceil 需要大于等于 rate
创建过滤器
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 2 fw flowid 1:2
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 3 fw flowid 1:3
#一条代表一个规则,示例,以此类推
注意 flowid
要和上一条的 classid
一一对应。
借助 iptables 针对 80 端口限速
iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 2
iptables -A OUTPUT -t mangle -p tcp --sport 443 -j MARK --set-mark 3
##一条代表一个规则,示例,以此类推
--set-mark x
要对应前面的 classid
和 flowid
对应
这样就对 80 端口限制了速度了。
限制 10000-20000 端口
iptables -A OUTPUT -t mangle -p tcp --sport 10000:20000 -j MARK --set-mark 2
盲猜将 OUTPUT
改为 INPUT
可以限制下行流量,没试过。
解除限速需要清除一下对应的 iptable 规则。
解除限速
清理一下 iptables Mangle 规则
iptables -t mangle -F
执行后立即生效。
如果想清掉流控规则,那么就执行
tc qdisc del dev eth0 root