一般的にTCには2つのethのNICがあります。これを便宜的にeth1, eth2とします。上記のコマンドは、どの方向の帯域制限になりますか

tc コマンドの帯域制限 (tbfnetem) は 送信(アウトバウンド, egress) に適用されます。したがって、上記のコマンドは eth0 から外部に送信されるトラフィック に対して帯域制限が適用されます。


eth1, eth2 の場合の制限方向

eth1eth2 がある場合、それぞれのインターフェースに tc を適用すると、次のようになります。

  • tc qdisc add dev eth1 root tbf rate 5mbit burst 10kb latency 1ms
    • eth1 から外部へ送信するトラフィック(egress) に 5Mbps の帯域制限
  • tc qdisc add dev eth2 root tbf rate 5mbit burst 10kb latency 1ms
    • eth2 から外部へ送信するトラフィック(egress) に 5Mbps の帯域制限

つまり、各インターフェースから送信される通信に適用される ため、受信(ingress)には影響しません。


受信(ingress)側の帯域制限をしたい場合

tc は基本的に送信 (egress) に適用されるため、受信 (ingress) の帯域制限を行うには ingress qdisc を利用するか、ifb (Intermediate Functional Block device) を使います。

eth1 の受信帯域を 5Mbps に制限する場合

sh
# ifb デバイスを有効化
sudo modprobe ifb
sudo ip link set ifb0 up
# eth1 の受信トラフィックを ifb0 にリダイレクト
sudo tc qdisc add dev eth1 handle ffff: ingress
sudo tc filter add dev eth1 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0
# ifb0 に帯域制限を適用(受信制限)
sudo tc qdisc add dev ifb0 root tbf rate 5mbit burst 10kb latency 1ms

これにより、eth1 への受信トラフィック を 5Mbps に制限できます。


まとめ

  • tc のデフォルトの動作では 送信(egress) のみ帯域制限される。
  • tceth1 に適用すると、eth1 から出ていく通信に制限がかかる。
  • 受信(ingress)を制限したい場合は ifb デバイスを使う。

したがって、最初のコマンドは eth0 の送信(egress)方向 に適用される帯域制限になります。

 

 

未分類

Posted by ebata