パケットをキューに入れることで、パケットの送信方法を制御できます。この制御はデータ シェーピングと呼ばれ、データに対して次の操作を実行します。
構造では、トラフィックを制御するには 3 つの手順が必要です。
qdisc キューを作成します
クラス分類の作成
フィルタの作成 filter
2. 指定した IP とポートのこのマシンへのアクセス速度を制限します
qdisc ルートキューを作成します
リーリー
サブカテゴリクラスの作成
フィルターフィルターを作成し、IP
を制限します
rree1.2.0.0/16 に直接追加することもできます。
tc class show dev eth0 class htb 1:10 parent 1:1 leaf 10: prio 0 rate 48Mbit ceil 80Mbit burst 15Kb cburst 1600b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 15Kb cburst 1590b
tc filter show dev eth0 filter parent 1: protocol ip pref 1 u32 chain 0 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 f lowid 1:10 not_in_hw match 01020303/ffffffff at 16
tc qdisc del dev eth0 root
由于排队规则主要是基于出口方向,不能对入口方向的流量(Ingress)进行限制。因此,我们需要将流量重定向到 ifb 设备上,再对 ifb 的出口流量(Egress)进行限制,以最终达到控制的目的。
modprobe ifb numifbs=1
ip link set dev ifb0 up
qdisc-class-filter
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress re direct dev ifb0
tc qdisc add dev ifb0 root handle 1: htb default 10 tc class add dev ifb0 parent 1:0 classid 1:1 htb rate 6Mbps tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 6Mbps tc filter add dev ifb0 parent 1:0 protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1: 10
进入的流量被限制在 6 MBps 以下,而出去的流量不被限制。
tc class show dev ifb0 class htb 1:10 parent 1:1 prio 0 rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b
tc filter show dev ifb0 filter parent 1: protocol ip pref 16 u32 chain 0 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 not_in_hw match 01020304/ffffffff at 16
tc qdisc del dev eth0 ingress tc qdisc del dev ifb0 root modprobe -r ifb
以上がTC を使用して Linux でネットワーク電流制限をエレガントに実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。