UBUNTU20 64位系统对eth0网卡进行上行速率限制

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网卡的上行流量,并在其他时间移除限制。脚本会每分钟检查一次时间,确保限制只在指定时间段内生效。