[Gelöst] Traffic Shaping auf einer FB 7330

KuShi

Neuer User
Mitglied seit
12 Apr 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo.
Ich habe eine Fritzbox 7330 und versuche, die Download-Rate meiner Box zu drosseln, um stets einen vernünftigen Ping für Online-Spiele zu haben, unabhängig von der aktuell genutzten Download-Rate.

Ich suche schon seit Tagen hin-und-her und habe noch (fast) nichts konkretes erreicht.
Ich habe folgendes versucht:

1. trickle + Proxy (Privoxy) + iptables
Dabei habe ich es geschafft, privoxy mit trickle zu bremsen, sodass ein wget über diesen Proxy die korrekte Download-Geschwindigkeit bekommt. Mittels iptables-Regeln wollte ich dann Port 80 auf den Proxy umleiten, aber das hat den Download nicht gebremst und auch ein Eintragen des Proxy im Browser führte nicht zum Erfolg. Dies war bisher trotzdem mein erfolgreichster Versuch.

2. tcpnice
Ich habe mich an dem Thread hier orientiert, um die Pakete zum Laufen zu bekommen, bin aber letztendlich daran gescheitert, die libnids-Bibliotheken zu compilieren. Der build scheitert mit der Fehlermeldung, die auch der Threadersteller hatte.

3. iproute2
Auch diesen Weg konnte ich nicht erfolgreich zu Ende gehen, weil mir die Kenntnisse fehlen, die Benötigten Pakete zu bauen. Ich habe versucht, den Patch von hier zu benutzen, das führte aber leider zu keinem Erfolg, weil dieser einige Dateien nicht finden konnte (Vielleicht wegen des anderen Modells 7390!=7330?)

Kennt sich hier jemand mit einer dieser Möglichkeiten aus und könnte mir weiter helfen? Oder gibt es gar noch andere Wege, die mich ans Ziel bringen? Am liebsten wäre mir die Möglichkeit mit tcpnice, weil ich so niemandem in meinem Haushalt die mögliche Geschwindigkeit im Download vorenthalte, oder mit iproute2, weil ich dann wenigstens alle Ports mit einschließen kann (Privoxy kann scheinbar nur den HTTP-Port nutzen), aber letztendlich ist mir alles recht, was meine Pingspitzen mindert.

Ich habe mich nun zwar schon etwas in Freetz eingelesen und kenne somit einige Feinheiten der Firmware-Erstellung, ich zähle mich aber trotzdem zu den absoluten Anfängern. Daher wäre es wirklich super, wenn Ihr Eure Erklärungen relativ einsteigerfreundlich gestalten könntet.
 
Zuletzt bearbeitet:
4. Hast du dir schon tc angeschaut? AVM scheint damit das Traffic Shaping zu machen, so dass es schon von Haus aus an Bord ist. Die Syntax ist etwas aufwendig, aber mit dem Programm tcng relativ leicht in den Griff zu bekommen.

Ich habe tc aber nicht vernünfig zum Laufen bekommen, weil die Zuordnung zu den Interfaces dsl oder vdsl nicht wirklich funktionert hat (genaueres weiß ich leider nicht mehr).
 
Danke für Deinen Tip.
das Programm tc ist auch Thema bei meinem dritten Punkt mit iproute2.
Dazu habe ich versucht, mich an diesen und diesen Thread zu halten.
Im ersten Thread soll ein zweites tc als tc2 installiert werden, im zweiten wird, wenn ich das richtig verstehe, das tc aus dem Kernel um die nötigen Funktionen erweitert. Ich erhalte jedoch bei allen Versuchen, eine Firmware zu bauen, folgende Fehlermeldungen (in etwa), die mit iproute2 zusammenhängen (Das passiert auch, wenn ich 'make iproute2-precompiled' ausführe):

Code:
nils@KuShi-Ubuntu:~/Freetz/freetz-trunk2$ make iproute2-precompiled
PATH=""/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin:/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4/mips-unknown-linux-gnu/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"" \
	make -j2 CC="/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/mips-linux-uclibc-gcc" \
		CROSS_COMPILE="/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/mips-linux-uclibc-" \
		EXTRA_CFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" \
		ARCH="mips" \
		-C source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0
