[Frage] QoS mit Freetz

Ich weiß jedoch nicht wie es jetzt weitergeht.
Wenn der privoxy jetzt läuft und über diesen das Internet entsprechend "tröpfelt" (ich finde den Namen gut), dann mußt Du nur noch den Traffic der anderen Teilnehmer mit entsprechenden iptables-Einträgen nicht ins Internet, sondern an die lokale Adresse und den lokalen Port des privoxy umleiten ... wenn Du sie nicht direkt zur Benutzung des privoxy "verdonnern" kannst, dann kannst Du Dir den ganzen iptables-Kram komplett schenken.

Bei der alten Version sollte sogar das iptables-CGI noch funktionieren, da kannst Du die Regeln dann im Browser verwalten.
 
Meine Frage wäre dazu immer noch, was das Umleiten sämtlicher Verbindungen (per iptables) durch den Proxy für Auswirkungen auf FTP-Verbindungen hat - Privoxy kann immerhin kein FTP. Bzw. was mit diesen Verbindungen passiert, falls man sie nicht durch den Proxy leiten kann.

Bei einsichtigen Mitbewohnern, die sich den Proxy freiwillig einstellen würden, hätte man auch einfach um die Installation von NetLimiter o. ä. (zur Bandbreiten-Beschränkung direkt auf dem Rechner) bitten können.
 
den Proxy für Auswirkungen auf FTP-Verbindungen hat
Beim passivem FTP sollte das egal sein, der Client baut die Datenverbindung auf und die geht wie jede andere über den Proxy. Wo siehst Du da ein Problem ?

Bei aktivem FTP sind es genau dieselben Probleme wie bei jedem NAT, deshalb macht es ja auch fast niemand mehr. Da dort der Server die Datenverbindung öffnet, muß der Router die FTP-Verbindung dahingehend überwachen, daß er aus dem PORT-Kommando des Clients an den Server den eingehenden Port ausliest und diesen Port für die eingehende Verbindung vormerkt (so eine Art temporäres Portforwarding) oder gleich das PORT-Kommando so modifiziert, daß er seine eigene Vorstellung von dem Port, auf dem die Verbindung eingehen sollte, an den Server sendet ... denn es ist ja nicht garantiert, daß der vom Client dafür vorgesehene Port am Router nach außen nicht schon von jemand anderem benutzt wird. Spätestens bei verschlüsselter Control-Verbindung ist es mit active ftp dann aber in einem NAT-Szenario Essig. Bei aktivem FTP ist es dann auch egal, ob das ein Router oder ein Proxy-Server ist, eine Umsetzung von Adressen/Ports mit den entsprechenden Konsequenzen findet ja bei beiden statt. Wenn der privoxy dann explizit kein FTP kann, dürfte das für aktives FTP gelten, denn eine passive FTP-Datenverbindung unterscheidet sich meiner Ansicht nach nicht von einer beliebigen anderen Verbindung.

Bei einsichtigen Mitbewohnern, die sich den Proxy freiwillig einstellen würden, hätte man auch einfach um die Installation von NetLimiter o. ä. (zur Bandbreiten-Beschränkung direkt auf dem Rechner) bitten können.
Wenn er den Anschluß bezahlt, sollte man auch Einsicht erwarten können ... aber die Installation von Software auf irgendwelchen Geräten setzt ja auch immer den Zugang bzw. das Vorhandensein solcher Software voraus. Bei einem Tablet oder auch direkt einem TV-Gerät mit Netzzugang oder diesen neumodischen Sachen wie Apple TV, Amazon Fire TV oder HDMI-Sticks kann das etwas schwierig werden (allerdings die Verwendung eines SOCKS-Proxies zugegebenermaßen auch).
 
Zuletzt bearbeitet:
So weit so gut, ich musste jetzt nochmal ein neues Image erstellen, da nur iptables ohne iptables-cgi installiert war.
Jetzt stehe ich vor dem Problem, dass ich nicht weiß wie ich die Regeln anpassen muss.
Hier mal ein Screenshot des iptables editors:
iptables.jpg
Bezüglich des Benutzens des Proxys wird es sicherlich keine Probleme geben :eek:
Die Proxy Adresse ist 0.0.0.0:8118, der Zielrechner zum testen sollte 192.168.178.22 sein.
Nochmal vielen Dank für eure Bemühungen :rolleyes:
 
Zuletzt bearbeitet:
Beim passivem FTP sollte das egal sein, der Client baut die Datenverbindung auf und die geht wie jede andere über den Proxy. Wo siehst Du da ein Problem ?
Ich habe auf meiner Box halt auch Privoxy laufen und jede (vermutlich also aktive) FTP-Verbindung wird mit der Meldung "Invalid request. Privoxy doesn't support FTP." abgesägt.

Möchte ich also beispielsweise bei AVM oder wo auch immer vom FTP eine Firmware o. ä. herunterladen, muss ich das ohne Proxy machen. Z. B.
ftp://ftp.avm.de/fritz.box/
oder direkt auf eine Datei
ftp://ftp.avm.de/fritz.box/fritzbox...utsch/FRITZ.Box_Fon_WLAN_7320.100.06.03.image
funktioniert bei mir mit Privoxy nicht.

Das nervt manchmal ein wenig, lässt sich bei mir ja aber recht einfach umgehen - Proxynutzung abschalten (mit FoxyProxy schnell gemacht) oder einen Browser ohne konfigurierten Proxy nehmen und fertig. Frage wäre natürlich, ob ich aktives FTP durch die Privoxy-Konfiguration rausnehmen kann (habe ich bisher noch nicht gefunden) oder in der Browser-Konfiguration ändere.


