OSがLinuxのゲートウェイがあります。ダウンリンク帯域幅が100Mbpsであると想定します。このゲートウェイを使用するすべてのデバイスの最大ダウンロード速度を1Mbpsに制限したい。つまり、100台のデバイスがある場合、理論的にはすべてのデバイスが1Mbpsの帯域幅を取得できる。Linuxコマンド「tc」を使用してトラフィックシェーピングを実行してみた。以下は私のコマンドです。私のインターフェース名は「eth0」です。しかし問題は、これらのコマンドが特定のデバイスの速度を制限できることです(ここでは、そのMACアドレスはM0M1M2M3M4M5です)。必要なコマンドは、すべてのデバイスの速度を制限することです。ゲートウェイにパケットを送信するデバイスのMACアドレスがわからないため、コマンドは一般的である必要があります。これを行うための簡単なコマンド/方法はありますか? TCルールを動的に追加する必要がありますか?前もって感謝します。
tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
#dst MAC=M0M1M2M3M4M5
tc filter add dev eth0 parent 1: protocol ip prio 5 u32 match u32 0xM2M3M4M5 0xffffffff at -12 match u16 0xM0M1 0xffff at -14 flowid 1:1
https://AMD.co.at/adminwiki/Linux_Trafficshaping に基づく例を次に示します。
#!/bin/bash
#Cleaning up
tc qdisc del dev eth0 root handle 1: > /dev/null 2>&1
#Add the root handle, setting the default leaf
tc qdisc add dev eth0 root handle 1: htb default 5
#Set the basic speed of the device
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
# add a leaf for every IP in the 10.0.1.0/24 class, with mimimum guaranteed bandwidth of 1mbit and max available bandwidth of 1mbit, as per OP request
for i in $(seq 2 255); do
tc class add dev eth0 parent 1:1 classid 1:$i htb rate 1mbit ceil 1mbit
#Add SFQ queueing disciplines
tc qdisc add dev eth0 parent 1:$i handle $i: sfq perturb 10
#prioritize traffic
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.1.$i flowid 1:$i
done
現在トラフィックを生成している各IPに対して少なくとも1Mbpsの保証帯域幅がある限り、各IPが1Mbpsを超えて使用できるようにする場合は、ceil 1mbit
をceil 100mbit
に変更する必要があります。
どのような状況でもクライアントが1Mbpsを超えないようにすることが目的の場合は、スクリプトをそのまま使用してください。
この例を使用してください:
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 1: htb default 10
tc class add dev eth1 parent 1: classid 1:10 htb rate 1mbit ceil 1mbit
tc class add dev eth1 parent 1: classid 1:11 htb rate 1mbit ceil 1mbit
tc class add dev eth1 parent 1: classid 1:12 htb rate 1mbit ceil 1mbit
必要に応じてさらに追加
tc filter add dev eth1 parent 1: protocol ip prio 5 u32 match u16 0x0800 0xFFFF at -2 match u32 0x23AD5518 0xFFFFFFFF at -12 match u16 0x0800 0xFFFF at -14 flowid 1:11
tc filter add dev eth1 parent 1: protocol ip prio 5 u32 match u16 0x0800 0xFFFF at -2 match u32 0x23AD5520 0xFFFFFFFF at -12 match u16 0x0800 0xFFFF at -14 flowid 1:12
必要に応じてMacを追加します
または、より単純なIPバージョンを使用します。
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.10.101 flowid 1:11
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.10.102 flowid 1:12
必要に応じてIPを追加します