You are on page 1of 36

Marcado de trafico DiffServ en Linux

Planificacion y Gesti
on de Redes de Ordenadores

Departamento de Sistemas Telematicos y Computacion (GSyC)

Noviembre de 2013

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

c
2012
Grupo de Sistemas y Comunicaciones.
Algunos derechos reservados.
Este trabajo se distribuye bajo la licencia
Creative Commons Attribution Share-Alike
disponible en http://creativecommons.org/licenses/by-sa/3.0/es

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

Contenidos

DS y DSCP

Marcado de trafico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

DS y DSCP

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

DS y DSCP

Marcas en los paquetes: Valores DS y DSCP


El valor DS son 8 bits que viajan en el campo Tipo de Servicio de la
cabecera IP. Estos 8 bits son en realidad DSCP (6 bits) + ECN (2 bits).
DSCP%
(6bits)%

DS%(8%bits)%

AF11$
Clase% AF12$
AF1%
AF13$

001%010$

0010$1000$$0x28$

Baja$

001%100$

0011$0000$$0x30$

Media$

001%110$

0011$1000$$0x38$

Alta$

AF21$

010%010$

0100$1000$$0x48$

Baja$

Clase% AF22$
AF2%
AF23$

010%100$

0101$0000$$0x50$

Media$

010%110$

0101$1000$$0x58$

Alta$

AF31$

011%010$

0110$1000$$0x68$

Baja$

Clase% AF32$
AF3%
AF33$

011%100$

0111$0000$$0x70$

Media$

011%110$

0111$1000$$0x78$

Alta$

AF41$

100%010$

1000$1000$$0x88$

Baja$

Clase% AF42$
Clase$ms$ AF4%
AF43$
prioritaria$
Clase%EF%

100%100$

1001$0000$$0x90$

Media$

100%110$

1001$1000$$0x98$

Alta$

101$110$

1011$1000$$0xb8$

Clase$menos$
prioritaria$

GSyC - 2013

Prioridad%de%%
descarte%de%trco%

Marcado de tr
afico DiffServ en Linux

Marcado de tr
afico

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

Marcado de tr
afico

DSMARK

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

Marcado de tr
afico

DSMARK

DSMARK: qdisc

DSMARK es una qdisc que se utiliza para la clasificacion de


paquetes seg
un la arquitectura de DiffServ y el marcado del
campo DS.
Probaremos la funci
on de marcado y remarcado del campo
DS:
Routers frontera de DiffServ: es necesario clasificar los
paquetes atendiendo a valores de su cabecera IP y marcar el
campo DS.
Routers del n
ucleo de DiffServ: Los paquetes se clasifican
atendiendo al contenido de DS que traen los paquetes IP. Se
pueden volver a reclasificar, asignando nuevos valores DS.

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

Marcado de tr
afico

DSMARK

DSMARK: qdisc y sus clases


Una qdisc DSMARK crea automaticamente un conjunto de clases para
asignar en cada una de ellas un valor diferente en el campo DSCP.
Al crear la qdisc DSMARK es necesario especificar la cantidad maxima de
valores DSCP que se van a usar para clasificar los paquetes. Este valor
debe ser una potencia de 2.
Por ejemplo, la siguiente qdisc con n
umero de clases igual a 23 = 8
podra definir como maximo 7 valores DSCP diferentes, uno para cada una
de sus clases:
tc qdisc add dev eth1 handle 1:0 root dsmark indices

Una vez creada una qdisc DSMARK se habran creado automaticamente


sus clases asociadas. Cada clase tiene un descriptor X:Y, donde:
X es el valor del n
umero mayor de la clase qdisc a la que pertenece
Y es el n
umero menor que distingue a cada una de las clases

Por ejemplo, para definir como maximo 7 clases de trafico dentro de una
qdisc 1:0 se usaran los siguientes descriptores: 1:1, 1:2, 1:3, 1:4, 1:5, 1:6,
1:7. El n
umero mayor coincide en todas ellas, ya que todas pertenecen a la
qdisc 1.

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

Marcado de tr
afico

DSMARK

DSMARK: mascara y valor DSCP


Para configurar un valor DS en un paquete IP se utiliza una
clase DSMARK en la que se van a realizar las siguientes
operaciones:
1