Ich habe mich mit iptables noch nie beschäftigt, dafür bestand und besteht bei mir einfach keine Notwendigkeit (zumindest bisher). Daher kann ich da in Sachen Konfiguration/Syntax nicht helfen.
Ich würde mir jedoch folgendes denken (theoretisches Halbwissen :p): Entweder weist du deinen Mitbewohnern eine feste LAN-IP zu und leitest deren HTTP(S)-Verbindungen per iptables auf den Proxy oder du machst es anders herum (wenn das mit iptables geht). Also deinen Geräten feste IPs zuordnen und allen Traffic, ausgenommen deiner IPs, durch den Proxy schicken.

Aber vielleicht hast du das ja inzwischen schon gemacht, ich bin bisher leider nicht zum Antworten gekommen - tut mir Leid.
Ich würde mich aber freuen, wenn du abschließend deine lauffähige Konfiguration postest - denn sowas fehlt leider in vielen Problem-Threads. :sad:

edit: Mein Proxy-FTP-Problem habe ich nun mit einem entsprechenden Blacklist-Eintrag bei FoxyProxy gelöst. :smile:
 
Zuletzt bearbeitet:
Moin

Vielleicht den Proxy wechseln?
Denn tinyproxy kann das...
Code:
Nov 18 10:07:32 tinyproxy[4315]: Request (file descriptor 1): GET ftp://ftp.avm.de/ HTTP/1.1
Nov 18 10:07:32 tinyproxy[4315]: process_request: trans Host GET http://ftp.avm.de:80ftp://ftp.avm.de/ for 1
Nov 18 10:07:32 tinyproxy[4315]: No upstream proxy for ftp.avm.de
Nov 18 10:07:32 tinyproxy[4315]: Established connection to host "ftp.avm.de" using file descriptor 7.
 
Ich hatte schon TinyProxy, Polipo und Privoxy mit Freetz ausprobiert, wobei letzterer mir die besten Filtermöglichkeiten bietet und dazu problemlos läuft. TinyProxy war mit der Größe der Filterlisten scheinbar überfordert.

Es läuft ja nun, ich war nur immer so auf die Konfiguration von Privoxy fixiert, dass ich FoxyProxy im Firefox überhaupt nicht bedacht habe.
 
FTP-Verbindung wird mit der Meldung "Invalid request. Privoxy doesn't support FTP." abgesägt.
Ich habe den privoxy selbst nie benutzt, daher kenne ich diese Meldung nicht.

Ich würde da aber auf FTP over HTTP schließen und das sieht am Ende so aus, daß da ein Browser beim Proxy mit einem Request der Form "GET ftp://a.b.c.d/ HTTP/1.1" vorstellig wird.

Das ist dann etwas anderes, da der Proxy in diesem Falle eben ein "HTTP-Proxy" ist und den FTP-Request als solchen erkennen und korrekt behandeln muß.

Ich bin (allerdings habe ich es nur ganz am Ende erwähnt) von einem SOCKS-Proxy ausgegangen, also einem Proxy, der beliebige Verbindungen behandelt, wie es bei dem Verbiegen über iptables ja eigentlich auch notwendig ist. Denn da der Client in diesem Falle ja gar nicht weiß, daß er über einen Proxy geleitet wird, wird er auch keine Proxy-Requests verwenden.

Um das noch mal zu verdeutlichen ...
Mit SOCKS-Proxy
Client -> TCP-Verbindung zum Server über Port 21 -> Proxy -> NAT -> Server

Mit HTTP-Proxy
Client -> HTTP-Verbindung zum Proxy -> Proxy -> TCP-Verbindung zum Server über Port 21 -> Server

Im ersten Fall ist es eine FTP-Verbindung vom Client, im zweiten Fall eine FTP-Verbindung vom Proxy und eine HTTP-Verbindung für den Client.
 
