OpenWRT und QOS

Hupe

Aktives Mitglied
Mitglied seit
8 Apr 2004
Beiträge
2,586
Punkte für Reaktionen
0
Punkte
0
Hi Jungs,

ich überlege mir gerade, ob ich mir nicht einen Router zulege, auf dem ich OpenWRT nutzen kann. Das würde für mich im Moment primär nur Sinn machen, wenn da auch ein QOS drauf läuft, welches die Qualität von Sip-Gesprächen ordentlich sichern kann. Gerade bei ADSL soll das ja durchaus kritsch sein, besonders, wenn große Uploads und Downloads parallel laufen.
Hat jemand schon postive/negative Erfahrungen damit gesammelt? Wie nutzt ihr QOS auf Eurem OpenWRT
 
Ich habe die Scripts wie hier beschrieben

Code:
3.3. How do I configure QoS aka traffic shaping in OpenWrt?

QoS in OpenWrt is based on tc, HFSC and [WWW] Layer 7 filters. This script is only shaping on your uplink.

You have to install

ipkg install tc kmod-sched iptables-extra

when that is done, download and install the qos-scripts package.

ipkg install http://openwrt.inf.fh-brs.de/~nbd/qos-scripts_0.01_all.ipk

Edit your linespeed in /etc/init.d/S46qos. Enter the upload speed of your internet connection in kbit.

LINESPEED=576

Next edit the /etc/config/qos file. In this config file you will make the QoS configuration. It has some examples in it.

If you are using L7 filter in the config file, you must create a directory and download protocol files (.pat) from [WWW] Layer 7 filters into the /etc/l7-protocols directory.

mkdir -p /etc/l7-protocols

Finally start QoS manually with

/etc/init.d/S46qos

or alternativly via /etc/ppp/ip-up script.

For more information see MiniHowtos/QoSHowto.

installiert und das Ganze funktioniert recht zuverlässig. Zumal Du die Möglichkeit hast, mit den L7-Filtern sogar den Traffic einzelner Applikationen zu beeinflussen.
 
@betateilchen

Danke für die schnelle Antwort. Soetwas hatte ich schon auf der Seite von OpenWRT gesehen. Leider wird ja wohl nur der Upload davon kontrolliert.
This script is only shaping on your uplink.
Für ausreichend Bandbreite im Downstream scheint dieses QOS nicht sorgen zu können.
 
nein - es wirkt wirklich nur im Upload - aber mit den Downloadraten hatte ich auch noch nie Probleme. Außerdem sollte sich das Ganze ja ohne großen Aufwand auch für Download modifizieren lassen, da das Ganze ja ausschlielßlich über die iptables gesteuert wird.
 
betateilchen schrieb:
nein - es wirkt wirklich nur im Upload - aber mit den Downloadraten hatte ich auch noch nie Probleme. Außerdem sollte sich das Ganze ja ohne großen Aufwand auch für Download modifizieren lassen, da das Ganze ja ausschlielßlich über die iptables gesteuert wird.

Naja, so einfach scheint es nicht zu sein, sonst hätte bestimmt schon jemand soetwas gemacht. Man kann anscheinend nur die gesamte Downstream-Bandbreite limitieren, damit die auflaufenden Pakete nicht in den Puffer wandern (was der ctshaper aus dem HowTo wohl macht). Jedenfalls habe ich nichts in der Richtung gefunden. Das einzige, was ich diesbezüglich schon einmal gehört habe, ist etwas im Zusammenhand mit der FritzBox. Dort wird wohl soetwas ähnliches erreicht, indem die Antwortpakete des restlichen Traffics so manipuliert werden, dass es für den Sender der Pakete aussieht als ob das gegenüber eine verringerte Bandbreite hat, und dann weniger Pakete sendet, wodurch der Downstream gesenkt wird. Wie das aber genau funzt, ist wohl ein Betriensgeheimnis von AVM.
 
Wie das aber genau funzt, ist wohl ein Betriensgeheimnis von AVM.

Ist es nicht - Packet-Mangling kann iptables auch :wink:
Problem dabei dürfte wohl sein, das für die Vielzahl möglicher Übertragungsprotokolle korrekt zu konfigurieren.
 
So, habe jetzt einen Asus WL-500g delux mit Openwrt drauf. Qos läuft (hoffentlich).
Hoffentlich funzt es auch!
 
Unter http://openwrt.inf.fh-brs.de/~nbd/ gibt es auch eine neuere Version

Ich benutzte z.Zt. ein Skript, das ich mir aus diversen Vorlagen zusammengebastellt habe.
Ist eventuell zum Testen/Optimieren für den einen oder anderen ganz nützlich.



