web-dev-qa-db-ja.com

Linuxを外部サブネットにスロットリングする帯域幅

私は自分の企業のために新しいオープンソースミラーを立ち上げたいと思っていますが、外部クライアントにもそれを開くことに興味があります。ただし、明らかな理由から、発信帯域幅をローカルサブネットの1つに属していない人に制限したいと思います(たとえば、境界ルーターの1つに向かうトラフィック)。

私はもともとApachemod_bwを見ていましたが、このミラーへのFTPアクセスもある可能性があります。 'tc'を使用した有望なオプションをいくつか見てきましたが、サブネットに基づくパターンに一致するようです。しかし、私はそれを否定したいと思っています-制限のないいくつか(5または6)の内部サブネットのリストがあり、他のすべてはトラフィックシェーパーを通過する必要があります。少し複雑なのは、v4とv6の両方のサブネットを一致させる必要があることです。

this で実験していましたが、基本的にはそのinverseが必要なので、「これらのサブネットを形成しないでください;他のすべてにポリシーを適用する」。おそらく2つのクラス、1つはレート制限があり、もう1つはそうではありませんか?処理順序が「tc」でどのように処理されるかはまだわかりません-一致が見つかった後に処理は終了しますか、それとも最後まで続行されますか? (たとえば、最後のキャッチオールは本当にすべてをキャッチしますか、それともまだ一致していないものだけですか?)

2
ereisch

私の知る限り、「tcmatch」はipv6では使用できません。 '-jCLASSIFY'でiptablesを使用する必要があります。

Iptablesを使用すると、一致が見つかった後も処理が続行されます。ただし、tcを使用すると、flowidはパケットをクラスにリダイレクトし、処理を停止します。

木について、私はあなたが欲しいものは次のとおりだと思います:

  • ルートqdisc
  • すべての帯域幅を持つクラス(この方法でリーフクラスが借用できます)
  • 2つのクラス、たとえば帯域幅の20%(外部)と80%(内部)が保証され、最大で100%:保証された100%を超えることはできません
  • クラスごとに1つのリーフqdisc(pfifo、fq、fq_codel)

しかし、私はあなたのアーキテクチャを知りません。 NATを使用している場合は、iptablesルールが正確(範囲なし)である必要があります。リバースプロキシを使用している場合、内部トラフィックと外部トラフィックを区別することはできません。

リバースプロキシを使用している場合、代替手段は次のとおりです。

  1. X-Forwarded-Forヘッダーを確認できるため、レベル7(mod_bwおよびftpと同等)のシェイプ
  2. パブリックIPを見ることができるので、ボーダールーター/ファイアウォール(パブリックIPを持つもの)にシェイパーをセットアップします(常にアップロードリンクで作業していることを忘れないでください)

これを行う能力に応じて、2番目のオプションが最適です。これは、1または10GbではなくWAN帯域幅に基づいて、正確に整形できるためですNIC。リバースプロキシがなくても最適なオプションです。

クラスの選択については、動的帯域幅をより適切に使用するためにhtbまたはhfscを使用し、ルートqdiscの「default」オプションを使用する必要があります。

1
Sanael