web-dev-qa-db-ja.com

tc / iptablesを使用したトラフィックシェーピングアウトバウンドクライアントソースIP

私の質問は、サーバー上のユーザーの帯域幅を制限しようとしていて、これを行うための最良の方法を考えていることです。 tc/iptablesに飛び込む前に、これについて何かアドバイスが得られるかどうか疑問に思っていました。誰かが私が試してみることができるサンプル構成を教えてくれたら、それは大いにありがたいです。

私が理解していることから、tcを使用してルールを作成し、markステートメントを使用してiptablesを使用してルールを適用できます。一部の人々は、マングルのポストルーティングまたは出力を使用すると言いますが、どちらが最適であるか、またはそれが重要であるかどうかを100%確信していません。 tcでは、htb(帯域幅を制限するためのトークンバケット)を使用すると思いますが、パフォーマンスのトレードオフがあると言われ、最小のレイテンシーの方法を探しています。これらのユーザーは内部ネットワーク上ではなく、サーバーに接続しています。

私には2種類のユーザーがいるので、それらを制限するために必要なルールは2つだけです。これまでのところ、私が見ることができるのは、tc/iptablesコンボが私が望むものであるということですが、代替案の提案を受け付けています。

Iptablesの場合、コマンドは次のようになります。

帯域幅制限ルール1

iptables -A PREROUTING -s xxx.xxx.xxx.xxx -t mangle -j MARK --set-mark 0x1

帯域幅制限ルール2

iptables -A PREROUTING -s xxx.xxx.xxx.xxx -t mangle -j MARK --set-mark 0x2

私がしたいこと

  • ユーザーはeth0にアクセスします(IPは既知です。ランダムなIPではありません)
  • サーバーに情報を要求する
  • サーバーは、ルールが適用された状態でeth0に関する情報をユーザーに送り返します
2
dryve

Tcを使用することは、Linuxで整形するための正しい方法です。最良のドキュメントは [〜#〜] lartc [〜#〜] です。まず最初に、どのような種類のトラフィックを形成するかを理解する必要があります-出口または入口。その後、それを行うためのインターフェイスを選択する必要があります(NATの前の送信元アドレスに基づいて発信インターフェイスの入力トラフィックを形成し、NATの後の宛先アドレスに基づいてローカルインターフェイスの出力トラフィックを形成する方が簡単です)また、たとえば、2つのタイプのユーザーに異なるインターフェイス(VLANインターフェイス))を使用している場合、iptablesルールがまったくない場合があります。その後、選択したインターフェイスにqdiscsを設定する必要があります。 。ユーザーがインターフェースで分割されている場合はクラスレス、少数のユーザータイプの帯域幅を形成するために1つのインターフェースを使用している場合はクラスフルである可能性があります。その後、フィルターを設定する必要があります(クラスフルスキームを使用している場合)。リンクには多くの例があります。以下。頑張って...

0
user2986553