make[1]: Betrete Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0'
make[2]: Betrete Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0/lib'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0/lib'
make[2]: Betrete Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0/ip'
/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -Wl,-export-dynamic  ip.o ipaddress.o ipaddrlabel.o iproute.o iprule.o ipnetns.o rtm_map.o iptunnel.o ip6tunnel.o tunnel.o ipneigh.o ipntable.o iplink.o ipmaddr.o ipmonitor.o ipmroute.o ipprefix.o iptuntap.o ipxfrm.o xfrm_state.o xfrm_policy.o xfrm_monitor.o iplink_vlan.o link_veth.o link_gre.o iplink_can.o iplink_macvlan.o iplink_macvtap.o ipl2tp.o link_vti.o ../lib/libnetlink.a ../lib/libutil.a  -lresolv ../lib/libnetlink.a ../lib/libutil.a -ldl -o ip
/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -Wl,-export-dynamic  rtmon.o  -lresolv ../lib/libnetlink.a ../lib/libutil.a -ldl -o rtmon
/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.6.4/../../../../mips-linux-uclibc/bin/ld: cannot find -lresolv
collect2: ld returned 1 exit status
make[2]: *** [rtmon] Fehler 1
make[2]: *** Warte auf noch nicht beendete Prozesse...
/home/nils/Freetz/freetz-trunk2/toolchain/build/mips_gcc-4.6.4_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.6.4/../../../../mips-linux-uclibc/bin/ld: cannot find -lresolv
collect2: ld returned 1 exit status
make[2]: *** [ip] Fehler 1
make[2]: Verlasse Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0/ip'
make[1]: *** [all] Fehler 2
make[1]: Verlasse Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0'
make: *** [source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/iproute2-3.6.0/tc/tc] Fehler 2
nils@KuShi-Ubuntu:~/Freetz/freetz-trunk2$

Ich weiß nicht, woran das liegt und kann den Fehler daher leider nicht beseitigen; ich kenne mich leider zu wenig aus mit den build-Vorgängen.

- edit

Ich erhalte übrigens auch einen ähnlichen Fehler, wenn ich versuche, tcpnice zu bauen. Dann hängt irgend ein Prozess beim Bau von libnids.

Code:
make[2]: *** [killtcp_pic.o] Fehler 1
make[2]: *** Warte auf noch nicht beendete Prozesse...
make[2]: Verlasse Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/libnids-1.24/src'
make[1]: *** [shared] Fehler 2
make[1]: Verlasse Verzeichnis '/home/nils/Freetz/freetz-trunk2/source/target-mips_gcc-4.6.4_uClibc-0.9.32.1/libnids-1.24'

Beide Fehler kommen scheinbar wegen 'duplicate member [xy]' (insgesamt 16x)

- edit 2

Ich habe es jetzt geschafft, die iproute2 Pakete zu kompilieren.
Ich hatte die Patches aus den beiden Threads vermischt, was ja offensichtlich nicht funktionieren kann.
Nachdem ich nun den Patch aus dem ersten Thread nochmal durchgegangen bin und die Dateien manuell korrigiert habe, konnte 'iproute2' incl. 'tc' (als 'tc2') gebaut werden.
Leider erhalte ich bei der Eingabe einiger tc-Befehle folgende Fehlermeldung

Code:
root@fritz:/var/mod/root# tc2 qdisc add dev ath0 root handle 1:0 htb
root@fritz:/var/mod/root# tc2 class add dev ath0 parent 1: classid 1:1 htb rate 7mbit ceil 7mbit
root@fritz:/var/mod/root# tc2 class add dev ath0 parent 1:1 classid 1:10 htb rate 1512kbit ceil 7mbit
root@fritz:/var/mod/root# tc2 filter add dev ath0 protocol ip parent 1:0 prio 1 handle 2 fw classid 1:10
RTNETLINK answers: No such file or directory
We have an error talking to the kernel

Ich konnte mit folgendem Teil aus dem Patch auch nichts anfangen

Code:
Index: kernel/Config.in.modules
===================================================================
--- kernel/Config.in.modules	(revision 10304)
+++ kernel/Config.in.modules	(working copy)
@@ -524,6 +524,18 @@
 	select FREETZ_MODULE_l2cap
 	default n
 
+config FREETZ_MODULE_act_police
+	bool "act_police.ko"
+	default n
+	help
+		act_police allows tc qdisc QoS to limit traffic.
+
+config FREETZ_MODULE_act_mirred
+	bool "act_mirred.ko"
+	default n
+	help
+		Make it possible for traffic shaping to use redirect packets.
+
 config FREETZ_MODULE_cls_u32
 	bool "cls_u32.ko"
 	default n
@@ -532,6 +544,19 @@
 		packet, so it is in some ways the most powerful filter provided
 		by the Linux traffic control engine.
 
+config FREETZ_MODULE_cls_fw
+	bool "cls_fw.ko"
+	default n
+	help
+		The fw filter allows you to match on based on the firewall mark
+		created by iptables.
+
+config FREETZ_MODULE_ifb
+	bool "ifb.ko"
+	default n
+	help
+		Makes it possible to use iptables on ingress queues.
+
 config FREETZ_MODULE_ipv6
 	bool "ipv6.ko"
 	depends on FREETZ_TARGET_IPV6_SUPPORT && ! FREETZ_HAS_AVM_IPV6
