一意のIPへの新しいアウトバウンド接続に速度が制限されるように、VPSでQoSを設定しようとしています。
たとえば、
- 私のVPSからデータを要求するパブリックIPが5つあります。
- VPSが各IPにデータを再送信すると、各IPは10mbpsの専用アウトバウンド帯域幅速度を取得します。
- クライアントが10mbpsを超える場合は、パケットを破棄せずに代わりにキューに追加してください。
eth0ポート全体のアウトバウンド速度を10mbpsに制限したくないので、個々のパブリックIPに10mbpsを取得したいと思います。
VPSに接続するさまざまなパブリックIPがあることが多いため、各IPに対して各帯域幅ルールを個別に作成する必要がある静的ルールを作成する必要はありません。
TC qdiscでこれを達成できますか?
フィルタなどを使用できるHTB qdicsの一般的な設定を見てみました。しかし、私が望むものを説明する例やドキュメントを見ることはできないようです。
Ubuntu Server 14.04を使用しています。
修正する
TC qdiscの仕組みをよりよく理解した後、次のことを行いました。
デフォルト設定で使用したコマンドは、パケットがドロップされず、代わりにトークンバケットに移動するため、かなりスムーズに動作するようです(注:高度に最適化されていないが正常に動作しているようです)。
tc qdisc add dev eth0 root handle 1: htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
tc class add dev eth0 parent 1: classid 1:2 htb rate 20mbit
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 2.3.4.5 flowid 1:2
答え1
QDISCがこれを直接実行できるかどうかはわかりません。 CBQ/HTB/HFSC を使用すると、限られた数の 10 mbps クラスを生成し、IP ハッシュをフィルタリングできます。明らかに起こるハッシュ衝突を除いて動作します。
幸いなことに、ソース(Webサーバーなど)から直接これらの制限を設定できます。
しかし、これが実際には速度制限ではなく、クライアント間の公平性を維持するためのものであれば、SFQ / ESFQを使用する方が良いでしょう。限定的ではありませんが、バランスを提供します。