View Single Post
  #3  
Old 29th July 2006, 14:51
opyrt opyrt is offline
Junior Member
 
Join Date: Jul 2006
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Default SDSL Traffic Shaping

Hello Hagforce.

I'm facing the same problem, although to a much smaller scale. I've made a script that really improves the performance on my SDSL link, but I really don't know if this is the right way to do it. I am no iptables guru, I just know that this works for me. Maybe you can use this as a guide on how to set up something similar?

This is the shellscript I run on my linux based firewall/router:

#!/bin/sh

set_ipt () {

## Set up base tables for interfaces.

iptables -t mangle -F POSTROUTING

for DEVICE in eth0 eth1; do
# Check if the table is defined.
iptables -t mangle -n -L SH${DEVICE}-OUT > /dev/null 2>&1
if [ $? != 0 ]; then
# No. Create the table.
iptables -t mangle -N SH${DEVICE}-OUT
else
# Yes. Empty the table.
iptables -t mangle -F SH${DEVICE}-OUT
fi
iptables -t mangle -I POSTROUTING -o ${DEVICE} -j SH${DEVICE}-OUT
done
}

## Bandwidth to limit to.
## Should be approx. 10-15% lower than max bandwidth on the link.
## (This is in kilobit)

MAINRATE=1900

for DEVICE in eth0 eth1; do
# Set up basequeues on the interfaces and change queuelenght.
ifconfig $DEVICE txqueuelen 100
tc qdisc del dev $DEVICE root sfq perturb 10 >/dev/null 2>&1
tc qdisc del dev $DEVICE root >/dev/null 2>&1

# If the script was started with the stop parameter,
# let's stop here. This will result in all traffic
# shaping to be turned off.
if [ "$1" = "stop" ]; then continue; fi

# Add HTB root queue discipline.
tc qdisc add dev ${DEVICE} root handle 1: htb default 22

# Add main limit class.
tc class add dev ${DEVICE} parent 1: classid 1:1 htb rate ${MAINRATE}kbit

# Set up classes.
tc class add dev ${DEVICE} parent 1:1 classid 1:20 htb rate $(($MAINRATE/4))kbit ceil ${MAINRATE}kbit prio 0
tc class add dev ${DEVICE} parent 1:1 classid 1:21 htb rate $(($MAINRATE/4))kbit ceil ${MAINRATE}kbit prio 1
tc class add dev ${DEVICE} parent 1:1 classid 1:22 htb rate $(($MAINRATE/4))kbit ceil ${MAINRATE}kbit prio 2
tc class add dev ${DEVICE} parent 1:1 classid 1:23 htb rate $(($MAINRATE/4))kbit ceil ${MAINRATE}kbit prio 3

# Queues for wach class.
tc qdisc add dev ${DEVICE} parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ${DEVICE} parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ${DEVICE} parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ${DEVICE} parent 1:23 handle 23: sfq perturb 10

# Limit traffic to the classes based on tagging from iptables.
tc filter add dev ${DEVICE} parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev ${DEVICE} parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev ${DEVICE} parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev ${DEVICE} parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23

set_ipt

iptables -t mangle -A SH${DEVICE}-OUT -p tcp -m length --length :64 -j MARK --set-mark 20 # Small packages
iptables -t mangle -A SH${DEVICE}-OUT -p udp -j MARK --set-mark 20 # UDP packages
# iptables -t mangle -A SH${DEVICE}-OUT -p icmp -j MARK --set-mark 21 # ICMP packages (ping)
iptables -t mangle -A SH${DEVICE}-OUT -p tcp --sport 22 -j MARK --set-mark 20 # SSH
# iptables -t mangle -A SH${DEVICE}-OUT -p tcp --sport 23 -j MARK --set-mark 21 # TELNET
iptables -t mangle -A SH${DEVICE}-OUT -p tcp --sport 21 -j MARK --set-mark 21 # FTP Control
done

## END ##
Reply With Quote