Code:
#!/bin/sh
# for openwrt
. /etc/functions.sh

# Source:
# http://www.ipcop-forum.de/forum/viewtopic.php?t=4749&postdays=0&postorder=asc&start=120
# http://voip-info.org/tiki-index.php?page=QoS%20Linux%20with%20HFSC

# **********************************
# DON'T FORGET INSMOD / modprobe !
# **********************************


###############################
### Defaults ###
###############################
UPDEV=$(nvram get wan_ifname)
RATEUP=364kbit
MYUMAX=1492b


# for the iptables rules:
# Your Asterisk (or similar) Server, single Ip
VOIPADR="192.168.1.150"
VOIPPORTS="4569 5060 30000:30021"



###############################
### Init Modules ###
###############################

# test:
# if [ -e /tmp/do_voips_init ]; then $ACTION="init"; fi

if [ "$1" = "init" ]
then
        insmod sch_hfsc
        insmod sch_csz
        insmod ipt_owner
        insmod ipt_tos
        insmod cls_fw
        insmod ipt_length
        insmod ipt_layer7
        exit
fi




###############################
### Status Info ###
###############################


if [ "$1" = "status" ]
then
        echo "[qdisc]"
        /usr/sbin/tc -s qdisc show dev $UPDEV

        echo ""
        echo "[class]"
        /usr/sbin/tc -s class show dev $UPDEV

        echo ""
        echo "[filter]"
        /usr/sbin/tc -s filter show dev $UPDEV

        echo ""
        echo "[iptables]"
        iptables -t mangle -L QOS -v -x 2> /dev/null
        exit
fi





#####################
# verify $1 (e.g. to avoid reload when called with "voipshaper staus" ...
#####################

if [ "$1" != "start" ] && [ "$1" != "stop" ]
then
	echo "Usage: $0 {start|stop|init|status}" >&2
	exit 1
fi


###############################
### Start script ###
###############################

# Reset everything to a known state (cleared)
/usr/sbin/tc qdisc del dev $UPDEV root    2> /dev/null > /dev/null

# Flush and delete tables
iptables -t mangle --delete POSTROUTING -o $UPDEV -j QOS 2> /dev/null > /dev/null
iptables -t mangle --flush QOS 2> /dev/null > /dev/null
iptables -t mangle --delete-chain QOS 2> /dev/null > /dev/null



######################
# stop it and exit
######################

if [ "$1" = "stop" ]
then
        echo "Shaping removed on $UPDEV."
        exit
fi


### Rootqueue einrichten
/usr/sbin/tc qdisc add dev $UPDEV root handle 1: hfsc default 10

### Parentclass einrichten mit $RATEUP/s
/usr/sbin/tc class add dev $UPDEV parent 1: classid 1:1 hfsc sc rate $RATEUP ul rate $RATEUP

### Einzelne classes

## Class 1:10 mit Prio 8, 1kbps garantiert, maxdelay 150ms
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:10 hfsc sc umax $MYUMAX dmax 150ms rate 1kbit ul rate $RATEUP

## Class 1:11 mit Prio 1, 100kbps garantiert, maxdelay 30ms
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:11 hfsc sc umax $MYUMAX dmax 30ms rate 170kbit ul rate $RATEUP

## Class 1:12 mit Prio 7, 4kbps garantiert, maxdelay 150ms, max 100kbps
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:12 hfsc sc umax $MYUMAX dmax 150ms rate 1kbit ul rate 130kbit

## Class 1:13 mit Prio 3, 7kbps garantiert, maxdelay 40ms
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:13 hfsc sc umax $MYUMAX dmax 40ms rate 5kbit ul rate $RATEUP

## Class 1:14 mit Prio 4, 7kbps garantiert, maxdelay 40ms
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:14 hfsc sc umax $MYUMAX dmax 40ms rate 4kbit ul rate $RATEUP

## Class 1:19 mit Prio 2, 10kbps garantiert, maxdelay 30ms
/usr/sbin/tc class add dev $UPDEV parent 1:1 classid 1:19 hfsc sc umax $MYUMAX dmax 30ms rate 10kbit ul rate $RATEUP


###############################
### iptablechain einrichten ###
###############################

### QOS-Chain für $UPDEV
iptables -t mangle --new-chain QOS
iptables -t mangle --insert POSTROUTING -o $UPDEV -j QOS

######################
### tc Zuordnungen ###
######################

### Match für 1:10 auf Mark 10
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 8 protocol ip handle 10 fw flowid 1:10

