QoS sobre nuestras comunicaciones VoIP (SIP y RTP)

Cuando etiquetamos tráfico con diferentes priorirdades, existen dos modos de hacerlo, a nivel de protocolo IP (ToS) o a nivel de VLAN (802.1p). En este post vamos a ocuparnos de la primera parte, de la que se encarga de realizar diferenciación a nivel de IP (ToS).

A pesar de que en la practica presentada vamos a trabajar etiquetando todo el tráfico de VoIP entre dos redes, es necesario comentar que lo que queremos tratar con más alta prioridad no es el tráfico SIP (señalización) o el que se encuentre entre dos redes, sino sólo el RTP (paquetes de voz) que es el que lleva la información que una vez iniciada la conversación nos interesará más.

 

Diferenciación a nivel IP: DSCP (ToS)

El ToS (Type Of Service) es un campo que existe en la cabecera del protocolo IPV4 el cual se ha definido en diferentes RFCs. Es un campo de 6 bits, el cual indica a los routers que a la hora de enrutar los paquetes deben de hacerlo con mayor prioridad que el resto.

En la practica, nunca se ha aplicado a nivel extendido, pero en entornos que controlemos nosotros, es decir, en nuestra red, podemos trabajar sin problema con este parámetro.

Cuanto mayor sea el valor de este campo, mejor. Es decir, cuanto mayor sea más prioridad se le va a dar al paquete. La siguiente tabla se puede encontrar en Wikipedia. En nuestro caso, y como lo que queremos es dar prioridad a tráfico de VoIP vamos a diferenciar los datos RTP de nuestras comunicaciones.

DSCP Name DS Field Value (Dec) IP Precedence (Description)
CS0 0 0 : Best Effort
CS1,AF11-13 8,10,12,14 1 :Priority
CS2,AF21-23 16,18,20,22 2 :Immediate
CS3,AF31-33 24,26,28,30 3 :Flash – mainly used for voice signaling
CS4,AF41-43 32,34,36,38 4 :Flash Override
CS5,EF 40,46 5 :Critical – mainly used for voice RTP
CS6 48 6 :Internet
CS7 56 7 :Network

 

Diferenciación a nivel MAC: 802.1p

Esta técnica consiste, conocica como CoS, es un campo que se engloba dentro del las etiquetas del protocolo VLAN 802.1Q. Consiste en dar un valor a un campo de 3 bits llamado PCP. Su valor va entre 0 y 7 a nivel de prioridad. En la siguiente tabla de Wikipedia se puede ver los diferentes valores y acrónimos que se utilizan para este campo. Paara nuestro caso, el de tráfico VoIP, deberemos de utilizar el nivel 5, dejando los dos superiores a capas de management e internetwork.

PCP Priority Acronym Traffic types
1 0 (lowest) BK Background
0 1 BE Best Effort
2 2 EE Excellent Effort
3 3 CA Critical Applications
4 4 VI Video, < 100 ms latency and jitter
5 5 VO Voice, < 10 ms latency and jitter
6 6 IC Internetwork Control
7 7 (highest) NC Network Control

Es de importancia vital entender que el estandard 802.1p se encuentra intimamente relacionado con los 802.1d y 802.1q.

Implementando DSCP en nuestra red VoIP:

Tal y como hemos comentado anteriormente, vamos a realizar una aproximación. En nuestro caso lo que vamos a etiquetar es el tráfico saliente, para que llegue correctamente identificado a su destino, así como a los saltos intermedios. No tiene sentido etiquetar el tráfico en destino, dado que ya ha recorrido del paquete ya se ha realizado, con el riesgo de que haya sufrido congestión o pérdidas.

En nuestro Asterisk procedemos a realizar un etiquetado de tráfico a nivel de DSCP a través de iptables añadiendo las siguientes reglas con mangle. Siguiendo la tabla al campo DSCP le vamos a asignar el valor EF (que en decimal es 46, y en hexadecimal corresponde a 2E).

iptables -A OUTPUT -t mangle -p udp -m udp --sport 5060 -j DSCP --set-dscp 0x2e
iptables -A OUTPUT -t mangle -p udp -m udp --dport 5060 -j DSCP --set-dscp 0x2e
iptables -A OUTPUT -t mangle -p udp -m udp --sport 10000:20000 -j DSCP --set-dscp 0x2e
iptables -A OUTPUT -t mangle -p udp -m udp --dport 10000:20000 -j DSCP --set-dscp 0x2e

Una vez aplicado esto en nuestro iptables, si hacemos un tcpdump o ngrep, veremos como el tráfico que se envía a con puertos de origen iguales a los que hemos definido (protocolo UDP) aparecen con DSCP EF.

Routers Cisco:

A continuación vamos a configurar las diferentes políticas en nuestros routers Ciscos para que trabajen con DSCP, etiquetando todo el tráfico que entre con un destino determinado.

Configuramos un object-group para identificar todo el tráfico de voz que vamos a enviar:

object-group service voipservice 
 udp eq 5060
 udp gt 10000
 udp lt 20000

Después creamos las ACLs donde identificamos este tráfico. Para nuestro caso, vamos a tratar el tráfico que tiene como origen 192.168.3.0/24 y destino 192.168.1.0/24, pero podríamos haber puesto “any any” para cualquier tipo de tráfico que cumpliese el object-group. El hecho de realizar estos ACLs se realiza para aplicar después a los class-maps:

access-list 100 permit object-group voipservice 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255

Creamos un class-map utilizando esta ACL para así poder tener nuestro tráfico clasificado dentro de nuestro router:

class-map match-any voip
 description VoIP-Traffic
 match access-group 100

Y finalmente la aplicamos a este tráfico una acción con policy-map. Es decir, ya lo tenemos identificado dentro de un class-map, y ahora le decimos que lo etiquete como EF en su campo DSCP.

policy-map voipdscppolicy
 description VoIP-Traffic-192168003
 class voip
  set ip dscp ef

Una vez tenemos esto ya configurado, aplicamos este policy-map en las interfaces de entrada. En nuestro caso es una interfaz que va conecta a la LAN del cliente, pero podría ser, perfectamente, una VLAN.

interface FastEthernet0/0
 description LANCLIENTE
 ip address 192.168.3.1 255.255.255.0
 !
 service-policy input voipdscppolicy

Y a generar tráfico y ver qué pasa. En mi caso, a la ACL he añadido una regla para que los ICMPs también los etiquete (he utilizado GNS3 para estas simulaciones).

CapturaTraficoEF

Referencias:

http://en.wikipedia.org/wiki/Type_of_service

http://en.wikipedia.org/wiki/IEEE_P802.1p

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s