TC(流量控制)控制带宽

TC(流量控制)控制带宽

我遇到了一个带宽脚本问题,我已经使用该脚本一段时间来限制端口上的传出带宽。

一开始它工作得很好,直到我想改变传出端口速度。我将其切换到更高的数字(200mbit 到 400mbit),然后重新启动了脚本。由于某种原因,新的带宽限制没有生效,旧的限制仍然存在。我将脚本设置为初始化服务。这就是代码的一部分。

# Interface
interface=eth0

# Define the upload, follow units can be
upload_limit=400mbit

start() {
    # Start the tc configuration and set all packets default to 10
    /sbin/tc qdisc add dev $interface root handle 1:0 htb default 10

    # Set default speed for all packets
    /sbin/tc class add dev $interface parent 1:0 classid 1:10 htb rate 1000mbit ceil 1000mbit prio 0
    # Set speeds for packets marked with 20
    /sbin/tc class add dev $interface parent 1:0 classid 1:20 htb rate $upload_limit ceil $upload_limit prio 0

    # Mark packets for port 182 to 20 so that tc can handle the traffic.
    /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20
    /sbin/service iptables save

    # Assign it to appropriate qdisc
    tc filter add dev $interface parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
}

stop() {
    /sbin/tc qdisc del dev $interface root
}

有人可以给我一些建议吗?

答案1

恕我直言,旧规则仍然存在的原因是导致“魔力”的 iptables 规则仍然存在,因为你有一行添加它而没有行删除它。检查您的 iptables 规则文件。您应该有一堆类似于旧版本(端口)的“iptables -D OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20”的行。 (因为每次执行脚本时,您都会创建一个新脚本并随后保存)

尝试在 stop() 函数上放置 Iptables 命令来清理 mangle 表规则。像这样的东西: /sbin/iptables -D OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20 /sbin/service iptables save

相关内容