
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/hosts
damit 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.10
wird 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