### Match für 1:11 auf Mark 11
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 1 protocol ip handle 11 fw flowid 1:11

### Match für 1:12 auf Mark 12
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 7 protocol ip handle 12 fw flowid 1:12

### Match für 1:13 auf Mark 13
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 3 protocol ip handle 13 fw flowid 1:13

### Match für 1:14 auf Mark 14
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 4 protocol ip handle 14 fw flowid 1:14

### Match für 1:19 auf Mark 19
/usr/sbin/tc filter add dev $UPDEV parent 1: prio 2 protocol ip handle 19 fw flowid 1:19


########################
### QoS-Markierungen ###
########################

##########################
## HFC-S-Markierungen ##
##########################

#################
## L7-Filter ##
#################

### Bittorrent  :: Pattern quality: great veryfast
iptables -t mangle -A QOS -o $UPDEV  -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto bittorrent -j MARK --set-mark 12

### eDonkey     :: Pattern quality: good veryfast overmatch!!!!
iptables -t mangle -A QOS -o $UPDEV  -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto edonkey -j MARK --set-mark 12

### DNS  :: Pattern quality: great notsofast
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto dns -j MARK --set-mark 13

### SSH  :: Pattern quality: great veryfast
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto ssh -j MARK --set-mark 13

### SIP  :: Pattern quality: ok veryfast  :: vermutlich nur Signalisierung
iptables -t mangle -A QOS -o $UPDEV -s $VOIPADR -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto sip -j MARK --set-mark 11

### HTTP :: Pattern quality: great notsofast :: soll moeglichst nur auf http server zutreffen nich auf andere die auch http nutzten 
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto http -j MARK --set-mark 14

### FTP  :: Pattern quality: great fast
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto ftp -j MARK --set-mark 14

### NNTP :: Pattern quality: good veryfast
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto nntp -j MARK --set-mark 14

### SMTP :: Pattern quality: great fast 
iptables -t mangle -A QOS -o $UPDEV -s 192.168.1.99 -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto smtp -j MARK --set-mark 14

### AIM  :: Pattern quality: good notsofast :: kann vermutlich auch schneller via port markiert werden
#iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto aim -j MARK --set-mark 13

### IRC  :: Pattern quality: good veryfast
iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto irc -j MARK --set-mark 13

#----
###RTP
# iptables -t mangle -A QOS -o $UPDEV -m layer7 --l7dir /etc/l7-protocols/protocols --l7proto rtp -j MARK --set-mark 11




###############################
### Mark 11 ###
# Prio 1 mit 100kbps Garantie #
###############################


# VoIP ports as defined above
for port in $VOIPPORTS
do
        iptables -t mangle -A QOS -o $UPDEV -s $VOIPADR -p udp --sport $port -j MARK --set-mark 11
        iptables -t mangle -A QOS -o $UPDEV -s $VOIPADR -p udp --dport $port -j MARK --set-mark 11
done

iptables -t mangle -A QOS -o $UPDEV -s $VOIPADR -j MARK --set-mark 11

###################
### Mark 12 ###
# Prio 7 #
###################
### Bittorrent
iptables -t mangle -A QOS -o $UPDEV -p tcp --sport 6881:6889 -j MARK --set-mark 12
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 6881:6889 -j MARK --set-mark 12

# trackerless uses also udp
iptables -t mangle -A QOS -o $UPDEV -p udp --sport 6881:6889 -j MARK --set-mark 12
iptables -t mangle -A QOS -o $UPDEV -p udp --dport 6881:6889 -j MARK --set-mark 12


### eDonkey TCP
iptables -t mangle -A QOS -o $UPDEV -p tcp --sport 4661:4669 -j MARK --set-mark 12
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 4661:4669 -j MARK --set-mark 12

### eDonkey UDP
iptables -t mangle -A QOS -o $UPDEV -p udp --sport 4672 -j MARK --set-mark 12
iptables -t mangle -A QOS -o $UPDEV -p udp --dport 4672 -j MARK --set-mark 12

### eDonkey Kademilia
#iptables -t mangle -A QOS -o $UPDEV -p udp --sport 4670 -j MARK --set-mark 12

### Overnet TCP
iptables -t mangle -A QOS -o $UPDEV  -p tcp --sport 9129 -j MARK --set-mark 12

### Overnet UDP
iptables -t mangle -A QOS -o $UPDEV  -p udp --sport 9789 -j MARK --set-mark 12


##############################
### Mark 13 ###
# Prio 3 mit 7kbps Garantie #
##############################

### AIM
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 5190 -j MARK --set-mark 13

