Netzwerk-Shaping lokaler Proxy zum Testen von Websites

Netzwerk-Shaping lokaler Proxy zum Testen von Websites

Ich möchte eine virtuelle Netzwerkschnittstelle zum TCP-Proxy einer Website erstellen und sie meinem Browser über eine langsame Netzwerkverbindung anzeigen lassen, um Leistungsprobleme auf der Website selbst zu debuggen.

Bisher ist es mir gelungen, es folgendermaßen einzurichten:

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

und dann

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

Außerdem habe ich einen Alias ​​eingetragen, /etc/hostsdamit ich die Website unter der IP-Adresse sehen kann 10.54.0.10.

Nun, ich kann die Site über dieses Setup problemlos sehen, die Adresse 10.54.0.10wird sogar in den Chrome-Entwicklertools angezeigt. Aber Traffic Shaping funktioniert nicht ... Ich sehe immer noch, dass zu viele Bytes zu schnell heruntergeladen werden. Wie kann ich Traffic Shaping zum Laufen bringen?

HINWEIS: WENN es eine Möglichkeit gibt, die Drosselung vom Proxy durchführen zu lassen, funktioniert das bei mir auch.

Antwort1

Sie können den Datenverkehr auf Ihrer regulären Schnittstelle gestalten, ohne eine virtuelle Schnittstelle hinzuzufügen.

Weisen Sie einer QDisc eine eindeutige ID zu

tc qdisc add dev eth0 root handle 1: htb

Weisen Sie die Klasse der oben definierten qdisc zu. Dies wird als untergeordnetes Element von qdisc betrachtet. Ich verwende den htb-Modus, da dies im Wesentlichen eine funktionsreichere Version von tbf ist.

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

Weisen Sie der Klasse einen Filter zu und suchen Sie aktiv nach Verkehr, der mit „10“ gekennzeichnet ist.

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

Da TC nun Regeln hat, müssen wir den Verkehr AN die Verkehrskontrolle senden, damit er gedrosselt wird.

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

Damit Sie nicht jeden drosseln, der 443-Datenverkehr sendet, gehen wir noch einen Schritt weiter und schreiben eine Regel, die nur Ihren Datenverkehr betrifft.

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

Indem wir unseren Datenverkehr auf dem Weg aus dem Server markieren, stellen wir sicher, dass alle (technisch gesehen 90 %) aller wahrscheinlichen Linux-Netzwerkweiterleitungen abgeschlossen sind. Jetzt können wir den Datenverkehr markieren, der unserer Regel entspricht. Die Quelle ist ein Laptop oder ein anderer Server, von dem der Test kommt und der über Port 443 ankommt. Er wird im Paketheader mit einer 10 markiert. Sobald dies erkannt wird, nimmt der Kernel das Paket und wendet TC-Regeln darauf an.

Sie können alle Mangle-Regeln anzeigen, indem Sieiptables -t mangle -nvL

verwandte Informationen