cgroupでアプリケーションのダウンロード(接続)速度を制限しようとしています。 iptablesでアプリケーションの出力パケットを表示し、表示されたパケットを処理するようにtcフィルタを設定して、アップロード(送信)速度を正常に制限できました。ただし、受信に対して同じ手順を実行しても機能しません。
私が従う制限ステップアップロード:
- cgroup別にOUTPUTパケットを表示
$ sudo iptables -I OUTPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope'\
-j MARK --set-mark 11
- ルートqdiscのファームウェアタグ(11)でフィルタリング
$ tc qdisc add dev $IFACE root handle 1: htb default 1
$ tc filter add dev $IFACE parent 1: protocol ip prio 1 handle 11 fw \
action police rate 1000kbit burst 10k drop
これはFirefoxのアップロード速度を1000kbitに正常に制限します。
私が制限しようとしていたステップダウンロード:
- cgroup別にINPUTパケットを表示
$ sudo iptables -I INPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope'\
-j MARK --set-mark 22
- qdiscエントリのファームウェアタグ(22)でフィルタリング
$ tc qdisc add dev $IFACE ingress handle ffff:
$ tc filter add dev $IFACE parent ffff: protocol ip prio 1 handle 22 fw \
action police rate 1000kbit burst 10k drop
iptablesを使用してアプリケーションのダウンロードを正常にブロックできます。
$ sudo iptables -I INPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-....scope' -j DROP
それでは、iptablesは着信パケットをcgroupとしてマークしているように見えますが、何らかの理由でtcがそれをフィルタリングできないか、tcフィルタが適用される前にパケットが消費されていますか?それでは、入力パケットを表示する目的は何ですか?
cgroupに着信パケットをブロックする方法がある場合は、これを制限する方法もあるでしょうか?
答え1
@ABのコメントによると:
mangle / INPUTに設定されたフラグは、tcエントリがwaaaayの前に発生するため、tcには影響しません。確認する:en.wikipedia.org/wiki/Netfilter#/media/
...
cgroupのアウトバウンドパケットの接続マークを保存するには、-j CONNMARK --save-mark
次のコマンドを使用してインバウンドパケットの接続マークを取得します。TC-Commac、最後にパケットを次にリダイレクトします。IFBアプリ警察。
- cgroup接続パケットの表示(双方向):
$ sudo iptables -A OUTPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope' \
-j MARK --set-mark 0x11
$ sudo iptables -A OUTPUT -t mangle -j CONNMARK --save-mark
- ifb インターフェイスの生成
$ modprobe ifb
$ ip link set ifb0 up
$ tc qdisc add dev ifb0 root htb #For policing, we don't care about the qdisc type
connmark
$IFACEエントリを検索してifb0にリダイレクトします。
$ tc qdisc add dev $IFACE ingress handle ffff:
$ tc filter add dev $IFACE parent ffff: protocol all prio 10 u32 match u32 0 0 flowid 1:1 \
action connmark \
action mirred egres s redirect dev ifb0
- ifb0 ルート qdisc のタグ付きパケットにポリサーを適用する
$ tc filter add dev ifb0 parent 1: protocol ip prio 20 handle 0x11 fw \
action police rate 1000kbit burst 10k drop
これはFirefoxのダウンロード速度を1000kbitに制限します。