operaci
on & de bits con una mascara para mantener aquellos
bits del campo DS que se deseen (0x03, mantiene los 2 bits
menos significativos donde viaja ECN)
operaci
on | de bits con el nuevo valor DS que se desee asignar.
mask#0x03#
0000#0011#

DS#=#0000#0000#=#0x00#

&#

value#0x68#
0110#1000#
DS#=#0000#0000#=#0x00#

I#

DS#=#0110#1000#=#0x68#

Por ejemplo: si la clase 1:3 marca con DS=0x68 (AF31)


conservando los bits ECN:
tc class change dev eth1 classid 1:3 dsmark mask 0x3 value 0x68
GSyC - 2013

Marcado de tr
afico DiffServ en Linux

10

Marcado de tr
afico

DSMARK

Router frontera y router del nucleo

Para especificar los paquetes que pertenecen a cada una de las


clases es necesario definir filtros. Al menos un filtro por cada
clase.
Estudiaremos dos casos de trafico de entrada en la red
DiffServ:
Router frontera: debe clasificar los paquetes seg
un los campos
de su cabecera IP y marcar el campo DSCP.
Router del n
ucleo: debe clasificar los paquetes en funcion del
DS que traigan y puede remarcar el campo DSCP.

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

11

Marcado de tr
afico

DSMARK

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

12

Marcado de tr
afico

DSMARK

Filtro tcindex: Router Frontera (I)


Al recibirse un paquete IP en un
router, se almacena en un buffer.
Cuando un paquete atraviesa la
disciplina de cola de entrada
qdisc ingress, el buffer que
almacena el paquete IP dentro del
kernel del router Linux tiene un campo
tc_index en el que se almacena el
identificador de flujo en el que fue
clasificado dicho paquete cuando
ingreso en la cola qdisc ingress:
si un paquete queda clasificado en
flowid :2, el campo tc_index
almacenara el valor 2.

Esta informaci
on es la que utiliza
posteriormente el filtro tcindex dentro
de otras qdisc de dicho router para dar
tratamiento diferenciado a los
paquetes.

GSyC - 2013

tc qdisc add dev eth0

handle ffff: ingress

tc filter add dev eth0 parent ffff: \


protocol ip prio 4 u32 \
match ip src 11.0.0.100/32 \
police rate 1mbit burst 10k continue flowid :1
tc filter add dev eth0 parent ffff: \
protocol ip prio 5 u32 \
match ip src 11.0.0.100/32 \
police rate 512kbit burst 10k continue flowid :2
tc filter add dev eth0 parent ffff: \
protocol ip prio 6 u32 \
match ip src 11.0.0.100/32 \
police rate 256kbit burst 10k drop flowid :3
tc filter add dev eth0 parent ffff: \
protocol ip prio 6 u32 \
match ip src 0.0.0.0/0 \
police rate 128kbit burst 10k drop flowid :4

Marcado de tr
afico DiffServ en Linux

13

Marcado de tr
afico

DSMARK

Filtro tcindex: Router Frontera (II)


