選択した答えは不正確/不完全です。私は同様の問題に直面しました、選択された答えは助けを与えましたが、十分ではありませんでした。
まず、次のコマンドは実際には必要ありません。
tc qdisc del dev eth0ルート
ルートqdiscを「削除」しますが、すぐにpfifo_fastに置き換えられます(したがって、接続が失われることはありません)。
2番目のコマンド:
tc qdisc add dev eth0ルートハンドル1:prio
pfifo_fast qdiscをprioに置き換えます。デフォルトでは、prioキューには3つのバンド(0、1、2)があり、それぞれが1つのクラス(1:1、1:2、1:3)で管理されています。
パケットは、IPパッケージのTOSフィールドを使用して、これらの帯域の1つに送信されます。この構成は、実行時に表示されます。
tc qdisc ls
「priomap」値を調べます。
次に、netem qdiscを追加します。
tc qdisc add dev eth0 parent 1:1 handle 2:netem delay 500ms
このコマンドを使用すると、1:1バンドに向かうすべてのトラフィックを(フィルターが配置されるまで)遅らせます。
ただし、2つの注意事項があります。
- トラフィックに異なるTOS値を設定して、別の帯域に送信することができます。
- prio qdiscは、トラフィックが別の帯域に送られるように構成できます。
以下は、フィルターが適用されていない間、netemの影響を受けないように私の問題を解決しました。上記の手順の代わりに、次のことを行いました。
tc qdisc add dev eth0ルートハンドル1:prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
これにより、デフォルトですべてのトラフィックが帯域1:3に送信されます。
次に、トラフィックを遅延させるルールを追加しました。
tc qdisc add dev eth0 parent 1:1 handle 10:netem delay 100ms 10ms
これにより、バンド0にqdiscが作成されますが、すべてのトラフィックがバンド3に送られるため、影響はありませんでした。
その後、フィルターを追加しました。
tcフィルターadd dev eth0プロトコルip parent 1:0 prio 1 u32 match ip dst 10.0.0.1/32 match ip dport 80 0xffff flowid 1:1
フィルタを使用すると、選択したトラフィックをバンド0にリダイレクトするため、選択したIP /ポートのみが影響を受けます。
他のトラフィックはすべてバンド3に流れ続けるため、影響を受けません。