ウェブサイトテスト用のネットワークシェーピングローカルプロキシ

ウェブサイトテスト用のネットワークシェーピングローカルプロキシ

ウェブサイト自体のパフォーマンスの問題をデバッグするために、ウェブサイトを TCP プロキシするための仮想ネットワーク インターフェイスを作成し、低速ネットワーク接続を介してブラウザにウェブサイトを表示させたいと思います。

これまでのところ、私は次のように設定することができました:

ip link add dummy-SLOW type dummy
ifconfig dummy-SLOW 10.54.0.10 up
tc qdisc add dev dummy-SLOW root tbf rate 120kbit latency 200ms burst 1540

その後

socat tcp-listen:443,bind=10.54.0.10,reuseaddr,fork tcp:XXX.XXX.XXX.XXX:443

/etc/hostsIP アドレスで Web サイトを表示できるように、エイリアスも追加しました10.54.0.10

まあ、この設定でサイトを見ることはできますし、問題もありません。Chrome の devtools でもアドレス10.54.0.10が表示されます。しかし、トラフィック シェーピングが機能していません... ダウンロードするバイト数が多すぎて、速度が速すぎるのがまだわかります。トラフィック シェーピングを機能させるにはどうしたらいいでしょうか?

注: プロキシにスロットルを実行させる方法があれば、それも機能します。

答え1

仮想インターフェースを追加せずに、通常のインターフェースでトラフィックをシェーピングできます。

qdiscに一意のIDを割り当てる

tc qdisc add dev eth0 root handle 1: htb

上記で定義した qdisc にクラスを割り当てます。これは qdisc の子とみなされます。htb モードを使用するのは、基本的に tbf の機能が豊富なバージョンだからです。

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 120kbit latency 200ms burst 1540

クラスにフィルターを割り当て、「10」のタグが付けられたトラフィックを積極的に探します

tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10

TC にルールができたので、トラフィックをトラフィック制御に送信してスロットルを調整する必要があります。

iptables -A OUTPUT -t mangle -p tcp --dport 443 -j MARK --set-mark 10

さらに一歩進んで、443 トラフィックを実行するすべてのユーザーを制限しないように、自分のトラフィックにのみ影響するルールを記述しましょう。

iptables -A OUTPUT -t mangle -p tcp -s <client IP > --dport 443 -j MARK --set-mark 10

サーバーから出る途中でトラフィックをマークすることで、すべての可能性のある Linux ネットワーク ルーティング (技術的には %90) が完了していることが保証され、ルールに一致するトラフィックをマークする準備が整います。テストがポート 443 に入ってくるラップトップまたは別のサーバーがソースである場合、パケット ヘッダーに 10 がマークされます。これが確認されると、カーネルはパケットを受け取り、TC ルールを適用します。

全てのマングルルールを見るには、iptables -t mangle -nvL

関連情報