特定のポートのダウンストリーム帯域幅を監視しようとしています。しかし、膨大な制限とバーストがなければ、ダウンロードは完全に停止するようです。
IF="wlp3s0"
LIMIT="100kbit"
BURST="100kbit"
PORT="80"
echo "resetting tc"
tc qdisc del dev ${IF} ingress
echo "setting tc"
tc filter add dev ${IF} parent ffff: \
protocol ip prio 1 \
u32 match ip dport ${PORT} 0xffff \
police rate ${LIMIT} burst $BURST drop \
flowid :1
tc filter add dev ${IF} parent ffff: \
protocol ip prio 1 \
u32 match ip sport ${PORT} 0xffff \
police rate ${LIMIT} burst $BURST drop \
flowid :1
私はかなり長い間これを調整してきましたが、さまざまな制限とバースト値を試しました - wgetting chozabu.net/testfile(12mb)
どんな提案でも歓迎します!
ベストアンサー1
どのwlanインターフェイスを使用しているのかわかりませんが、ethXまたはあなたの場合、wlan3s0から着信パケットを制御するifbにトラフィックをリダイレクトする必要がある仮想インターフェイスがありません。
だから、次のようなもの
modprobe ifb numifbs=1
ip link set dev ifb0 up
tc filter add dev wlp3s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev $VIRTUAL root handle 2: htb
tc filter add dev $VIRTUAL protocol ip parent 2: prio 1 u32 match ip sport ${PORT} 0xffff police rate ${LIMIT} burst $BURST drop \
flowid :1
特定のIPアドレス(またはネットワーク)からの着信または発信トラフィックの帯域幅をフィルタリングできるbashスクリプトを作成しました。
https://gist.github.com/ole1986/d9d6be5218affd41796610a35e3b069c
Usage: ./traffic-control.sh [-r|--remove] [-i|--incoming] [-o|--outgoing] <IP>
Arguments:
-r|--remove : removes all traffic control being set
-i|--incoming : limit the bandwidth only for incoming packetes
-o|--outgoing : limit the bandwidth only for outgoing packetes
<IP> : the ip address to limit the traffic for