使用方法,创建.sh脚本文件,将以下内容复制到脚本文件中保存退出即可。
#!/bin/sh
#通过tc命令实现对端口的限速
#获取网卡名称
function ips(){
local nics=$(route -n | grep ^0.0.0.0 | awk '{print $8}')
for nic in $nics
do
local ip=$(ifconfig $nic | grep -E 'inet\s+' | sed -E -e 's/inet\s+\S+://g' | awk '{print $2}')
echo $nic
done
}
#声明变量
MIN=10
MAX=15
CARDNAME=eth0
DATA=`ips`;
array=(${DATA});
echo "共有"${#array[@]}"个网卡";
for var in ${array[@]};
do
CARDNAME=$var;
done
echo ${CARDNAME}
/sbin/tc qdisc del dev ${CARDNAME} root #先清空之前的规则
/sbin/tc qdisc add root dev ${CARDNAME} handle 1: htb default 4 #创建规则默认使用策略1.4
/sbin/tc class add dev ${CARDNAME} parent 1: classid 1:1 htb rate 1000mbit #创建根策略,限速值1000M
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:2 htb rate ${MIN}mbit ceil ${MAX}mbps #基于根策略创建子策略 并设置最大最小限速
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:3 htb rate ${MIN}mbit ceil ${MAX}mbps
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:4 htb rate 100mbit
/sbin/tc filter add dev ${CARDNAME} protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:2 #将子策略绑定端口
/sbin/tc filter add dev ${CARDNAME} protocol ip parent 1:0 prio 1 u32 match ip sport 8080 0xffff flowid 1:3