Help with bandwith control in a firewall/bridge machine

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello again,
First, excuse me for my poor english.
I'm trying now to make bandwith control in a firewall machine running Shorewall. This machine is also a bridge using bridge-utils bridge-utils-devel. It is a mandrake 10. The configuration is something like this:


FTP/Webserver ------|   eth0                                    eth1
Mailserver -------------|------BRIDGE/FIREWALL------Router-----Internet
DB App. server -------|

I have installed iptoute2 and all kernel options needed. I have stated TC_ENABLED = Yes and copied my own script in the tcstart file so shorewall should run it when it gets restarted. I don't get any errors when the script is executed, but all the packets go through the default queue in uplink and downlink when i analize the queues using .
I use the following script to start the bridge:


#!/bin/sh

set -x

#Activamos el puente:

brctl addbr br0

#Desactivamos el protocolo de spanning tree, posibles loops entre routers,

#como en nuestro caso solo lo vamos a conectar a un router no hace falta:

brctl stp br0 off

#A continuación añadimos las tarjetas de red al puente: (Ojo, una vez hecho

#esto perdemos la conectividad)

brctl addif br0 eth0

brctl addif br0 eth1

#Desactivamos las 2 tarjetas de red:

correo.cherrytel.comifconfig eth0 down

ifconfig eth1 down

#Las volvemos a activar pero sin IP definida

ifconfig eth0 0.0.0.0 up

ifconfig eth1 0.0.0.0 up

#Activamos el puente y le asignamos una IP:

ifconfig br0 213.9.139.6 up

#Añadimos la ruta por defecto:

route add default gw 213.9.139.1

#Activamos el reenvio:

echo "1" > /proc/sys/net/ipv4/ip_forward

y añado la entrada al /etc/rc.local



The script in tcstart is:


#!/bin/bash # #

DEV1=eth0 #salida a red interna de Cherrytel
DEV0=eth1 #salida a internet
# Note that this is significantly lower than the capacity of 1500.
# Because of this, you may not want to bother limiting inbound traffic
# until a better implementation such as TCP window manipulation can be used.


#
# End Configuration Options
#

TC=/sbin/tc

if [ "$1" = "status" ]
then
       echo "Enlace descendente"
       echo "[qdisc]"
       $TC -s qdisc show dev $DEV1
       echo "[class]"
       $TC -s class show dev $DEV1
       echo "[filter]"
       $TC -s filter show dev $DEV1

       echo "Enlace ascendente"
       echo "[qdisc]"
       $TC -s qdisc show dev $DEV0
       echo "[class]"
       $TC -s class show dev $DEV0
       echo "[filter]"
       $TC -s filter show dev $DEV0

       exit
fi

# Reset everything to a known state (cleared)
$TC qdisc del dev $DEV0 root 2> /dev/null > /dev/null
$TC qdisc del dev $DEV1 root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV1 -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D PREROUTING -i $DEV0 -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null



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

###########################################################
#
# Inbound Shaping (limits total bandwidth to 850Kbps)
# Este es el enlace descendente, desde internet hacia la red interna de Cherrytel


# set queue size to give latency of about 2 seconds on low-prio packets
#ip link set dev $DEV1 qlen 30

# changes mtu on the outbound device.  Lowering the mtu will result
# in lower latency but will also cause slightly lower throughput due
# to IP and TCP protocol overhead.
#ip link set dev $DEV1 mtu 1000

# add HTB root qdisc
$TC qdisc add dev $DEV1 root handle 1: htb default 37

# add main rate limit classes
$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 856kbit

# add leaf classes - We grant each class at LEAST it's "fair share" of bandwidth.
# this way no class will ever be starved by another class. Each
# class is also permitted to consume all of the available bandwidth
# if no other classes are in use.
$TC class add dev $DEV1 parent 1:1 classid 1:20 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV1 parent 1:1 classid 1:21 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV1 parent 1:1 classid 1:22 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV1 parent 1:1 classid 1:37 htb rate 600kbit ceil 856kbit #por defecto


$TC class add dev $DEV1 parent 1:1 classid 1:23 htb rate 64kbit ceil 856kbit #oficinas

# attach qdisc to leaf classes - here we at SFQ to each priority class. SFQ insures that
# within each class connections will be treated (almost) fairly.
$TC qdisc add dev $DEV1 parent 1:20 handle 20: sfq perturb 10
$TC qdisc add dev $DEV1 parent 1:21 handle 21: sfq perturb 10
$TC qdisc add dev $DEV1 parent 1:22 handle 22: sfq perturb 10
$TC qdisc add dev $DEV1 parent 1:37 handle 37: sfq perturb 10


$TC qdisc add dev $DEV1 parent 1:23 handle 23: sfq perturb 10

# filter traffic into classes by fwmark - here we direct traffic into priority class according to
# the fwmark set on the packet (we set fwmark with iptables
# later). Note that above we've set the default priority
# class to 1:37 so unmarked packets (or packets marked with
# unfamiliar IDs) will be defaulted to the lowest priority
# class.
$TC filter add dev $DEV1 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
$TC filter add dev $DEV1 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
$TC filter add dev $DEV1 parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
$TC filter add dev $DEV1 parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23


# Marking the packets.

iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV1 -j MYSHAPER-IN

iptables -A MYSHAPER-IN -d 213.9.139.30 -t mangle -j MARK --set-mark 20
iptables -A MYSHAPER-IN -d 213.9.139.31 -t mangle -j MARK --set-mark 20
iptables -A MYSHAPER-IN -d 213.9.139.32 -t mangle -j MARK --set-mark 20