@@ -574,6 +599,12 @@
 		HTB is very similar to the CBQ regarding its goals however it has
 		different properties and different algorithm.
 
+config FREETZ_MODULE_sch_hfsc
+	bool "sch_hfsc.ko"
+	default n
+	help
+		HFSC
+
 config FREETZ_MODULE_sch_llq
 	bool "sch_llq.ko"
 	default n
@@ -602,6 +633,13 @@
 		See the top of <file:net/sched/sch_tbf.c> for a description of the
 		TBF algorithm.
 
+config FREETZ_MODULE_sch_ingress
+	bool "sch_ingess.ko"
+	default n
+	help
+		Allow traffic shaping on the ingress queue of network interfaces.
+		This makes it possible to drop packets to trigger TCP congestion control.
+
 endmenu

Kann mir jemand von Euch sagen, welche Datei ich dafür editieren muss?
Eine Datei namens 'kernel/Config.in.modules' exisitiert bei mir nicht und wenn ich sie erstelle, hat das keine Auswirkung auf die Menüs. (Auch nicht als 'kernel/Config.in')
In den Kernel-Quellen sind alle Module enthalten, aber ich bekomme sie nicht in die Auswahl der Kernel-Module bei 'make menuconfig'

- edit 3

Okay, die Module liegen scheinbar auf meiner Fritzbox, können aber nicht korrekt geladen werden.
Ich weiß zwar nicht, was die Module machen, aber scheinbar werden sie benötigt, weil 'tc' ohne sie ja nicht richtig funktioniert.
Wenn ich versuche, die via 'modprobe' zu laden, erhalte ich bei 3 Modulen Fehlermeldungen:

Code:
root@fritz:/var/mod/root# modprobe ifb
root@fritz:/var/mod/root# modprobe sch_hfsc
root@fritz:/var/mod/root# modprobe sch_ingress
root@fritz:/var/mod/root# modprobe act_police
modprobe: can't load module act_police (kernel/net/sched/act_police.ko): unknown symbol in module, or unknown parameter
root@fritz:/var/mod/root# modprobe act_mirred
modprobe: can't load module act_mirred (kernel/net/sched/act_mirred.ko): unknown symbol in module, or unknown parameter
root@fritz:/var/mod/root# modprobe cls_fw
modprobe: can't load module cls_fw (kernel/net/sched/cls_fw.ko): unknown symbol in module, or unknown parameter

Was bedeutet das nun?

- edit 4

Okay, ich habe es hinbekommen.
Es läuft. Jetzt muss ich es nur noch konfigurieren.
 
Zuletzt bearbeitet:
[...]

- edit 4

Okay, ich habe es hinbekommen.
Es läuft. Jetzt muss ich es nur noch konfigurieren.

Sorry wenn ich einen so alten Thread hochhole. Nutzt du iproute2/tc noch und kannst du einen aktuellen patch für die binaries und module bereitstellen?

Ich möchte ebenfalls gerne downstream-QoS machen, weil das upstream-QoS von AVM nicht funktioniert. Ich wundere mich, dass es die verschiedenen iproute2/tc/netfilter-mods nie upstream geschafft haben.

Seid ihr alle mit dem AVM-QoS zufrieden? Also bei mir schaffen es bei einem DSL6000/1024 einzelne Nutzer den gesamten downstream an sich zu reissen, so dass mein Video-Stream ruckelt ohne das das AVM-upstream-QoS zuschlägt.


Gruß
// tetzlav
 
natürlich nicht. meine erste fritze konnte nur mit mühe und not die par mickrige hundert tcp verbindungen bereitstellen, die ich vor ca. 10 jahren brauchte.
von funktionierendem qos war nie zu reden.
das einzige was damals geholfen hat war einfach einen standard linux pc (andere konkurrenz-router haben auch nicht funktioniert) mit hfsc scheduler via pppoe zu nem modem zu benutzen und die fritze ausschliesslich als voip client zu benutzen.
seit kurzem hab ich allerdings endlich 50/10 VDSL, wo nur noch selten die verbindung ganz ausgelastet wird. hier habe ich also fast keine verwendung mehr für mein qos setup.
hätte trotzdem gerne endlich mal was mehr kontrolle über meine fritze, der dhcp server ist immer noch genauso schlecht wie vor 10 jahren. da ich für das neue VDSL ne neue fritze bekommen hab, die leider kein bridging oder pppoe passthrough mehr unterstützt wird's langsam mal zeit da nen benutzbaren zustand herzustellen.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.