私が使用しているHTB構造については疑問があります。
私の目的は、ローカルネットワークのユーザーのダウンロードとアップロードの速度を制限することです。ネットワークの各ユーザーには、ドメインの個人用リストがあり、ドメインの速度は上下できません。
つまり、user1はslashdot.orgでのアクセスをダウンロードで8KB、アップロードで3KBに制限でき、user2はslashdot.orgでのアクセスを4KBから1KBに制限できます。
現時点では、うまく機能するiptables / tcカップルをセットアップしますが、非常に小さな規模で、同時に2つまたは3つの仮想ホストを使用します(残念ながら、実際のサイズテストは実行できません)。
現在の構造は次のとおりです(LANの出口にあるもののみを表示します。アップロード用のものは、単にこの「コピー」です)
インターフェイスにアタッチされたHTB qdisc(ハンドル2 :)、デフォルトのトラフィッククラスはクラスFFFFです。
HTB qdiscの直下にあるルートクラス2:1は、DOWNLINKキャパシティのレートと上限を持っています。
2:1の子としてのデフォルトクラス2:FFFF。レートは1kbspで、上限はDOWNLINK容量です。
次に、特定のドメインのユーザーに新しい制限がある場合、他のクラスが動的に追加され、そのドメインからのダウンロード速度を制御するために新しいtcクラスが追加されます。
今のところ、私がやったことは次のとおりです。
一意のIDを持つ新しいtcクラスを作成します(ここではポイントではなく、データベースから取得します)。クラス2:1の親として、レート値は1bps、ceil値は制限されたダウンロード速度に設定されます。
tcコマンドは次のとおりです。
-------------- BEGIN SCRIPT --------------
DOWNLINK=800
## Setting up the static tc qdisc and class
$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF
# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps
# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0
# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10
## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1
# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10
# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------
すべての通常のトラフィック(速度制限なし)はデフォルトクラスに移動し、制限されたトラフィックは対応するtcクラスに送信される必要があります。
私が真剣に疑う点は、デフォルトクラスと制限クラスに最小1bpsの速度を使用することです。作成される制限されたクラスの数を制御することはできず、制限されたクラスの合計レートがルートクラスのレートを超えることは望ましくありません。
もう1つのポイントは、デフォルトにprio 0を追加し、制限クラスにprio 1を追加したため、デフォルトクラスが借用する場合(ほとんどの場合、非常に遅いレートに従って)、このクラスは他の制限ドメインの前に提供されます。しかし、デフォルトクラスのセルをルートクラスのセルとして保持していれば、これらのドメインはstar死しませんか?
いくつかのドメイン/ユーザーの速度を制限しながら、ユーザーが無制限の使用のためにまともな対話性と帯域幅を維持できるようにするにはどうすればよいですか?
また、htb qdiscのデフォルトクラスを指定しないと、フィルターに一致しないパケットはハードウェア速度でデキューされるため、デフォルトクラスがここで役立つかどうか疑問に思っています。(しかし、制限されたクラスを飢えさせて再びここに?)
私はtcとネットワークQoSに本当に慣れていないので、アドバイスや批評家(建設的な;))を歓迎します。
ビンセント。