![TC(流量控制)控制带宽](https://linux22.com/image/88245/TC%EF%BC%88%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%EF%BC%89%E6%8E%A7%E5%88%B6%E5%B8%A6%E5%AE%BD.png)
我遇到了一个带宽脚本问题,我已经使用该脚本一段时间来限制端口上的传出带宽。
一开始它工作得很好,直到我想改变传出端口速度。我将其切换到更高的数字(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