Ubuntu 20.04 网卡流量限制脚本
以下是一个用于在Ubuntu 20.04上限制eth0网卡特定时间段上行流量的脚本,并设置开机自动运行。
步骤1:创建流量限制脚本
sudo nano /usr/local/bin/traffic_limit.sh将以下内容复制到文件中:
#!/bin/bash
# 网卡流量限制脚本
# 配置变量
INTERFACE="eth0"
LIMIT_RATE="1mbit" # 限制速率,可根据需要调整
START_TIME="09:00" # 开始时间 (24小时制)
END_TIME="17:00" # 结束时间 (24小时制)
# 检查当前时间是否在指定时间段内
check_time() {
current=$(date +%H:%M)
start_seconds=$(date -d "$START_TIME" +%s)
end_seconds=$(date -d "$END_TIME" +%s)
current_seconds=$(date -d "$current" +%s)
if [ $current_seconds -ge $start_seconds ] && [ $current_seconds -le $end_seconds ]; then
return 0 # 在时间段内
else
return 1 # 不在时间段内
fi
}
# 设置流量限制
set_limit() {
# 清除现有规则
tc qdisc del dev $INTERFACE root 2>/dev/null
# 添加新的流量限制规则
tc qdisc add dev $INTERFACE root handle 1: htb default 10
tc class add dev $INTERFACE parent 1: classid 1:10 htb rate $LIMIT_RATE
}
# 移除流量限制
remove_limit() {
tc qdisc del dev $INTERFACE root 2>/dev/null
}
# 主循环
main() {
echo "$(date): 流量限制脚本启动"
while true; do
if check_time; then
# 检查是否已设置限制
if ! tc qdisc show dev $INTERFACE | grep -q "htb"; then
echo "$(date): 在限制时间段内,应用流量限制"
set_limit
fi
else
# 检查是否需要移除限制
if tc qdisc show dev $INTERFACE | grep -q "htb"; then
echo "$(date): 不在限制时间段内,移除流量限制"
remove_limit
fi
fi
# 每分钟检查一次
sleep 60
done
}
# 运行主函数
main保存并退出(按Ctrl+X,然后按Y,最后按Enter)。
步骤2:使脚本可执行
sudo chmod +x /usr/local/bin/traffic_limit.sh步骤3:创建系统服务
sudo nano /etc/systemd/system/traffic-limit.service将以下内容复制到文件中:
[Unit]
Description=Network Traffic Limiter for eth0
After=network.target
[Service]
ExecStart=/usr/local/bin/traffic_limit.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target保存并退出。
步骤4:启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable traffic-limit.service
sudo systemctl start traffic-limit.service步骤5:验证服务状态
sudo systemctl status traffic-limit.service自定义配置
您可以通过编辑 /usr/local/bin/traffic_limit.sh 文件来自定义以下参数:
INTERFACE: 要限制的网卡名称(默认为eth0)LIMIT_RATE: 限制的速率(默认为1mbit,可设置为100kbit、500kbit、2mbit等)START_TIME: 限制开始时间(24小时制,默认为09:00)END_TIME: 限制结束时间(24小时制,默认为17:00)
查看流量限制状态
要查看当前的流量限制状态,可以使用以下命令:
tc -s qdisc show dev eth0停止和禁用服务
如果需要停止流量限制服务:
sudo systemctl stop traffic-limit.service
sudo systemctl disable traffic-limit.service这个脚本会在指定的时间段内限制eth0网卡的上行流量,并在其他时间移除限制。脚本会每分钟检查一次时间,确保限制只在指定时间段内生效。