web-dev-qa-db-ja.com

Linuxコマンド「tc」を使用してゲートウェイのMACアドレスごとにすべてのデバイスの速度を制限するにはどうすればよいですか?

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
3
Shuangfeng He

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 1mbitceil 100mbitに変更する必要があります。

どのような状況でもクライアントが1Mbpsを超えないようにすることが目的の場合は、スクリプトをそのまま使用してください。

2
Luca Gibelli

この例を使用してください:

 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を追加します

1
norman alpuiz