Zuletzt bearbeitet:
Aber vielleicht hast du das ja inzwischen schon gemacht, ich bin bisher leider nicht zum Antworten gekommen - tut mir Leid.
Ich würde mich aber freuen, wenn du abschließend deine lauffähige Konfiguration postest - denn sowas fehlt leider in vielen Problem-Threads. :sad:
Kein Problem ;) Würde ich gerne, wenn ich eine hätte.
Ich bin immer noch mit der iptables Konfiguration überfordert.
Wenn ich den Proxy 0.0.0.0:8118 momentan eintrage geht immer noch die volle Geschwindigkeit durch :(
Gruß Julian
 
Wenn ich den Proxy 0.0.0.0:8118 momentan eintrage geht immer noch die volle Geschwindigkeit durch :(
Wie meinst du das?
Du könntest die Sache doch relativ einfach testen - ohne iptables zu konfigurieren. Du hattest ja geschrieben, dass Privoxy mit trickle läuft und du Up- und Download beschränkt hast (-u 25 -d 300).

Trage doch auf einem beliebigen Rechner im LAN im Browser den Proxy ein (IP der FritzBox + Proxy-Port) und besuche danach die Test-Seite von Privoxy (http://p.p/ oder http://config.privoxy.org/). Damit weißt du schonmal, ob Privoxy funktioniert und deine Verbindung darüber läuft. Die Bandbreitenbegrenzung kannst du dann ebenfalls einfach testen.

Ich kann den Ausführungen von PeterPawn bzgl. SOCKS-Proxy jedoch ehrlich gesagt nicht so ganz folgen, daher weiß ich noch nicht, ob Privoxy demnach generell als ungeeignet für den Zweck sein soll.

Ich bin immer noch mit der iptables Konfiguration überfordert.
Dazu solltest du dann, sofern hier keiner weiter Hilfestellung leisten kann, eine Suchmaschine deiner Wahl bspw. mit 'privoxy iptables' füttern.
 
Habe gerade den Proxy eingetragen (192.168.178.1:8118) und es gehen die vollen 6000 durch, also nichts wird beschränkt. Das meinte ich damit. :confused:
 
Die Verbindung läuft aber über den Proxy (Test-Seite von Privoxy aufrufbar?)?

Und was passiert, wenn du trickle und Privoxy killst und mal von Hand mit
Code:
trickle -s -u 25 -d 300 /var/mod/etc/init.d/rc.privoxy start
startest?

edit: Wird wohl Quatsch bei rauskommen, da du ja die rc.privoxy schon entsprechend bearbeitest hast.
 
Zuletzt bearbeitet:
Ich kann den Ausführungen von PeterPawn bzgl. SOCKS-Proxy jedoch ehrlich gesagt nicht so ganz folgen, daher weiß ich noch nicht, ob Privoxy demnach generell als ungeeignet für den Zweck sein soll.
So könnte man das wahrscheinlich auch formulieren, daher verstehe ich - im Nachhinein, nachdem ich mir angesehen habe, daß der privoxy ein Web-Proxy ist - auch die Intention des ursprünglichen Vorschlags dafür nicht mehr. Ein Web-Proxyfunktioniert am besten, wenn der Client zur Zusammenarbeit bereit ist (auch wenn es Möglichkeiten der automatischen Proxy-Konfiguration gibt, wird der Client selbst - eben automatisch oder manuell - auf die Benutzung des Proxy-Servers eingestellt). Ein Proxy-Request für Web-Inhalte sieht dann etwas anders aus, als ein "normaler" HTTP-Request. Ich will das hier aber nicht einzeln aufdröseln, das würde wieder ein längerer Text und dazu ist nun wirklich im Internet in so ziemlich jeder gewünschten Sprache und mit entsprechenden Illustrationen ein passender schon verfügbar. Auch zur allgemeinen Funktion von Proxies gibt es genug Material.

Wenn es um das Begrenzen von Bandbreiten-Nutzung geht und sich das auch ausdrücklich auf Streaming-Protokolle erstrecken soll (was ja nun beileibe nicht immer als HTTP-Zugriff erfolgt - auch hier hilft eine Suchmaschine oder auch erst einmal Wikipedia), dann muß die Umleitung des Verkehrs auf einen SOCKS-Proxy erfolgen, da nur ein solcher - transparent - per iptables in beliebige Verbindungen eingeschaltet werden kann ... hier muß der Client dann eben nicht mitspielen und spezielle Proxy-Requests verwenden.

Es gibt jedoch auch transparente HTTP-Proxies (dann auch als "Zwangsproxy") ... da gilt die Einschränkung mit den speziellen Requests auch nicht (weil die Proxy-Server so tun, als wären sie kein Proxy, sondern schon das eigentliche Ziel), auch hier jedoch wieder der Verweis auf die Beschränkung auf bestimmte Protokolle. Dafür haben diese Proxies dann u.U. wieder andere Probleme, z.B. mit Keepalive-Verbindungen bei HTTP 1.1.

Mit Web-Proxies (das Web-Proxy impliziert i.d.R. einen HTTP-Proxy, u.U. auch noch mit ein paar anderen "Web"-Protokollen - die synonyme Nutzung von Internet und Web (oder World Wide Web) hat sich zwar eingebürgert, ist aber in diesem Falle die falsche Assoziation) kann man dann eben nur Requests "umleiten", die der Proxy als Protokoll auch versteht ... denn dann nimmt ja in Wirklichkeit der Proxy den Kontakt zum Zielserver auf und nicht der Client; das geht natürlich nur dann, wenn der Proxy auch die "Sprache" kennt.

Der Unterschied zwischen einer FTP-Verbindung über einen HTTP-Proxy und einer FTP-Verbindung ohne diesen ist einfach, daß einmal der Proxy das FTP-Protokoll beherrschen muß (wenn er es mit dem Server "sprechen" will) und beim zweiten der Client selbst. Bei der ersten Variante ist es sogar denkbar, daß der Client (Browser) selbst gar kein FTP-Protokoll versteht ... muß er auch nicht, denn der Proxy "verpackt" den per FTP von der Quelle geholten Verkehr für ihn ja in HTTP als Protokoll und er erkennt den Unterschied (außer an der anderen URL, die er beim Proxy angefordert hat) am Ende gar nicht. Da haben wir uns am Anfang auch mißverstanden, meine Ausführungen zum passiven FTP bezogen sich nicht auf einen "FTP over HTTP"-Request an den Proxy, sondern auf eine direkte FTP-Verbindung vom Client zum Server, wie sie z.B. von Filezilla genutzt würde. Wenn Du eine solche Browser-Erweiterung oder ein alternatives Programm installierst und diesem die Verantwortung für FTP-Links überträgst, hast Du das privoxy-Problem auch nicht (wenn Du nicht auch da den Proxy einträgst) ... allerdings geht dann eben die FTP-Verbindung auch nicht über den Proxy (und würde in der Aufgabenstellung des TE dann auch nicht gedrosselt).

Also: Der privoxy ist nicht generell ungeeignet, allerdings darf nur der HTTP-Verkehr über ihn umgeleitet werden, da er mit dem Rest nichts anfangen kann und diesen folglich stören würde. Das bringt gleichzeitig beim Verwendungszweck des TE das Problem mit sich, daß er nicht genau wissen kann, wann es sich um HTTP-Verkehr handelt. Wenn in einer Webseite eine URL für einen Stream enthalten ist, die eine abweichende Portadresse enthält, würde eine iptables-Regel nur für Port 80 ja genau diesen Verkehr nicht über den privoxy (und damit über die Bremse) leiten.

Daher kommt es am Ende wieder darauf an, was die Mitbewohner da genau sehen/abrufen und wenn er eine generelle Regelung der Bandbreitennutzung erreichen will, dann ist der privoxy imho wirklich ungeeignet, da er damit eben nur eine Regelung der Bandbreite erreichen kann, die von HTTP-Verbindungen (und auch da nur für die bei iptables angegebenen Ports) genutzt wird. Da man einer HTTP-Verbindung auf einem anderen Port als 80 nicht bereits beim Aufbau ansehen kann, daß sie mal eine HTTP-Verbindung sein wird, ist es da mit iptables eigentlich auch nicht möglich, den Start einer solchen Verbindung (also den 3-Wege-Handshake bei der Kontaktaufnahme) bereits über den Proxy abzuwickeln.

Die Probleme eines HTTP-Proxy in Verbindung mit SSL-Verbindungen lasse ich gleich außen vor, das ist wieder ein Kapitel für sich, denn bei HTTPS geht es ja eigentlich um eine Ende-zu-Ende-Verschlüsselung (also Browser-zu-Server) und da ist ein Proxy fehl am Platz im Verbindungsweg, deshalb gibt es unterschiedliche Lösungen dafür.

Ich weiß nicht, ob es diesmal deutlicher ist ... wenn nicht, bitte einfach konkret nachfragen. Ich will ja zur Klärung und nicht zu zusätzlicher Konfusion beitragen.
 
Ja, das war nun für mich verständlicher! :eek:

Vielleicht habe ich mich am Anfang bzgl. Privoxy unklar ausgedrückt - meine Bedenken hinsichtlich FTP decken sich ja nun mit deiner Aussage, dass dieser Proxy dafür -milde ausgedrückt- ungeeignet ist. Ich nutze ihn bei mir lediglich als Werbefilter für HTTP, also für den eigentlichen Zweck.

Danke für die ausführliche Erklärung! Insgesamt vielen Dank für deine Antworten und deine Geduld/Ausdauer bei den ganzen Hilfestellungen usw.!

Und noch ein 'Sorry' an JulPal für den falschen Wink mit Privoxy. :silly:

Also gleich mal auf zum nächsten Vorschlag. :eek:

trickle + SOCKS-Proxy + iptables wäre dann wohl das Mittel der Wahl, oder?
Als SOCKS-Proxy habe ich bei Freetz erstmal nicht viel gefunden (in dem Zusammenhang finde ich es sehr schade, dass http://freetz.org/wiki/packages nicht annährend aktuell ist), bin aber dann nach einigem Gesuche auf "dante" gestoßen. Das Paket ist auch ganz normal unter make menuconfig gelistet.

Ich habe gleich mal versucht, das Szenario (trickle + dante + iptables) auf meiner Test-Box (W701V) ans Laufen zu bringen. Im Freetz-WebIF gibt es jedoch keinen Punkt zu Dante o. ä. (wird aber bei den installierten Paketen angezeigt), also habe ich mal per telnet geschaut.

Code:
root@fritz:/# danted
Nov 19 13:15:03 (1416399303.340738) danted[2041]: parseconfig(): could not open
/etc/sockd.conf: No such file or directory (errno = 2)
Die Datei gibt es auch auf der Box nicht, lässt sich aber lt. danted -help per Parameter angeben.

Code:
root@fritz:/var# danted -help
dante v1.2.2.  Copyright (c) 1997 - 2010, Inferno Nettverk A/S, Norway.
usage: danted [-DLNVdfhnv]
   -D             : run in daemon mode
   -L             : shows the license for this program
   -N <number>    : fork of <number> servers [1]
   -V             : verify configuration and exit
   -d             : enable debugging
   -f <filename>  : use <filename> as configuration file [/etc/sockd.conf]
   -h             : print this information
   -n             : disable TCP keep-alive
   -v             : print version info

Also habe ich mal eine in /var/tmp/ angelegt (kurze Recherche nach einer minimalen Version, ohne zu gucken was wirklich notwendig/empfehlenswert ist - lediglich die IPs habe ich entsprechend angepasst).

Code:
#logging
logoutput: /var/log/sockd.log
#debug: 1

#server address specification
internal: 192.168.178.2 port = 1080
external: 192.168.178.2

#server identities (not needed on solaris)
user.privileged: root
#user.notprivileged: socks
#user.libwrap: libwrap

#reverse dns lookup
#srchost: nodnsmismatch

#authentication methods
clientmethod: none
method: none

##
## SOCKS client access rules
##
#rule processing stops at the first match, no match results in blocking

#block access to socks server from 192.0.2.22 (exception for pass rule below)
# client block {
#       #block connections from 192.0.2.22/32
#       from: 192.0.2.22/24 to: 0.0.0.0/0
#       log: error # connect disconnect
# }

#allow connections from local network (192.168.178.0/24)
client pass {
        from: 192.168.178.0/24 to: 0.0.0.0/0
	log: error # connect disconnect
}

##
## SOCKS command rules
##
#rule processing stops at the first match, no match results in blocking

#block communication with www.example.org
# block {
#        from: 0.0.0.0/0 to: www.example.org
#        command: bind connect udpassociate
#        log: error # connect disconnect iooperation
# }

#generic pass statement - bind/outgoing traffic
pass {  
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bind connect udpassociate
        log: error # connect disconnect iooperation
}

#block incoming connections/packets from ftp.example.org 
# block {
#        from: 0.0.0.0/0 to: ftp.example.org
#        command: bindreply udpreply
#        log: error # connect disconnect iooperation
# }

#generic pass statement for incoming connections/packets
pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bindreply udpreply
        log: error # connect disconnect iooperation
}

Dann das ganze gestartet:
Code:
root@fritz:/# trickle -s -u 25 -d 100 danted -f /var/tmp/sockd.conf
Der Proxy läuft damit auf Port 1080, mein Test-Download per Firefox oder auch GetRight (mit eingetragenem SOCKS-Proxy) wird jedoch nicht limitiert.

An der Stelle weiß ich erstmal nicht weiter...


edit: Ich dachte gerade, dass Problem gelöst zu haben - denn Dante kann auch die Bandbreite limitieren! Dieses Modul ist jedoch standardmäßig nicht installiert und muss hinzugekauft werden (für satte 400 Kröten). :mad:

Auch ein globales
Code:
root@fritz:/# trickled -u 25 -d 100
limitiert leider nicht.
 
Zuletzt bearbeitet:
QoS ist ein recht komplexes Thema:
http://www.funkschau.de/telekommunikation/artikel/76903/
http://www.linux-magazin.de/Online-Artikel/QoS-Differentiated-Services-unter-Linux

Soviel ich mich erinnern kann gibt es mindestens 2 Methoden, entweder intserv was die Pakete über TOS Header auswertet, was aber nur 100% funktioniert wenn es alle Gegenstellen benutzen und der Provider wird wohl nichts bevorzugen. Dann gibts noch diffserv über DSCP Header wo der Router wirklich alle Pakete neu auswertet. Jetzt müsste man wissen welches verfahren die Fritzbox überhaupt anwendet und ob das so fest verdrahtet ist das man überhaupt noch ein eigenes QoS oben drüber legen kann.

Hier mal was in der ar7 bei mir drin war
Code:
prios {
        profiles {
                name = "profile_http";
                profile_id = "1";
                rules = "TCP 80 0 0 0";
                filter = "reject tcp any eq 80 any";
        } {
                name = "profile_ftp";
                profile_id = "2";
                rules = "TCP 20 21 0 0";
                filter = "reject tcp any range 20 21 any";
        } {
                name = "profile_emule";
                profile_id = "3";
                rules = "TCP 0 0 4662 0", "UDP 0 0 4672 0";
                filter = "reject tcp any any eq 4662",
                         "reject udp any any eq 4672";
        } {
                name = "profile_torrent";
                profile_id = "4";
                rules = "TCP 0 0 6881 6999";
                filter = "reject tcp any any range 6881 6999";
        } {
                name = "profile_rdp";
                profile_id = "5";
                rules = "TCP 3389 0 0 0";
                filter = "reject tcp any eq 3389 any";
        } {
                name = "profile_ssh";
                profile_id = "6";
                rules = "TCP 0 0 22 0";
                filter = "reject tcp any any eq 22";
        } {
                name = "profile_telnet";
                profile_id = "7";
                rules = "TCP 0 0 23 0";
                filter = "reject tcp any any eq 23";
        } {
                name = "profile_not_surf";
                profile_id = "8";
                rules = "TCP 0 0 1 24", "TCP 0 0 26 79", "TCP 0 0 81 109",
                        "TCP 0 0 111 142", "TCP 0 0 144 442",
                        "TCP 0 0 444 464", "TCP 0 0 466 586",
                        "TCP 0 0 588 992", "TCP 0 0 994 994",
                        "TCP 0 0 996 8079", "TCP 0 0 8081 65535",
                        "UDP 0 0 0 0";
                filter = "reject tcp any any range 1 24",
                         "reject tcp any any range 26 79",
                         "reject tcp any any range 81 109",
                         "reject tcp any any range 111 142",
                         "reject tcp any any range 144 442",
                         "reject tcp any any range 444 464",
                         "reject tcp any any range 466 586",
                         "reject tcp any any range 588 992",
                         "reject tcp any any range 994 994",
                         "reject tcp any any range 996 8079",
                         "reject tcp any any range 8081 65535",
                         "reject udp any any";
        }
}


nqos {
        version = 9;
        macaddr_whitelist_enabled = no;
        bridge_with_switch_separation = yes;
        bridge_lp_mode = -1;
        patch1TR114 = no;
        defaultresult {
                tos = -1;
                vlan_prio = -1;
                queueref = "default";
        }
        appls {
                enabled = yes;
                name = "sip-appl";
                protocol = qos_classifier_appl_sip;
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                }
        }
        classifiers {
                enabled = yes;
                name = "profile_rdp:";
                type = qos_cfg_other;
                iface = qos_lan;
                rule = " tcp.sport 3389";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "important";
                }
        } {
                enabled = yes;
                name = "profile_ssh:";
                type = qos_cfg_other;
                iface = qos_lan;
                rule = " tcp.dport 22";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "important";
                }
        } {
                enabled = yes;
                name = "clfy_voip";
                type = qos_cfg_internal;
                iface = qos_local;
                rule = "localmark sip";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                }
        } {
                enabled = yes;
                name = "clfy_voip";
                type = qos_cfg_internal;
                iface = qos_local;
                rule = "localmark rtp";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                }
        } {
                enabled = yes;
                name = "clfy_voip";
                type = qos_cfg_internal;
                iface = qos_local;
                rule = "localmark sip_internet";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                }
        } {
                enabled = yes;
                name = "clfy_voip";
                type = qos_cfg_internal;
                iface = qos_local;
                rule = "localmark rtp_internet";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                }
        } {
                enabled = yes;
                name = "tr069";
                type = qos_cfg_hidden;
                iface = qos_local;
                rule = "localmark sipdns,ntpdns,tr069dns,tr069";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "webdav";
                type = qos_cfg_hidden;
                iface = qos_local;
                rule = "localmark webdav";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "low";
                }
        } {
                enabled = yes;
                name = "dns";
                type = qos_cfg_hidden;
                iface = qos_local;
                rule = "localmark dns";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "icmp-v6";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "ip.proto IPv6-ICMP";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "icmp";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "ip.proto icmp";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "dns";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "udp.dport 53";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "clfy_voip";
                type = qos_cfg_internal;
                iface = qos_lan;
                rule = "udp.dport 5060";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "hrealtime";
                        applref = "sip-appl";
                }
        } {
                enabled = yes;
                name = "clfy_fmedia";
                type = qos_cfg_internal;
                iface = qos_lan;
                rule = "dhcpoption 12 FRITZ!Media* mediatab";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "realtime";
                }
        } {
                enabled = yes;
                name = "clfy_fmedia";
                type = qos_cfg_internal;
                iface = qos_lan;
                rule = "ethsrctab mediatab";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "realtime";
                }
        } {
                enabled = no;
                name = "clfy_www";
                type = qos_cfg_system;
                iface = qos_lan;
                rule = "tcp.dest 80,3128,8080 ip.len <= 800";
                result {
                        tos = -1;
                        vlan_prio = -1;
                        queueref = "none";
                }
        } {
                enabled = yes;
                name = "mstv";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "udp.dport 43962 ip.tos 0x60";
                result {
                        tos = 96;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "mstv";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "udp.dport 47806 ip.tos 0x60";
                result {
                        tos = 96;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "igmp";
                type = qos_cfg_hidden;
                iface = qos_local;
                rule = "localmark igmp ip.tos 0x60";
                result {
                        tos = 128;
                        vlan_prio = -1;
                        queueref = "ifacectl";
                }
        } {
                enabled = yes;
                name = "igmp";
                type = qos_cfg_hidden;
                iface = qos_local;
                rule = "localmark igmp";
                result {
                        tos = 0;
                        vlan_prio = -1;
                        queueref = "ifacectl";
                }
        } {
                enabled = yes;
                name = "ntp_stb";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "udp.dport 123 ip.tos 0x60";
                result {
                        tos = 128;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        } {
                enabled = yes;
                name = "http_stb";
                type = qos_cfg_hidden;
                iface = qos_lan;
                rule = "tcp.dport 80 ip.tos 0x60";
                result {
                        tos = 128;
                        vlan_prio = -1;
                        queueref = "hprio";
                }
        }
        queues {
                enabled = yes;
                with_sfq = no;
                type = qos_cfg_system;
                name = "ifacectl";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 0;
                weight = 0;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = no;
                type = qos_cfg_system;
                name = "hprio";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 10;
                weight = 0;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = no;
                type = qos_cfg_system;
                name = "hrealtime";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 20;
                weight = 0;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = yes;
                type = qos_cfg_system;
                name = "realtime";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 30;
                weight = 0;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = yes;
                type = qos_cfg_system;
                name = "important";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 100;
                weight = 90;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = yes;
                type = qos_cfg_system;
                name = "default";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 100;
                weight = 10;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        } {
                enabled = yes;
                with_sfq = yes;
                type = qos_cfg_system;
                name = "low";
                iface = qos_wan;
                queue_type = queue_llq;
                precedence = 200;
                weight = 0;
                shapingrate = 0;
                shapingburst = 0;
                allow_more = yes;
                ceilrate = 0;
        }
}

Interessant wäre ob man da einfach selbst ein neues Profil im Abschnitt prios|profile anlegen kann und welcher Mechanismus überhaupt verwendet wird.
Da in der Konfig TOS auftaucht wird es wohl leider kein diffserv sein.
Unter nqos scheint dann alles zu stehen was aktiv ist.
Einige Einträge sind auch versteckt also selbst wenn in der GUI alles löscht dann sind einige Sachen immer noch aktiv. Mit tc+iptables könnte man wenigstens eigene Scripts laden.

Das ist der Inhalt von tc
Code:
 tc qdisc
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth2 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth3 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc tbf 2: dev adsl root refcnt 2 rate 570240bit burst 3199b lat 646us
qdisc llq 10: dev adsl parent 2: minq 1 maxq 255 default 6
qdisc sfq 104: dev adsl parent 10:4 limit 32p quantum 100b perturb 10sec
qdisc sfq 105: dev adsl parent 10:5 limit 32p quantum 100b perturb 10sec
qdisc sfq 106: dev adsl parent 10:6 limit 32p quantum 100b perturb 10sec
qdisc sfq 107: dev adsl parent 10:7 limit 32p quantum 100b perturb 10sec
qdisc pfifo_fast 0: dev dsl root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev wifi0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 
Zuletzt bearbeitet:
An der Stelle weiß ich erstmal nicht weiter...
Ich bewundere trotzdem Deinen Enthusiasmus ... daß der ursprüngliche privoxy-Vorschlag von Dir war, wußte ich gar nicht mehr.

Ich habe mal (ganz grob nur) in die trickle-Quellen geschaut, ob das eher schon etwas betagte Programm (es ist älter als die erste Linux-basierte FRITZ!Box) immer noch funktionieren könnte/sollte.

Es arbeitet offenbar so, daß da eine Bibliothek mit eigenen Netzwerk-Zugriffsfunktionen mit einen speziellen Mechanismus (LD_PRELOAD) so "davorgeladen" wird, daß das gesteuerte Programm nicht die "richtigen" Netzwerkaufrufe verwendet, sondern die untergeschobenen und bei diesen wird dann beim Erreichen der Limits pro Sekunde einfach eine "Gedenkminute" eingelegt, d.h. der Abschluß z.B. eines read-Aufrufs, um die Daten vom Netzwerk zu lesen, wird ganz simpel angehalten, bis das nächste Zeitinterval erreicht ist. Das kann jetzt mit vielen Programmen klappen ... aber auch die Netzwerk-Stacks haben sich in der Zwischenzeit wesentlich weiter entwickelt (es sind neue/alternative Funktionen dazu gekommen) und auch einige Programmier-Paradigmen sind inzwischen vollkommen anders. Multithreading (und damit die Verwendung von asynchronen I/O-Funktionen bzw. von "non-blocking calls") ist viel weiter verbreitet, usw..

Am Ende kann trickle also nur solche Programme "bremsen", die auch die von trickle modifizierten Funktionen zum Netzwerkzugriff wirklich benutzen. Es erfolgt also keine Regelung quasi auf der Task-Ebene, wo nach dem Erreichen des Limits einfach dem Thread weitere "Zeitscheiben" verweigert werden, wenn er das Liimit überschreitet und damit hängt die Funktion von trickle eben an der konkreten Umsetzung des zu steuernden Clients. Wie das bei dante aussieht (bei einem Daemon erwarte ich ehrlich gesagt "non-blocking i/o" als Pflicht und nicht als Kür), müßte man in den entsprechende Quellen prüfen.

Ich muß aber auf der anderen Seite auch gestehen, daß ich dazu eigentlich keine Lust so richtig habe. Das, was da dante/privoxy/etc. in Kombination mit trickle leisten könnten, geht imho auch mit den schon in der Firmware vorhandenen Funktionen und eigentlich sogar besser. Denn eine Nutzungslimitierung, die immer stattfindet, hat mehr mit der Drosselkom gemeinsam, als mit einer technischen Notwendigkeit, wenn da am Ende "ungenutzte Leitungskapazität rumliegt" und die Nutzung trotzdem eingeschränkt wird. Eine Priorisierung von Traffic (auf Protokoll-Ebene) ist mit der Firmware möglich, etwas anderes macht imho (habe ich weiter vorne erläutert, wie ich es verstehe) gar keinen Sinn und die Latenz für einzelne Pakete kann man damit ohnehin nicht gezielt niedrig halten. Also recht vergebliche Mühen ... der TE hat ja irgendwo schon geschrieben, daß er die vorhandenen Mechanismen der Firmware getestet hat, das aber bei seinem konkreten Problem keine Lösung brachte; wieso das jetzt mit dieser Lösung anders sein sollte, leuchtet mir nicht ein.

Ich sehe absolut nicht, wie ihm ein SOCKS-Proxy da helfen könnte ... der kann ja das Prinzip auch nicht auf den Kopf stellen. Der TE sieht am Ende beim "Ping" (was meist ja aber kein ICMP ist, sondern irgendeine "alive"-Nachricht zwischen Spiel und Server, wo dann der Roundtrip gemessen wird - es gehen also beide Richtungen in die Messung ein) nur, daß es mit der neuen Leitung etwas länger dauert. Wenn schon der Upload nur noch 60% des vorherigen erlaubt, ist eine entsprechende Erhöhung der Latenz auch folgerichtig. Das kann er nun mal nur verhindern, wenn er den anderen Verkehr komplett aussperrt und somit sicherstellen kann, daß da garantiert niemals ein fremdes Paket gerade bei der Übertragung ist, wenn er es eilig hat. Er kann die Wahrscheinlichkeit für solche Konflikte senken durch das Drosseln der anderen, abstellen kann er sie nicht. Und da im Falle eines solchen Konfliktes dann auch die Priorisierung (sein Paket ist definitiv das nächste) reicht, sollte mit entsprechenden Einstellungen da auch schon der maximal mögliche Erfolg machbar sein (vorausgesetzt, die Firmware-Mechanismen funktionieren und das taten sie imho dort noch).

Er hat ja noch nicht einmal von sich gegeben, wie eklatant die Änderungen seiner Latenz nach dem Umstieg von der 16.000er- auf die 6.000-Leitung nun wirklich waren (auch nicht, wie sich die Angaben zur Latenz in der DSL-Statistik verändert haben). Wenn das nicht 250%+ sind, sondern max. 50%, dann sehe ich nicht, wie man das (außer durch exklusive Nutzung) überhaupt beheben könnte. Wenn es am Ende gar so ist, daß er an einem ganz alten ADSL(2)-DSLAM ohne die Möglichkeit des Ausschaltens für das Interleaving gelandet ist, dann sollte er u.U. auf Kuriere umsteigen, denn dann sind sogar 60-75 ms alleine bis zum DSLAM drin und da kann er nun mal einfach nichts dagegen tun.

Den Einsatz von trickle sehe ich mehr da, wo auf einem einzelnen PC verhindert werden soll, daß eine Aufgabe mit "Background"-Priorität (meinetwegen eine "lazy transmission" irgendwelcher Backups an einen zweiten Speicherplatz, bei denen es vollkommen Bummi ist, ob die eine Stunde früher oder später dort ankommen), die keine eigene Regulierung der genutzen Bandbreite erlaubt, dort die Netzwerkverbindung (meinetwegen auch die Internetverbindung) "zufährt" und dann z.B. Webseitenabrufe zu stark verzögert.

Wenn jemand eine 6.000er-Leitung hat/bezahlt und dann am Ende nur die Nutzung mit 3.000 kBit/s möglich ist, weil da auf irgendeine (ich sag mal recht primitive) Art ein ungeeignetes Management eingesetzt wird, das auch die eigentliche Ursache des Problems nicht beseitigen kann, dann sollte man die ganze Idee noch einmal neu durchdenken.
 
Erstmal dazu, wie wir bis hier gekommen sind:
Der TE hat nach einer Möglichkeit gesucht die Bandbreite für einzelne Endgeräte zu beschränken, da die Priorisierung der FritzBox nicht weitergeholfen hat.

Meine Recherche zu dieser Problematik brachte mich zu der oben vorgeschlagenen Kombination aus Privoxy + trickle + iptables. Hier hatten wir nun festgestellt, das Privoxy als HTTP-Proxy nicht für den Einsatz geeignet ist, da er mit anderen Sachen als HTTP nicht umgehen kann und dementsprechend auch keine sinnvolle Bandbreitenlimitierung erfolgen kann.

Ein SOCKS-Proxy hingegen, so war für mich zumindest das Fazit, kann mit beliebigen Verbindungen umgehen und wäre demnach für den Zweck geeignet. Daher mein letzter Vorschlag Dante + trickle + iptables zu nutzen.

Meine persönlichen Erfahrungen bzgl. DSL-Leitungsauslastung und Spielen sehen/sahen ebenfalls so aus, dass die Leitung möglichst wenig ausgelastet sein musste, damit ich beim Spielen einen niedrigen Ping hatte. Daher hatte ich die hier aus den Vorschlägen resultierende "Bandbreitenreservierung" auch für eine gute Idee gehalten.

Wenn es nun doch einen anderen/besseren Weg gibt, um so schöner. Sollte ich innerhalb der nächsten Jahre mal wieder Zeit zum Spielen finden, dann wäre die (noch ausstehende) Lösung wohl auch bei meiner grottigen ~6.000er-Leitung und Mitsurfern interessant.
 
@horst123456
Danke für den Vorschlag, habe alles genau so gemacht wie Du.
Allerdings scheint der Proxy gar nicht erst zu starten.
Wenn ich den Befehl
Code:
trickle -s -u 25 -d 100 danted -f /var/tmp/sockd.conf
Kommt keine Bestätigung, desweiteren kann ich keine Verbindung über Firefox zum Proxy aufbauen.
Auch die Datei /var/log/sockd.log ist nicht vorhanden.
Aber bringt ja in dem Fall eh nichts wenn es nicht limitiert wird :(
 
Zuletzt bearbeitet:
@JulPal:
1. Es wäre hilfreich, wenn Du mal etwas zu den Latenzwerten mit der früheren 16.000er-Leitung und der jetzigen sagen könntest, außerdem sind die Latenzangaben aus den DSL-Verbindungsinformationen wichtig, damit man den absoluten Minimalwert, den Du überhaupt erreichen könntest, mal errechnen kann.

Bsp: Bei 672 kBit/s braucht ein volles 1500 Byte langes Ethernet-Paket ja schon mal knapp 20 ms alleine für die Übertragung (672 * 1024 / 9 -> ca. 76,5 KByte/s = 1/51 Sekunde Übertragungsdauer für ein volles Paket). Wenn dann noch unmittelbar vor dem Eintreffen Deines dringenden Pakets die Übertragung für ein anderes volles Paket gerade gestartet wurde, ist Dein Paket frühestens nach 40 ms (das berücksichtigt noch gar keine Verzögerungen/Verarbeitungen im LAN oder in der FRITZ!Box) beim DSLAM und der kann es dann erst weiter schicken. Da beginnt dann erst die Reise durch das Internet. Das wäre auch nur die reine Sendezeit, bei DSL wird u.U. auch noch ein Interleaving (das ist das Verschränken von Daten aus mehreren Paketen, um die Übertragung fehlerresistenter zu machen, i.d.R. aber nur im Downstream) eingesetzt, das wäre auch eine denkbare Ursache für eine stark erhöhte Latenz auf der DSL-Leitung (> 50ms schon bis zum DSLAM).

Diese Werte kannst Du nun mal nicht beeinflussen (außer bei Interleaving auf FastPath umstellen lassen), Du kannst nur dafür sorgen, daß da in keinem Falle ein anderes Paket gerade übertragen wird. Die dafür notwendige Drosselung kannst Du aber viel einfacher und 100%ig sicher umsetzen, indem einfach während des Spielens die Kabel der anderen aus der FRITZ!Box entfernt werden. Sonst kann Dir keine Drosselung oder was auch immer garantieren, daß da nicht gerade ein Paket für einen anderen Client im Weg steht, wenn Deines ankommt.

2. Bitte editiere #39. Vollquotes sind unerwünscht, wir wissen alle auch so, was horst123456 geschrieben hat. Das Zitieren zur Herstellung eines Zusammenhangs mit Deinem Text kann ich ehrlich gesagt nicht sehen.
 
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.