私のネットワークには2つのADグループに属する200人のユーザーがいて、各グループに特定のIP範囲を設定することはできません。各グループに対して、グループユーザー間で共有できる帯域幅の量を設定したいと思います。
squidを使用してIPの帯域幅を管理することも、iptables + tcを使用してIPの帯域幅を管理することもできますが、そのIPのユーザー間で共有されるIPグループの帯域幅を設定したいと思います。どうすればいいですか?
答え1
どのIPがどのグループに属しているかを知ったら、帯域幅を管理する方法に答えることができます。あなたはそれを使用することができます階層トークンバケット3つのグループを割り当てます。
- グループA 10名
- Bグループ20人
- 30ネットワークの非ADデバイスで発生する未知のトラフィック
#Create egress shaping
$TC qdisc add dev eth0 root handle 1: htb default 20 r2q 50
$TC class add dev eth0 parent 1: classid 1:1 htb rate 19mbit ceil 19mbit
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 9mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit ceil 10mbit prio 2
#Send everything unknown to classid 1:30. The filter has low priority
#(higher numbers are filtered later)
$TC filter add dev eth0 parent 1: prio 20 protocol all u32 match u32 0 0 flowid 1:30
上記のスクリプトでは、これらのグループは帯域幅を使用しない場合、他のグループに帯域幅を貸すことができます。このセットが欲しくないなら天井と同じ値スピード。
これで、IPをクラス1:10またはクラス1:20に動的に送信するスクリプトを作成できるようになりました。おそらく、いくつかのDHCPまたは広告イベントに接続する必要があります。
グループAのスクリプトは次のとおりです。
$TC filter replace dev eth0 parent 1: protocol ip prio 3 u32 match \
ip dst $THEIP/32 flowid 1:10
自分が送信する内容だけを制御できることを覚えておいてください。したがって、ルータにインターフェイスeth0とeth1がある場合は、eth1でも帯域幅を管理する必要があります。
そして、SFQリーフQDISCをクラスにリンクすることを検討してください。 SFQはすごいです!
$TC qdisc add dev eth0 parent 1:10 handle 110: sfq perturb 10
$TC qdisc add dev eth0 parent 1:20 handle 120: sfq perturb 10
$TC qdisc add dev eth0 parent 1:30 handle 130: sfq perturb 10
IPをグループにマッピング
どのIPがどのグループに属するかを調べるのは、主に使用するソフトウェアによって異なります。ソフトウェアがイベントをサポートしていない場合は、ログを解析して特定のグループにIPを割り当てることを決定するスクリプトを作成できます。