- Mitglied seit
- 20 Mrz 2004
- Beiträge
- 1,114
- Punkte für Reaktionen
- 0
- Punkte
- 36
Sorry, dass ich noch einen Thread zu dem Thema aufmache, aber ich bin richtig froh, dass ich das endlich hinbekommen habe.
Nachdem ich mich tagelang mit nicht wirklich funkionierendem QoS auf meinem Asterisk-Linux-Router rumgequält habe, half mir der Hinweis von traxanos http://www.ip-phone-forum.de/forum/viewtopic.php?p=100866#100866 und der dort angesprochene Artikel im Linux-Magazin auf die Sprünge: Man muss HFSC verwenden, weil VoIP nicht nur zugesicherte Bandbreite sondern auch geringe Verzögerungszeiten braucht.
Ergebnis meiner Versuche ist das folgende Script, welches bei mir den durchschlagenden Erfolg brachte: Während sonst, auch bei Einsatz verschiedene QoS-Scripte bei Up- und/oder Download das Gegenüber bei einer VoIP-Verbindung nur noch Aussetzer und extreme Verzögerungen hatte, geht es hiermit super: Kaum Aussetzer und kaum merkliche Verzögerungen.
Das Script ist mit nur zwei chains bewusst einfach gehalten, sicher kann man da im Detail noch viel optimieren. Über Rückmeldungen würde ich mich freuen.
Bei mir läuft es auf einem Debian (SID) System mit Kernel-Image 2.6.10. Auf derselben Maschine läuft der Asterisk.
Udo
Nachdem ich mich tagelang mit nicht wirklich funkionierendem QoS auf meinem Asterisk-Linux-Router rumgequält habe, half mir der Hinweis von traxanos http://www.ip-phone-forum.de/forum/viewtopic.php?p=100866#100866 und der dort angesprochene Artikel im Linux-Magazin auf die Sprünge: Man muss HFSC verwenden, weil VoIP nicht nur zugesicherte Bandbreite sondern auch geringe Verzögerungszeiten braucht.
Ergebnis meiner Versuche ist das folgende Script, welches bei mir den durchschlagenden Erfolg brachte: Während sonst, auch bei Einsatz verschiedene QoS-Scripte bei Up- und/oder Download das Gegenüber bei einer VoIP-Verbindung nur noch Aussetzer und extreme Verzögerungen hatte, geht es hiermit super: Kaum Aussetzer und kaum merkliche Verzögerungen.
Code:
#!/bin/sh
#
# SipShaper v0.01beta
# VoIP Traffic Shaper for 1024/128Kbit/s ADSL Line
#
# Written by Udo Schacht-Wiegand (2005-04-01)
#
# based on MYSHAPER from Dan Singletary (8/7/02)
# http://www.nslu2-linux.org/wiki/HowTo/EnableTrafficShaping
# and on phone-man's script
# http://www.ip-phone-forum.de/forum/viewtopic.php?p=100371#100371
# and on the Linux Magazine 02/05 article p.28
#
# Please mail comments and improvements to sipshaper at udo dot comlink dot org
# Set your outgoing interface and upload rate (in kbit/s) here
DEV=ppp0
RATEUP=128
# end of configuration options
######################
# show status and exit
######################
if [ "$1" = "status" ]
then
echo "[qdisc]"
tc -s qdisc show dev $DEV
echo "[class]"
tc -s class show dev $DEV
echo "[filter]"
tc -s filter show dev $DEV
echo "[iptables]"
iptables -t mangle -L SIPSHAPER -v -x 2> /dev/null
exit
fi
######################
# default: start it #
######################
# Reset everything to a known state (cleared)
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
# Flush and delete tables
iptables -t mangle --delete POSTROUTING -o $DEV -j SIPSHAPER 2> /dev/null > /dev/null
iptables -t mangle --flush SIPSHAPER 2> /dev/null > /dev/null
iptables -t mangle --delete-chain SIPSHAPER 2> /dev/null > /dev/null
######################
# stop it and exit
######################
if [ "$1" = "stop" ]
then
echo "Shaping removed on $DEV."
exit
fi
######################
# set up shaping
######################
# add HFSC root qdisc
tc qdisc add dev $DEV root handle 1: hfsc default 10
# add main rate limit class
tc class add dev $DEV parent 1: classid 1:1 hfsc sc rate ${RATEUP}kbit ul rate ${RATEUP}kbit
# keep it simple: two classes only
tc class add dev ppp0 parent 1:1 classid 1:10 hfsc sc umax 1500b dmax 53ms rate 40kbit ul rate ${RATEUP}kbit
tc class add dev ppp0 parent 1:1 classid 1:11 hfsc sc umax 1500b dmax 30ms rate 80kbit ul rate ${RATEUP}kbit
# add SIPSHAPER chain to the mangle table in iptables
iptables -t mangle --new-chain SIPSHAPER
iptables -t mangle --insert POSTROUTING -o $DEV -j SIPSHAPER
# Filter for voip packets
tc filter add dev $DEV parent 1: prio 1 protocol ip handle 1 fw flowid 1:11
iptables -t mangle -A SIPSHAPER -p udp --sport 5060 -j MARK --set-mark 1 # SIP High
iptables -t mangle -A SIPSHAPER -p udp --dport 5060 -j MARK --set-mark 1 # SIP High
iptables -t mangle -A SIPSHAPER -p udp --sport 4569 -j MARK --set-mark 1 # IAX High
iptables -t mangle -A SIPSHAPER -p udp --dport 4569 -j MARK --set-mark 1 # ""
iptables -t mangle -A SIPSHAPER -p udp --sport 10000:11000 -j MARK --set-mark 1 # RTP High
iptables -t mangle -A SIPSHAPER -p udp --dport 10000:11000 -j MARK --set-mark 1 # ""
# also put ssh in this chain (interactive)
iptables -t mangle -A SIPSHAPER -p tcp --dport ssh -j MARK --set-mark 1 # secure shell
iptables -t mangle -A SIPSHAPER -p tcp --sport ssh -j MARK --set-mark 1 # secure shell
echo SipShaper started on $DEV with ${RATEUP}kbit/s upload rate.
#end
Das Script ist mit nur zwei chains bewusst einfach gehalten, sicher kann man da im Detail noch viel optimieren. Über Rückmeldungen würde ich mich freuen.
Bei mir läuft es auf einem Debian (SID) System mit Kernel-Image 2.6.10. Auf derselben Maschine läuft der Asterisk.
Udo