### IRC
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 6667 -j MARK --set-mark 13

### NTP
iptables -t mangle -A QOS -o $UPDEV -p udp --dport 123 -j MARK --set-mark 13


### DNS
iptables -t mangle -A QOS -o $UPDEV -p udp --dport 53 -j MARK --set-mark 13

### SSH
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 22 -j MARK --set-mark 13
#iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 222 -j MARK --set-mark 13

### ICMP
iptables -t mangle -A QOS -o $UPDEV -p icmp -j MARK --set-mark 13




##############################
### Mark 14 ###
# Prio 4 mit 6kbps Garantie #
##############################

### HTTP/HTTPS
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 80 -j MARK --set-mark 14
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 443 -j MARK --set-mark 14

### FTP
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 21 -j MARK --set-mark 14

### UUCP
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 540 -j MARK --set-mark 14

### SMTP
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 25 -j MARK --set-mark 14
iptables -t mangle -A QOS -o $UPDEV -p tcp --sport 25 -j MARK --set-mark 14

### NNTP
iptables -t mangle -A QOS -o $UPDEV -p tcp --dport 119 -j MARK --set-mark 14


##############################
### Mark 19 ###
# Prio 2 mit 10kbps Garantie #
##############################
### TCP ACKs
iptables -t mangle -A QOS -o $UPDEV -p tcp --tcp-flags ACK ACK -m length --length :64 -j MARK --set-mark 19

Das ganze ganze muss natürlich noch angepasst werden.
Bei den l7 Regeln kann es eventuell hilfreich sein, nur bestimmte IP Adressen anzugeben (hier z.B. Mailserver) um gerade bei nicht ganz so tollen Regeln, falsche Treffer zu vermeiden.

Ich benutze OpenWRT wr. rc3 mit den neusten updates (ipkg update /upgrade).
Natürlich sind wie auch oben beschrieben die verschiedenen Pakete nötig.

Nach dem booten führt man einmal:
voipshaper init
aus, danach dann voipshaper start nachdem das wan Interface gestartet wurde (bspw. ppp0)
 
Hupe schrieb:
So, habe jetzt einen Asus WL-500g delux

Wo hast Du den eigentlich her :shock: irgendwie ist das Teil nirgends zu bekommen.

@cibi
Deine Regeln beeinflussen aber auch nur den Upload - oder hab ich was übersehen ?
 
betateilchen schrieb:
Hupe schrieb:
So, habe jetzt einen Asus WL-500g delux

Wo hast Du den eigentlich her :shock: irgendwie ist das Teil nirgends zu bekommen.

[ habe den Link zum Händler rausgenommen - ist dann ja eh nur Werbung, da nicht lieferbar ;) ]


betateilchen schrieb:
Deine Regeln beeinflussen aber auch nur den Upload - oder hab ich was übersehen ?
Ja - leider ;)
In dem ipcop Forum Beitrag gibt es einige interessante Lösungen zum Regeln des Downloads.
 
betateilchen schrieb:
Hupe schrieb:
So, habe jetzt einen Asus WL-500g delux

Wo hast Du den eigentlich her :shock: irgendwie ist das Teil nirgends zu bekommen.

Der Versender, bei dem ich das bestellt habe, hat wohl auch keine mehr lieferbar. Da brauch ich dann auch hier keine Werbung für machen. Ist auch kein ganz so unbekannter. Der ist in vielen Preissuchmaschinen existent.
Der hatte die Teile auch nicht lange. Habe wohl im richtigen Moment bestellt. Und ein bischen teurer ist der Kasten auch geworden... :)
 
@bt

So wie es aussieht beeinflusst die neue QOS-Version für den RC4 auch den download. Ob das was bringt, konnte ich bisher allerdings nochnicht testen.
 
Ich habe mir mal qos-scripts_0.2_all.ipk angeschaut (nicht installiert, nur den Quelltext); falls ich nichts übersehen habe, wird die "download" option in der Konfigdatei z.Zt. nicht ausgewertet.


BTW: Hier noch ein ippf Thema zu HFSC
http://www.ip-phone-forum.de/forum/viewtopic.php?t=14148
 
ich denk mal den downstream kann man nur für tcp verbindungen shapen da ja hier ne flußkontrolle vorhanden ist:)
einfach die ack pakete verwerfen
 
Für IPCop eine Linuxrouterdistri gibt es IMQ als Addon damit kann man den Downstream ziemlich gut regeln......
 
Du hast aber schon gelesen, daß es hier im Thread um OpenWRT geht, oder :rolleyes:
 
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.