この問題は他の場所や私たちの man ページで非常に詳細に解説してあるのですが、 質問がたくさん寄せられますし、 幸いなことにトラフィック制御の完全な理解を必要としない簡単な答えが存在します。
この 3 行のスクリプトが仕事をしてくれます:
# tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit # tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit \ allot 1500 prio 5 bounded isolated # tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \ match ip dst 195.96.96.97 flowid 1:1 |
最初の行はクラスベースのキューをインターフェースにインストールし、 これが 10mbit のインターフェースであることを (計算のため) カーネルに伝えています。 ここを間違えても実害はありません。しかし正しく設定すると、 全体がより正確になります。
二番目の行は 512kbit のクラスを作り、妥当なデフォルト値を与えています。 詳細は cbq の man ページと Chapter 9 をご覧ください。
最後の行は、この帯域制限クラスに向けるべきトラフィックを指定しています。 このルールにマッチしないトラフィックは制限されません。 より複雑なマッチ (サブネット、発信元ポート、送信先ポート) をさせたい場合は、 Section 9.6.2 をご覧ください。
何かを変更してスクリプトをリロードする際には、 'tc qdisc del dev $DEV root' を実行して現在の設定を削除してください。
このスクリプトの最後に 'tc qdisc add dev $DEV parent 1:1 sfq perturb 10' という行を追加すると、さらに効果的です。この行が何を行うのかについては、 Section 9.2.3 をご覧ください。