78 lines
2.2 KiB
Bash
78 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
# 网络接口名称
|
|
INTERFACE="eno1"
|
|
|
|
# 带宽限制
|
|
LIMIT_RATE="3mbit"
|
|
|
|
# 检查是否提供操作参数
|
|
if [ "$#" -lt 1 ]; then
|
|
echo "Usage: $0 {add|del}"
|
|
exit 1
|
|
fi
|
|
|
|
# 添加限速规则
|
|
add_limit() {
|
|
echo "Adding bandwidth limit of $LIMIT_RATE on ports 8337 and 8338 for interface $INTERFACE..."
|
|
|
|
# 添加全局队列规则(上行限制)
|
|
tc qdisc add dev "$INTERFACE" root handle 1: htb default 11
|
|
tc class add dev "$INTERFACE" parent 1: classid 1:1 htb rate "$LIMIT_RATE"
|
|
tc class add dev "$INTERFACE" parent 1:1 classid 1:11 htb rate "$LIMIT_RATE"
|
|
|
|
# 针对端口 8337 上行流量添加过滤规则
|
|
tc filter add dev "$INTERFACE" protocol ip parent 1:0 prio 1 u32 match ip dport 8337 0xffff flowid 1:11
|
|
|
|
# 针对端口 8338 上行流量添加过滤规则
|
|
tc filter add dev "$INTERFACE" protocol ip parent 1:0 prio 1 u32 match ip dport 8338 0xffff flowid 1:11
|
|
|
|
# 添加全局队列规则(下行限制)
|
|
tc qdisc add dev ifb0 root handle 1: htb default 11
|
|
tc class add dev ifb0 parent 1: classid 1:1 htb rate "$LIMIT_RATE"
|
|
tc class add dev ifb0 parent 1:1 classid 1:11 htb rate "$LIMIT_RATE"
|
|
|
|
# 针对端口 8337 下行流量添加过滤规则
|
|
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip sport 8337 0xffff flowid 1:11
|
|
|
|
# 针对端口 8338 下行流量添加过滤规则
|
|
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip sport 8338 0xffff flowid 1:11
|
|
|
|
echo "Bandwidth limit applied successfully."
|
|
}
|
|
|
|
# 删除限速规则
|
|
delete_limit() {
|
|
echo "Removing bandwidth limit from interface $INTERFACE..."
|
|
|
|
# 删除上行规则
|
|
tc qdisc del dev "$INTERFACE" root
|
|
|
|
# 删除下行规则
|
|
tc qdisc del dev ifb0 root
|
|
|
|
echo "Bandwidth limit removed successfully."
|
|
}
|
|
|
|
# 根据用户输入执行操作
|
|
case "$1" in
|
|
add)
|
|
# 启用下行流量接口 ifb0
|
|
modprobe ifb
|
|
ip link set ifb0 up
|
|
|
|
add_limit
|
|
;;
|
|
del)
|
|
delete_limit
|
|
|
|
# 禁用下行流量接口 ifb0
|
|
ip link set ifb0 down
|
|
;;
|
|
*)
|
|
echo "Invalid option: $1"
|
|
echo "Usage: $0 {add|delete}"
|
|
exit 1
|
|
;;
|
|
esac
|