可以用来限制对外服务端口的速度,以免带宽被单个服务占满
确定是否已安装 iptables 和 tc
各大主流发行版均已内置,个人用的 OpenSUSE Tumbleweed
无需再次安装。
找到对外服务的网卡名称
输入
找到对外暴露的网卡名称,可能是诸如 eth0
或 enp7s0
(视发行版而定)。
限制上行网速
给 eth0 添加一个流控根规则。
1
| tc qdisc add dev eth0 root handle 1: htb default 1
|
创建根类。 这里的带宽填写服务器的总带宽就好。
1
| tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbps
|
可以继续创建不同的规则。
1 2 3
| 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
创建过滤器
1 2 3
| 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 端口限速
1 2 3
| 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 端口
1
| iptables -A OUTPUT -t mangle -p tcp --sport 10000:20000 -j MARK --set-mark 2
|
盲猜将 OUTPUT
改为 INPUT
可以限制下行流量,没试过。
解除限速需要清除一下对应的 iptable 规则。
解除限速
清理一下 iptables Mangle 规则
执行后立即生效。
如果想清掉流控规则,那么就执行
1
| tc qdisc del dev eth0 root
|
参考自
Linux 端口限速
如何对 Linux 服务器的端口限速?