iptables -A MYSHAPER-IN -d 213.9.139.22 -t mangle -j MARK --set-mark 21
iptables -A MYSHAPER-IN -d 213.9.139.71 -t mangle -j MARK --set-mark 21

iptables -A MYSHAPER-IN -d 213.9.139.25 -t mangle -j MARK --set-mark 22

iptables -A MYSHAPER-IN -d 213.9.139.24 -t mangle -j MARK --set-mark 23

# iptables -A MYSHAPER-IN -d 10.9.139.14 -t mangle -j MARK --set-mark 22

# iptables -A MYSHAPER-IN -d 10.9.139.13 -t mangle -j MARK --set-mark 22

#El resto de tráco iríal flujo por defecto, el 2:37.

# Done with inbound shaping
#
####################################################

echo "Control del enlace descendente activado."

#Si solo se desea controlar el enlace descendente, quitar el comentario de la siguiente instruccion exit
#exit





########################################################### # # Outbound Shaping (limits total bandwidth to 856Kbps) # Este es el enlace ascendente, desde la red interna de Cherrytel a internet

# set queue size to give latency of about 2 seconds on low-prio packets
#ip link set dev $DEV0 qlen 30

# changes mtu on the outbound device.  Lowering the mtu will result
# in lower latency but will also cause slightly lower throughput due
# to IP and TCP protocol overhead.
#ip link set dev $DEV0 mtu 1000

# add HTB root qdisc
$TC qdisc add dev $DEV0 root handle 2: htb default 87

# add main rate limit classes
$TC class add dev $DEV0 parent 2: classid 2:1 htb rate 856kbit

# add leaf classes - We grant each class at LEAST it's "fair share" of bandwidth.
# this way no class will ever be starved by another class. Each
# class is also permitted to consume all of the available bandwidth
# if no other classes are in use.
$TC class add dev $DEV0 parent 2:1 classid 2:70 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV0 parent 2:1 classid 2:71 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV0 parent 2:1 classid 2:72 htb rate 64kbit ceil 856kbit
$TC class add dev $DEV0 parent 2:1 classid 2:87 htb rate 600kbit ceil 856kbit #por defecto


$TC class add dev $DEV0 parent 2:1 classid 2:73 htb rate 64kbit ceil 856kbit #prueba

# attach qdisc to leaf classes - here we at SFQ to each priority class. SFQ insures that
# within each class connections will be treated (almost) fairly.
$TC qdisc add dev $DEV0 parent 2:70 handle 70: sfq perturb 10
$TC qdisc add dev $DEV0 parent 2:71 handle 71: sfq perturb 10
$TC qdisc add dev $DEV0 parent 2:72 handle 72: sfq perturb 10
$TC qdisc add dev $DEV0 parent 2:87 handle 87: sfq perturb 10


$TC qdisc add dev $DEV0 parent 2:73 handle 73: sfq perturb 10

# filter traffic into classes by fwmark - here we direct traffic into priority class according to
# the fwmark set on the packet (we set fwmark with iptables
# later). Note that above we've set the default priority
# class to 1:87 so unmarked packets (or packets marked with
# unfamiliar IDs) will be defaulted to the lowest priority
# class.
$TC filter add dev $DEV0 parent 2:0 prio 0 protocol ip handle 70 fw flowid 2:70
$TC filter add dev $DEV0 parent 2:0 prio 0 protocol ip handle 71 fw flowid 2:71
$TC filter add dev $DEV0 parent 2:0 prio 0 protocol ip handle 72 fw flowid 2:72
$TC filter add dev $DEV0 parent 2:0 prio 0 protocol ip handle 73 fw flowid 2:73


# Marking the packets.

iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I PREROUTING -i $DEV0 -j MYSHAPER-OUT

iptables -A MYSHAPER-OUT -s 213.9.139.30 -t mangle -j MARK --set-mark 70
iptables -A MYSHAPER-OUT -s 213.9.139.31 -t mangle -j MARK --set-mark 70
iptables -A MYSHAPER-OUT -s 213.9.139.32 -t mangle -j MARK --set-mark 70

iptables -A MYSHAPER-OUT -s 213.9.139.22 -t mangle -j MARK --set-mark 71
iptables -A MYSHAPER-OUT -s 213.9.139.71 -t mangle -j MARK --set-mark 71

iptables -A MYSHAPER-OUT -s 213.9.139.25 -t mangle -j MARK --set-mark 72

iptables -A MYSHAPER-OUT -s 213.9.139.24 -t mangle -j MARK --set-mark 73

# iptables -A MYSHAPER-OUT -s 10.9.139.13 -t mangle -j MARK --set-mark 72

# iptables -A MYSHAPER-OUT -s 10.9.139.14 -t mangle -j MARK --set-mark 72


#El resto de tráco iríal flujo por defecto, el 2:87.


# Done with outbound shaping # ####################################################

echo "Control del enlace ascendente activado."

exit

Thank you very much

UN CORDIAL SALUDO

Miguel Ángel Domínguez Durán.
Departamento Técnico.
Cherrytel Comunicaciones, S.L.
mdominguez@xxxxxxxxxxxxx
http://www.cherrytel.com/
Tlf. 902 115 673
Fax 952218170


_______________________________________________
LARTC mailing list / LARTC@xxxxxxxxxxxxxxx
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux