[Asterisk-Users] VOIP CBQ BandLimit HELP!!

Andrew Kohlsmith akohlsmith-asterisk at benshaw.com
Tue Jun 1 06:30:29 MST 2004


On Tuesday 01 June 2004 05:44, joachim wrote:
> Do you have a working firewall ruleset for HTB, optimized for voip ?

Here, for your viewing pleasure, is my htb script.  I am *positive* it can be 
improved upon.  I found I had to put the bulk traffic in a separate HTB 
"branch" or otherwise it would tend to borrow from the VOIP branch way too 
early and cause a lot of stutter.

Again, this isn't to be taken as an official, proven and perfect system.  I am 
welcome to any suggestions or improvements.  As you can see from the diagram 
I am planning on doing some more fine tuning, but it works pretty damned well 
as is.  My next post will be the Cisco 2610's configuration on the other side 
of the link.

Regards,
Andrew

#!/bin/sh

TCOP="add"
IPTOP="-A"

if [ "$1" == "stop" ]; then
        echo "Stopping..."
        TCOP="del"
        IPTOP="-D"
fi

#          +---------+
#          | root 1: |
#          +---------+
#               |
# +----------------------------+
# |         class 1:1          |
# +----------------------------+
#   |           |           |
# +----+      +----+      +----+
# |1:10|      |1:20|      |1:30|
# +----+      +----+      +----+
#               |
#      +--------+--------+
#      |        |        |
#   +-----+  +-----+  +-----+
#   |1:100|  |1:101|  |1:102|
#   +-----+  +-----+  +-----+

# 1:10 is the class for VOIP traffic, pfifo qdisc
# 1:20 is for bulk traffic (htb, leaves use sfq)
# 1:30 is the class that interactive and TCP SYN/ACK traffic (sfq qdisc)

# 1:20 is further split up into different kinds of bulk traffic: web, mail and
# everything else.  1:100-102 fight amongst themselves for their slice of 
excess
# bandwidth, and in turn 1:10,20 and 30 then fight for any excess above their
# minimum rates.

# which interface to throw all this on (DSL)
IF=eth2

# ciel is 75% of max rate (768kbps)
# rate is 65% of max rate
# we don't let it go to 100% because we don't want the DSL modems to have a 
ton
# of packets in their buffers.  *we* want to do the buffering.

RATE=576
CEIL=640
#RATE=450
#CEIL=500

tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 102
tc class ${TCOP} dev ${IF} parent 1:   classid 1:1 htb rate ${RATE}kbit ceil 
${CEIL}kbit

tc class ${TCOP} dev ${IF} parent 1:1  classid 1:10 htb rate 64kbit ceil 
${RATE}kbit prio 1
tc class ${TCOP} dev ${IF} parent 1:1  classid 1:20 htb rate 64kbit ceil 
${RATE}kbit prio 2

tc class ${TCOP} dev ${IF} parent 1:20 classid 1:100 htb rate ${RATE}kbit
tc class ${TCOP} dev ${IF} parent 1:20 classid 1:101 htb rate ${RATE}kbit
tc class ${TCOP} dev ${IF} parent 1:20 classid 1:102 htb rate ${RATE}kbit

tc qdisc ${TCOP} dev ${IF} parent 1:10  handle 10:  pfifo
tc qdisc ${TCOP} dev ${IF} parent 1:100 handle 100: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:101 handle 101: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:102 handle 102: sfq perturb 10

tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 1 handle 1 fw classid 
1:10
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 4 handle 4 fw classid 
1:100

# IAX2 prio 0.
iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j MARK 
--set-mark 0x1
iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j RETURN

# everything else goes into lowest priority (best effort).
iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x4
iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x4




More information about the asterisk-users mailing list