Linux Advanced Routing&Traffic Control HOWTO のこのセクションに基づいて、コンピューターのネットワーク速度を制限するためのtc
を取得できません。
ルーターは、いくつかのルーティング機能とファイアウォールを備えたMotorolaSurfBoardモデムです。トラフィックを制限したいマシンは192.168.0.5であり、スクリプトは192.168.0.5から実行されています。
上記のリンクの/etc/NetworkManager/dispatcher.d/
用のコマンドの適応は次のとおりです。
#!/bin/sh -eu
# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:
# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
# set to a 3mbit interface for more precise calculations
tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000 \
bandwidth 3mbit
# leave 30KB (240kbps) to other machines in the network
tc class add dev wlan0 parent 1: classid 1:1 cbq \
rate 2832kbit allot 1500 prio 5 bounded isolated
# redirect all traffic on 192.168.0.5 to the previous class
tc filter add dev wlan0 parent 1: protocol ip prio 16 \
u32 match ip dst 192.168.0.5 flowid 1:1
# change the hashing algorithm every 10s to avoid collisions
tc qdisc add dev wlan0 parent 1:1 sfq perturb 10
fi
問題は、テストのために2832kbitを非常に小さい値(16kbitなど)に設定しようとしたが、それでも参照できることです。高速でウェブ。スクリプトを手動でテストしているため、問題はNetworkManager
にはありません。
EDIT:dst 192.168.0.5
をsrc 192.168.0.5
に変更すると、アップロード速度が確実に制限されることがわかりましたが、まだです。私にとって最も重要なダウンロード速度を機能させる方法を考え出しました。
宛先マシンはすでに到着しているため、着信トラフィックを制限することはできません。
やりたいことを正しく行うには、ゲートウェイにtc
を置く必要があります。これはおそらくあなたにとっての選択肢ではありませんが、それが方法です。
入力トラフィックは、制限速度を超えるパケットを破棄するという点でのみポリシングできます。同じパケットを再度受信するために後でより多くの帯域幅を使用するようになったため、これは非効率的です。 TCPは、パケットが失われたときに速度を落とすことによってトラフィックの損失を処理するように設計されているため、これはやや大まかに機能しますが、TCPがスケーリングすると、常に遅くなり、速くなります。あなたの最新のコメントはあなたが経験していることを示しています。
ただし、 'Intermediate Functional Block Device' をネットワーク経路に押し込むことにより、システムをそれ自体のゲートウェイにする方法があります。それを読んでから、インバウンドのレート制限のためにそれを試すことをお勧めします。
これを参照してください INGRESS/EGRESSシェーピング/ポリシングに関する「理論」の議論 Gentooサイトで。