Cuando un paquete atraviesa la disciplina de cola de entrada,
el buffer que contiene el paquete tiene un campo donde se ha
almacenado el descriptor del flujo al que pertenece: tc_index.
Paquetes(tc_index=1(

Filter'owid=:1'
CONTINUE'

Filter'owid=:2'
CONTINUE'

Filter'owid=:3'

DROP'

Filter'owid=:4'

Paquetes(tc_index=2(
Paquetes(tc_index=3(
Paquetes(tc_index=4(

DROP'

Qdisc'ingress'

Ejemplo: Los paquetes clasificados dentro del flowid=:1


llevaran en el campo tc_index=1
GSyC - 2013

Marcado de tr
afico DiffServ en Linux

14

Marcado de tr
afico

DSMARK

Filtro tcindex: Router Frontera (III)


EL filtro tcindex utiliza el valor almacenado en tc_index del buffer
que contiene un paquete IP para clasificarlo dentro de una clase en la
disciplina de cola de salida, en este caso DSMARK.
Ejemplo:
qdisc DSMARK con 3 diferentes valores de marcado
tc qdisc add dev eth1 handle 1:0 root dsmark indices 4
tc
tc
tc
tc

class
class
class
class

change
change
change
change

dev
dev
dev
dev

tc filter add dev


handle 1
tc filter add dev
handle 2
tc filter add dev
handle 3
tc filter add dev
handle 4
GSyC - 2013

eth1
eth1
eth1
eth1

classid
classid
classid
classid

1:1
1:2
1:3
1:4

eth1 parent 1:0


tcindex classid
eth1 parent 1:0
tcindex classid
eth1 parent 1:0
tcindex classid
eth1 parent 1:0
tcindex classid

dsmark
dsmark
dsmark
dsmark

protocol
1:1
protocol
1:2
protocol
1:3
protocol
1:4

mask
mask
mask
mask

0x3
0x3
0x3
0x3

value
value
value
value

0x28
0x48
0x68
0x88

ip prio 1 \
ip prio 1

ip prio 1

ip prio 1

Marcado de tr
afico DiffServ en Linux

15

Marcado de tr
afico

DSMARK

Filtro tcindex: Router Frontera (IV)


Los paquetes entran en el router y atraviesan la cola ingress, donde se
rellena el campo tc_index.
Dentro de la cola DSMARK en la interfaz de salida, se comprueba el
valor de tc_index y se clasifica el trafico en las clases de DSMARK,
que marcaran los paquetes con un determinado valor de DS.
Router'Linux'
Filter'
owid=:1'
CONTINUE'
Filter'
owid=:2'
CONTINUE'
Filter'
owid=:3'
DROP'
Filter'
owid=:4'
DROP'
Qdisc'ingress'

Interfaz(de(entrada(

GSyC - 2013

Paquetes((
tc_index=1(
Paquetes(
(tc_index=2(
Paquetes(
(tc_index=3(
Paquetes(
(tc_index=4(

E(
N(
C(
A(
M(
I(
N(
A
M(

Paquetes(
marcados(
con(
(tc_index(

Filter(fw(
tc_index=1(

Classid=1:
1'DS=0x28'

qdisc'

Filter(fw((
tc_index=2(

Classid=1:
2'DS=0x48'

qdisc'

Filter(fw(
tc_index=3(

Classid=1:
3'DS=0x68'

qdisc'

Filter(fw(
tc_index=4(

Classid=1:
4'DS=0x88'

qdisc'

Qdisc'DSMARK'

Interfaz(de(salida(

Marcado de tr
afico DiffServ en Linux

16

Marcado de tr
afico

DSMARK

Filtro tcindex: Router Frontera (V)


ingress$

:0$
Resto$$
128kbit$

11.0.0.100$
1mbit$

11.0.0.100$
256kbit$

11.0.0.100$
512kbit$

:1$

handle=1)
tcindex)

:2$

handle=2)
tcindex)

:3$

handle=3)
tcindex)

:4$

handle=4)
tcindex)

ENCAMINAMIENTO)
dsmark$ 1:0$
handle=4$
tcindex$

handle=1$
tcindex$
handle=2$
tcindex$

GSyC - 2013

handle=3$
tcindex$

1:1$

1:2$

1:3$

1:4$

0x28$

0x48$

0x68$

0x88$

Marcado de tr
afico DiffServ en Linux

17

Marcado de tr
afico

DSMARK

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

18

Marcado de tr
afico

DSMARK

Filtro tcindex: Router del Nucleo (I)


En el router del n
ucleo, el paquete llega con DS relleno. Para
reclasificarlo en funci
on del campo DS que trae un paquete y asignar
un nuevo marcado en el campo DS, tambien se puede usar DSMARK.
Si el router no realiza la funci
on policing, por tanto, no tiene por
que tener configurada una disciplina de cola ingress. Esto implica que
no se rellena el campo tc_index del buffer del kernel del Linux que
contiene el paquete.
La propia qdisc DSMARK puede copiar el campo DS que lleva la
cabecera IP del paquete en el campo tc_index de la estructura de
datos del kernel del Linux que almacena el paquete utilizando el
siguiente parametro: set tc index
tc qdisc add dev eth1 handle 1:0 root dsmark indices 64 set_tc_index

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

19

Marcado de tr
afico

DSMARK

Filtro tcindex: Router del Nucleo (II)


Como se copia el campo DS, el filtro debera utilizar s
olo los 6 bits
mas significativos del campo DS, es decir, DSCP para clasificar los
paquetes:
1

Primero se aplica un filtro para extraer esos 6 bits (operacion & con
mask 1111 1100 y desplazamiento a la derecha 2 bits) del campo
DSCP y pasarlos al siguiente filtro (pass on):
tc filter add dev eth1 parent 1:0 protocol ip prio 1
tcindex mask 0xfc shift 2 pass_on

Los siguientes filtros comprobaran este n


umero con cada una de las
clases. Por ejemplo DS=00101000 => DSCP=001010, es decir el
n
umero decimal 10 que se corresponde con AF11.
tc filter add dev eth1
tcindex mask 0xfc
tc filter add dev eth1
handle 10 tcindex

parent 1:0 protocol ip prio 1 \


shift 2 pass_on
parent 1:0 protocol ip prio 1 \
classid 1:1

Si es necesario cambiar el valor DSCP se configurara un nuevo valor


para esa clase:
tc class change dev eth1 classid
GSyC - 2013

1:1 dsmark mask 0x3 value 0x48


Marcado de tr
afico DiffServ en Linux

20

Marcado de tr
afico

DSMARK

Filtro tcindex: Router del Nucleo (III)


Ejemplo:
Si es AF11 (DSCP=001010) handle=10 en decimal, lo remarco en AF21
(DS=0x48)
AF11 (DSCP=001100) handle=12 en decimal, lo remarco en AF22
(DS=0x50)
AF11 (DSCP=001110) handle=14 en decimal, lo remarco en AF23
(DS=0x58)

tc qdisc add dev eth1 handle 1:0 root dsmark indices 4 set_tc_index
tc class change dev eth1 classid 1:1 dsmark mask 0x3 value 0x48
tc class change dev eth1 classid 1:2 dsmark mask 0x3 value 0x50
tc class change dev eth1 classid 1:3 dsmark mask 0x3 value 0x58

tc filter add dev eth1 parent 1:0 protocol ip


tcindex mask 0xfc shift 2 pass_on
tc filter add dev eth1 parent 1:0 protocol ip
handle 10 tcindex classid 1:1
tc filter add dev eth1 parent 1:0 protocol ip
handle 12 tcindex classid 1:2
tc filter add dev eth1 parent 1:0 protocol ip
handle 14 tcindex classid 1:3

GSyC - 2013

prio 1 \
prio 1

prio 1

prio 1

Marcado de tr
afico DiffServ en Linux

21

Marcado de tr
afico

DSMARK

Filtro tcindex: Router del Nucleo (IV)


Los paquetes entran en el router que no tiene definida qdisc ingress.
La disciplina de cola de salida DSMARK rellena tc_index con el
contenido de DSCP.
Los filtros consultan tc_index y deciden el nuevo marcado.
Router'Linux'

Paquetes""
marcados""
con"DSCP"

Interfaz"de"entrada"

GSyC - 2013

E"
N"
C"
A"
M"
I"
N"
A
M"

Se"asignan"
nuevos"DS"
Filter"fw"
tc_index=10"
AF11"classid=1:1"

Classid=1:1'
DS=nuevo'

Filter"fw"
tc_index=12"
AF12"classid=1:2"

Classid=1:2'
DS=nuevo'

Filter"fw"
tc_index=14"
AF13"classid=1:3"

Classid=1:3'
DS=nuevo'

qdisc'

qdisc'

qdisc'

Qdisc'DSMARK'set_tc_index'

Interfaz"de"salida"

Marcado de tr
afico DiffServ en Linux

22

Marcado de tr
afico

DSMARK

Filtro tcindex: Router del Nucleo (V)


dsmark$
set_tc_index$ 1:0$
handle=10$
tcindex$
handle=12$
tcindex$

GSyC - 2013

handle=14$
tcindex$

1:1$

1:2$

1:3$

0x48$

0x50$

0x58$

Marcado de tr
afico DiffServ en Linux

23

Marcado de tr
afico

iptables

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

24

Marcado de tr
afico

iptables

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

25

Marcado de tr
afico

iptables

Marcado DSCP con iptables


El marcado del campo DSCP en los paquetes IP puede reescribirse, en vez de
con DSMARK, utilizando iptables a traves de la tabla mangle y la accion -j
DSCP.
Por ejemplo, para conseguir un valor:
DS=0x88 = 1000 1000 DSCP=0010 0010=0x22 AF41
DS=0x90 = 1001 0000 DSCP=0010 0100=0x24 AF42
iptables -t mangle -A POSTROUTING
-j DSCP --set-dscp 0x22
iptables -t mangle -A POSTROUTING
-j RETURN
iptables -t mangle -A POSTROUTING
iptables -t mangle -A POSTROUTING

-s 200.0.0.1 -p tcp --sport 80

-s 200.0.0.1 -p tcp --sport 80

-s 200.0.0.1 -p tcp -j DSCP --set-dscp 0x24


-s 200.0.0.1 -p tcp -j RETURN

O tambien usando el nombre de la clase (AF41=0x88, AF42=0x90):


iptables -t mangle -A POSTROUTING
-j DSCP --set-dscp-class AF41
iptables -t mangle -A POSTROUTING
-j RETURN
iptables -t mangle -A POSTROUTING
iptables -t mangle -A POSTROUTING

GSyC - 2013

-s 200.0.0.1 -p tcp --sport 80 \


-s 200.0.0.1 -p tcp --sport 80 \
-s 200.0.0.1 -p tcp -j DSCP --set-dscp-class AF42
-s 200.0.0.1 -p tcp -j RETURN

Marcado de tr
afico DiffServ en Linux

26

Marcado de tr
afico

iptables

Consulta de la tabla mangle de iptables


Al consultar las reglas de todas las cadenas de la tabla mangle:
r1:~# iptables -t mangle -L -v -n --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source

destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)


pkts bytes target prot opt in out
source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
Chain POSTROUTING
pkts bytes target
1
0
DSCP
2
0
RETURN
3
0
DSCP

GSyC - 2013

(policy ACCEPT 0 packets, 0 bytes)


prot opt in out
source
destination
tcp -- any any
200.0.0.1 anywhere
tcp spt:80 DSCP set 0x22
tcp -- any any
200.0.0.1 anywhere
tcp spt:80 DSCP set 0x22
tcp -- any any
anywhere anywhere
tcp DSCP set 0x24

Marcado de tr
afico DiffServ en Linux

27

Marcado de tr
afico

iptables

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

28

Marcado de tr
afico

iptables

Clasificacion del trafico con iptables


Algunos de las reglas de clasificacion que se pueden expresar utilizando las
reglas filter de la herramienta Traffic Control, pueden reescribirse con
iptables, a traves de la accion CLASSIFY.
Por ejemplo, en un router del n
ucleo se puede realizar la clasificacion de un
paquete desde iptables atendiendo al contenido de su campo DSCP. La
disciplina de colas en la interfaz de salida recibira el paquete ya clasificado y no
necesitara definir un filtro.
Si un paquete cumple la condicion de una regla cuya acci
on es CLASSIFY, el
paquete se clasifica dentro de las clase de TC dada por --set-class y no
abandona la cadena a la cual pertenece la regla. Por tanto, si desea que
abandone la cadena se debe especificar explcitamente.
iptables -t mangle -A POSTROUTING -m dscp --dscp-class AF41 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -m dscp --dscp-class AF41 -j RETURN

La acci
on RETURN hace que se ejecute la poltica por defecto para esa cadena.

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

29

Medidor compartido de tr
afico de entrada

Contenidos

DS y DSCP

Marcado de trafico
DSMARK
Filtro tcindex: Router Frontera
Filtro tcindex: Router del N
ucleo

iptables
Marcado DSCP
Clasificaci
on del tr
afico

Medidor compartido de trafico de entrada

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

30

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (I)


Se desea reclasificar y volver a marcar el trafico de salida de un router
con el siguiente patr
on:
El trafico de salida AF41 sera solo 1500kbit del trafico AF41 de
entrada (flujo 1).
El trafico AF41 de entrada que supere 1500kbit se unira con AF42
(flujo 2). S
olo se permite la salida de 1000kbit de este trafico. Los
1000kbit saldran marcados como trafico AF42.
El trafico que supere las especificaciones del flujo 2 se unira con AF43
(flujo 3). S
olo se permite la salida de 1000kbit de este trafico. Los
1000kbit saldran marcados como trafico AF43.
El trafico que supere las especificaciones del flujo 3 se descarta.
El resto de trafico, ni AF41, ni AF42 ni AF43, se enviara a 1500kbit
(flujo4). Este trafico saldra marcado como BE.

En este caso son necesarios medidores compartidos para establecer las


siguientes medidas:
1000kbit para el flujo 2 que esta compartido entre el trafico sobrante
del flujo 1 y AF42.
1000kbit para el flujo 3 que esta compartido entre el sobrante del flujo
2 y AF43.
GSyC - 2013

Marcado de tr
afico DiffServ en Linux

31

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (II)


En la interfaz de entrada se aplicara la siguiente funcion de
acondionamiento del trafico:
AF41%

AF41%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Flowid%:1%%%%%%tcindex=1%

AF42%

r=1000kbit%
AF41%y%AF42%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Flowid%:2%%%%%tcindex=2%

AF43%

r=1000kbit%
AF41,%AF42%y%AF43%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Flowid%:3%%%%%tcindex=3%

Ni%AF41,%
ni%AF42,%
ni%AF43%

GSyC - 2013

r=1500kbit%

r=1500kbit%
Resto%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Flowid%:4%%%%%tcindex=4%

Marcado de tr
afico DiffServ en Linux

32

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (III)


#!/bin/bash
####################### Ingress side ########################
tc qdisc add dev eth0 handle ffff: ingress
#Tr
afico AF41 dentro del flujo :1, medidor index=1
tc filter add dev eth0 parent ffff: protocol ip prio 4 u32 \
match ip tos 0x88 0xfc \
police index 1 rate 1500kbit burst 90k \
continue flowid :1
#Tr
afico AF41 dentro del flujo :2, medidor index=2
tc filter add dev eth0 parent ffff: protocol ip prio 5 u32 \
match ip tos 0x88 0xfc \
police index 2 rate 1000kbit burst 90k \
continue flowid :2
#Tr
afico AF41 dentro del flujo :3, medidor index=3
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 \
match ip tos 0x88 0xfc \
police index 3 rate 1000kbit burst 60k \
drop flowid :3
GSyC - 2013

Marcado de tr
afico DiffServ en Linux

33

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (IV)


#Tr
afico AF42 dentro del flujo :2, medidor index=2
tc filter add dev eth0 parent ffff: protocol ip prio 5 u32 \
match ip tos 0x90 0xfc \
police index 2 rate 1000kbit burst 90k \
continue flowid :2
#Tr
afico AF42 dentro del flujo :3, medidor index=3
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 \
match ip tos 0x90 0xfc \
police index 3 rate 1000kbit burst 60k \
drop flowid :3
#Tr
afico AF43 dentro del flujo :3, medidor index=3
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 \
match ip tos 0x98 0xfc \
police index 3 rate 1000kbit burst 60k \
drop flowid :3
#Resto de tr
afico dentro del flujo :4, medidor index=4
tc filter add dev eth0 parent ffff: protocol ip prio 7 u32 \
match ip src 0/0 \
police index 4 rate 1500kbit burst 60k \
drop flowid :4

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

34

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (V)


ingress'

:0'

Resto''
1500kbit'
AF1,' AF1,'
'AF2' AF2,''
1000kbit' AF3'
1000kbit'
:2'
:3'
:4'

AF1'
1500kbit'

:1'

En la interfaz de salida se
volvera a marcar el
trafico.

handle=1)
tcindex)

handle=2)
tcindex)

handle=4)
tcindex)

ENCAMINAMIENTO)
dsmark'

1:0'
handle=4'
tcindex'

handle=1'
tcindex'
handle=2'
tcindex'

GSyC - 2013

handle=3)
tcindex)

handle=3'
tcindex'

1:1'

1:2'

1:3'

1:4'

0x88'

0x90'

0x98'

0x00'

Marcado de tr
afico DiffServ en Linux

35

Medidor compartido de tr
afico de entrada

Medidores compartidos de trafico de entrada (VI)


######################## Egress side ########################
tc qdisc add dev eth1 handle 1:0 root dsmark indices 64
tc
tc
tc
tc

class
class
class
class

change
change
change
change

dev
dev
dev
dev

eth1
eth1
eth1
eth1

classid
classid
classid
classid

1:1
1:2
1:3
1:4

dsmark
dsmark
dsmark
dsmark

mask
mask
mask
mask

0x3
0x3
0x3
0x3

value
value
value
value

0x88
0x90
0x98
0x0

tc filter add dev eth1 parent 1:0 protocol ip prio 1 \


handle 1 tcindex classid 1:1
tc filter add dev eth1 parent 1:0 protocol ip prio 1 \
handle 2 tcindex classid 1:2
tc filter add dev eth1 parent 1:0 protocol ip prio 1 \
handle 3 tcindex classid 1:3
tc filter add dev eth1 parent 1:0 protocol ip prio 1 \
handle 4 tcindex classid 1:4

GSyC - 2013

Marcado de tr
afico DiffServ en Linux

36

You might also like