web-dev-qa-db-ja.com

Linux Wi-FIアクセスポイントでのトラフィックシェーピング(パケットの遅延と損失のシミュレーション)

Wi-FiアクセスポイントとしてPi3 B +をセットアップしていて、APを介して通信する接続デバイスのパケット遅延とパケット損失をシミュレートしたいと思います。 tcとiptablesを使用してこれを実現し、APを介して通信する接続デバイスのパケットジッターと損失を引き起こすことができると思いましたが、これらのパケットは影響を受けません。影響を受ける唯一のパケットは、宛先IPがAPである接続デバイスからのパケット、または宛先IPが接続デバイスである宛先のAPパケットです。 APを介して通信する接続デバイスに影響を与える方法についての洞察をいただければ幸いです。また、APに接続されているデバイスのソフトウェアまたは構成を変更できません。 APで以下のようなコマンドを試しましたが成功しませんでした。

tc qdisc change dev wlan0 root netem delay 100ms 10ms

tc qdisc change dev wlan0 root netem loss 0.1

iptables -D INPUT -m statistic --mode random --probability 0.2 -j DROP

iptables -D OUTPUT -m statistic --mode random --probability 0.2 -j DROP

iptables -D FORWARD -m statistic --mode random --probability 0.2 -j DROP

1
user9773452

Iptablesを必要とせずに、この目的でnetemを使用できるはずです。必要な遅延と損失を単一のnetemインスタンスに組み合わせることができます。

ただし、各qdiscは、デフォルトではそのインターフェイスで発信トラフィックのみを処理します。着信トラフィックには別のパスが含まれるため、それらに影響を与えるには、そのパスに別のqdiscを配置する必要があります。 2番目のnetemインスタンスをイーサネットインターフェイスに接続するか、Wifi入力トラフィックを仮想中間デバイスを通過するように指示することができます。後者には以下が必要です。

ifconfig ifb0 up
tc qdisc add dev wlan0 handle ffff: ingress
tc filter add dev wlan0 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root netem ...

Iptablesが機能しない理由の1つは、デフォルトでは、効率上の理由からブリッジトラフィックが通過せず、ルーティングトラフィックのみが通過するためです。ブリッジトラフィックをiptables経由で送信するためのコンパイル時のカーネル構成オプションもありますが、あなたの場合は必要ないと思います。

1
Chromatix