Linux端口限速

目录

  1. 1. 确定是否已安装 iptables 和 tc
  2. 2. 找到对外服务的网卡名称
  3. 3. 限制上行网速
  4. 4. 解除限速
    1. 4.1. 参考自

可以用来限制对外服务端口的速度,以免带宽被单个服务占满

确定是否已安装 iptables 和 tc

各大主流发行版均已内置,个人用的 OpenSUSE Tumbleweed 无需再次安装。

找到对外服务的网卡名称

输入

1
ip a

找到对外暴露的网卡名称,可能是诸如 eth0enp7s0 (视发行版而定)。

限制上行网速

给 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 要对应前面的 classidflowid 对应

这样就对 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
iptables -t mangle -F

执行后立即生效。

如果想清掉流控规则,那么就执行

1
tc qdisc del dev eth0 root

参考自

Linux 端口限速

如何对 Linux 服务器的端口限速?