質問
internet
私は同様の検索をしましたが、Limitに関する多くの情報が見つかりませんでしたupload
。提示された解決策は限定的な基準ではありませんIP
。これしかし、LAN全体。
+-----+
+--------+ | S |
| User A |---+ W |
+--------+ | I |
+--------+ | T | +--------+ +----------+
| User B |---+ C +-----| Router |--------| Internet |
+--------+ | H | +--------+ +----------+
.... ... / ...
+--------+ | H |
| User N |---+ U |
+--------+ | B |
+-----+
UserA:172.16.10.2
UserB:172.16.10.3
-RouterPrivate:172.16.0.1
UserC:172.16.10.4
私はupload
制限172.16.10.3
して172.16.10.4
使用したいですtc
htb
。iptables
私が試したこと
私の要件に従ってスクリプトを修正しました。
IF_INET=external
# upload bandwidth limit for interface
BW_MAX=2000
# upload bandwidth limit for 172.16.16.11
BW_CLIENT=900
# first, clear previous settings
tc qdisc del dev ${IF_INET} root
# top-level htb queue discipline; send unclassified data into class 1:10
tc qdisc add dev ${IF_INET} root handle 1: htb default 10
# parent class (wrap everything in this class to allow bandwidth borrowing)
tc class add dev externel parent 1: classid 1:1 htb \
rate ${BW_MAX}kbit ceil ${BW_MAX}kbit
# two child classes
#
# the default child class
tc class add dev ${IF_INET} parent 1:1 \
classid 1:10 htb rate $((${BW_MAX} - ${BW_CLIENT}))kbit ceil ${BW_MAX}kbit
# the child class for traffic from 172.16.16.11
tc class add dev ${IF_INET} parent 1:1 \
classid 1:20 htb rate ${BW_CLIENT}kbit ceil ${BW_MAX}kbit
# classify traffic
tc filter add dev ${IF_INET} parent 1:0 protocol ip prio 1 u32 \
match ip src 172.16.16.11/32 flowid 1:20
しかし、これはいいえアップロードを制限するために使用されます。それでは、解決策は何ですか?
答え1
.10.3および/または.10.4の代わりに172.16.16.11をソースIPとして使用するのはなぜですか? !
ローカル open-vswitch インターフェイスに接続されたローカル VM を使用します ("nc -klvp 42 >/dev/null" 実行)。特定の送信元IPのトラフィック調整を示すために、「class 1:20」から「ceil」パラメータを削除しました。
私のtc
スクリプト
#!/bin/bash
export IF_INET=ovs-br0
export UNIT=kbps
export BW_MAX=2048
export BW_CLIENT=128
tc qdisc del dev ${IF_INET} root &>/dev/null
tc qdisc add dev ${IF_INET} root handle 1: htb default 10
tc class add dev ${IF_INET} parent 1: classid 1:1 htb rate ${BW_MAX}$UNIT
tc class add dev ${IF_INET} parent 1:1 classid 1:10 htb rate $((${BW_MAX} - ${BW_CLIENT}))$UNIT ceil ${BW_MAX}$UNIT
tc class add dev ${IF_INET} parent 1:1 classid 1:20 htb rate ${BW_CLIENT}$UNIT
tc filter add dev ${IF_INET} parent 1:0 protocol ip prio 1 u32 match ip src 172.16.10.3/32 flowid 1:20
tc filter add dev ${IF_INET} parent 1:0 protocol ip prio 1 u32 match ip src 172.16.10.4/32 flowid 1:20
送信元IPが異なるローカルIPアドレス/パス
section61:~ # ip a s dev ovs-br0 | grep 172.16.1
inet 172.16.10.4/24 scope global ovs-br0
inet 172.16.10.3/24 scope global secondary ovs-br0
inet 172.16.10.5/24 scope global secondary ovs-br0
inet 172.16.10.6/24 scope global secondary ovs-br0
section61:~ # ip route get 172.16.10.13 | grep -v cache
172.16.10.13 dev ovs-br0 src 172.16.10.3 uid 0
section61:~ # ip route get 172.16.10.14 | grep -v cache
172.16.10.14 dev ovs-br0 src 172.16.10.4 uid 0
section61:~ # ip route get 172.16.10.15 | grep -v cache
172.16.10.15 dev ovs-br0 src 172.16.10.5 uid 0
section61:~ # ip route get 172.16.10.16 | grep -v cache
172.16.10.16 dev ovs-br0 src 172.16.10.6 uid 0
異なるソースIPを使用する2つのデータストリーム
section61:~ # dd if=/dev/zero of=/dev/stdout count=$((1*1024*1024)) bs=1024 | pv | nc 172.16.10.13 42
7.03MiB 0:00:58 [ 120KiB/s] [ <=> ]
section61:~ # dd if=/dev/zero of=/dev/stdout count=$((4*1024*1024)) bs=1024 | pv | nc 172.16.10.15 42
135MiB 0:01:17 [1.76MiB/s] [ <=> ]
トラフィックを調整するために qdisc クラスを確認するには、以下を実行することをお勧めします。バモン
ヒント
- 1:20レベルで「ceil」を使用する場合、1:10を完全に飽和させるには、2つのデータストリームを同時に作成する必要があります。それ以外の場合は、1:20に1:10の未使用の通知が届きます。
- 「iptables mangle..match-set」を使用してパケットを分類することも機能します。
オープンスコアホップ 15.1 - Linux 4.12.14-lp151.28.75-default