jueves, 23 de abril de 2009

Configurar QOS con policy-map en IOS

El QOS es una de las cuestiones que todos deberíamos tener en cuenta para el correcto funcionamiento de las redes pero es un tema tan extenso y complejo como para desorientar al más experimentado ingeniero de redes.

La idea de este post es dar unas nociones básicas de cómo manejar los anchos de banda usando IOS usando un ejemplo concreto.

Ates que nada debo aclarar que en este post no voy a ingresar en cuestiones avanzadas del tema, sino que voy a dar una visión general de como se clasifica el tráfico para luego aplicarle una política determinada. Puntualmente estoy hablando de limitar los anchos de banda con las herramientas que nos provee IOS.

En el ejemplo, tenemos un router de borde que da servicio a cinco subredes, y queremos manejar los anchos de banda de cada una por separado.



Veamos el diagrama:





Lo primero que vamos a hacer es definir access lists por cada rango de direcciones IP que vamos a
utilizar para definir los anchos de banda.
access-list 10 permit 200.200.10.0 0.0.0.255
access-list 20 permit 200.200.20.0 0.0.0.255
access-list 30 permit 192.168.30.0 0.0.0.255
access-list 31 permit 200.200.30.0 0.0.0.7
access-list 32 permit 200.200.30.8 0.0.0.7

Ahora definiremos las class-map.

Estas son estructuras que contienen las condiciones que se deben cumplir para que pase algo.

Como un class-map puede tener varias condiciones adentro, debemos decir si se tienen que dar todas a la vez, o bien cualquiera de ellas.

Para eso utilizamos los parámetros match-all ó match-any respectivamente. Si no especificamos ninguno de los dos, se tomará match-all por defecto.

Formato:


Router(config)#class-map [match-all | match-any] NombreDeLaClassMap


Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#class-map match-all Prueba
Router(config-cmap)#
Router(config-cmap)#description matchea el trafico web de una determinada red
Router(config-cmap)#match protocol http
Router(config-cmap)#match access-group 1
Router(config-cmap)#exit
Router(config)#class-map match-any P2P
Router(config-cmap)#description Con esto voy a filtrar CUALQUIER cliente P2P (emule, ares, etc...)
Router(config-cmap)#match protocol ares
Router(config-cmap)#match protocol bittorrent
Router(config-cmap)#match protocol directconnect
Router(config-cmap)#match protocol edonkey
Router(config-cmap)#match protocol gnutella
Router(config-cmap)#match protocol kazaa
Router(config-cmap)#match protocol kazaa2
Router(config-cmap)#match protocol napster
Router(config-cmap)#match protocol winmx
Router(config-cmap)#exit
Router(config)#

Así creamos todos los class-map que sean necesarios. Ellos pueden matchear por:
  • ip de origen
  • ip de destino
  • access-list
  • protocolo (NBAR)
  • Marca de paquete
  • Etiqueta de MPLS
  • Todos los paquetes (any)
  • Clase de Servicio (COS)
  • Interfaz de entrada
  • Otros (dependiendo del IOS)

Configurar la policy-map:

Con esto creamos una política que va a ser un agrupamiento de las classmaps bajo un mismo nombre, en donde vamos a definir qué se hace cuando se cumplen las condiciones que ellas establecen.

Formato:


Router(config)#policy-map NombreDeLaPolicyMap
Router(config-pmap)#class NombreDeLaClassMap
Router(config-pmap-c)#police Garantizado Rafagas Pico \
conform-action Accion exceed-action Accion violate-action Accion


Acción puede ser:
  • Dejarlo pasar (transmit)
  • Filtrarlo (drop)
  • Otra (dependiendo del IOS)

Ejemplo:

Router(config)#policy-map TraficoInternet
Router(config-pmap)#class Prueba
Router(config-pmap-c)#police 1000000 1500000 2000000 conform-action \
transmit exceed-action transmit violate-action drop
Router(config-pmap-c)#exit
Router(config-pmap)#class P2P
Router(config-pmap-c)#drop
Router(config-pmap-c)#exit
Router(config)#

Ahora solo queda aplicar todo en las interfases que sean necesarias:

Formato:

Router(config)#interface NombreInterfase
Router(config-if)#service-policy {input | output} NombreDeLaPolicyMap
Router(config)#exit

Ejemplo:

Router(config)#interface FastEthernet0/0
Router(config-if)#service-policy input TraficoInternet
Router(config-if)#service-policy output TraficoInternet
Router(config-if)#exit

Ejemplo completo de la config del diagrama de arriba:


Router#sh run
Building configuration...
Current configuration : 3501 bytes
!
version 12.2
service timestamps debug uptime
service timestamps log uptime
service password-encryption
!
hostname Router
!!
ip subnet-zero
ip cef
!!
ip name-server 209.165.201.1
ip name-server 209.165.201.2
!
ip audit notify log
ip audit po max-events 100
!!
class-map match-all VlanServidores
match access-group 20
class-map match-all VlanAbonados
match access-group 10
class-map match-all VlanEmpresaA
match access-group 31
class-map match-all VlanEmpresaB
match access-group 32
class-map match-any P2P
description Protocolos Basura
match protocol fasttrack
match protocol gnutella
match protocol napster
match protocol netbios
match protocol emule
match protocol ares
match protocol bittorrent
class-map match-all VlanEmpleados
match access-group 30
!!
policy-map TraficoSaliente
description Trafico Saliente
class VlanAbonados
police 2000000 62500 62500 conform-action transmit exceed-action drop
class VlanServidores
police 2000000 4000000 4500000 conform-action transmit exceed-action transmit violate-action drop
class VlanEmpleados
police 1000000 2000000 2000000 conform-action transmit exceed-action transmit violate-action drop
class VlanEmpresaA
police 1000000 31250 31250 conform-action transmit exceed-action drop
class VlanEmpresaB
police 256000 8000 8000 conform-action transmit exceed-action drop
class P2P
police 8000 1500 1500 conform-action drop exceed-action drop violate-action drop
class class-default
police 8000 1500 1500 conform-action drop exceed-action drop violate-action drop
policy-map TraficoEntrante
description Trafico Entrante
class VlanAbonados
police 2000000 62500 62500 conform-action transmit exceed-action drop
class VlanServidores
police 2000000 4000000 4500000 conform-action transmit exceed-action transmit violate-action drop
class VlanEmpleados
police 1000000 2000000 2000000 conform-action transmit exceed-action transmit violate-action drop
class VlanEmpresaA
police 1000000 31250 31250 conform-action transmit exceed-action drop
class VlanEmpresaB
police 256000 8000 8000 conform-action transmit exceed-action drop
class P2P
police 8000 1500 1500 conform-action drop exceed-action drop violate-action drop
class class-default
police 8000 1500 1500 conform-action drop exceed-action drop violate-action drop
!!!
interface FastEthernet0/0
description Interfase al Switch de Core
no ip address
duplex auto
speed auto
!
interface FastEthernet0/0.10
description VLAN10: Abonados de Internet (2mbps)
bandwidth 2000
ip address 200.200.10.1 255.255.255.0
!
interface FastEthernet0/0.20
description VLAN20: Red de Servidores (2mbps)
bandwidth 2000
ip address 200.200.20.1 255.255.255.0
!
interface FastEthernet0/0.30
description VLAN30: Empleados (1mbps)
bandwidth 1000
ip address 192.168.30.1 255.255.255.0
!
interface FastEthernet0/0.31
description VLAN31: Empresa A (1mbps)
bandwidth 1000
ip address 200.200.30.1 255.255.255.248
!
interface FastEthernet0/0.32
description VLAN32: Empresa B (256 kbps)
bandwidth 256
ip address 200.200.30.9 255.255.255.248
!
interface Serial0/0
bandwidth 10000000
ip address 200.43.64.97 255.255.255.224
service-policy input TraficoEntrante
service-policy output TraficoSaliente
!
ip classless
no ip http server
!
access-list 10 permit 200.200.10.0 0.0.0.255
access-list 20 permit 200.200.20.0 0.0.0.255
access-list 30 permit 192.168.30.0 0.0.0.255
access-list 31 permit 200.200.30.0 0.0.0.7
access-list 32 permit 200.200.30.8 0.0.0.7
!
line con 0
line aux 0
line vty 0 4
login
!
end

Más adelante escribiré algun material más profesional para que podamos manejar el QOS, pero hasta tanto, espero que les sirva esta breve intro.

Saludos

11 comentarios:

Victor Espinosa dijo...

Muchas gracias por la ayuda, lo probaré

Guillermo dijo...

Hola, queria saber que IOS necesito para poder filtar cualquier cliente P2P.

Ariel Weher dijo...

Estimado Guillermo:

Puedes llevar a cabo esta tarea de muchas formas distintas, ya sea usando access-lists que permitan solo los puertos bien conocidos o bien usando NBAR.
En cuanto al último, te cuento que yo lo usé en varias plataformas, desde un 2600 en adelante ya lo puedes usar -incluso con IOS viejos-, pero debes tener en cuenta ciertas cosas:
Debes actualizar los protocolos de NBAR con los archivos PDLM que se bajan del sitio de Cisco
El uso de NBAR hace que el router vea el payload de los paquetes antes de enviarlos, y esto se realiza por software por lo que el rendimiento se ve afectado seriamente
Siempre van a seguir funcionando las aplicaciones P2P que encripten la información

Consultame nuevamente si es que te quedan dudas.

Saludos

Christian dijo...

Interesante pero una duda que hasta ahora no puedo despejar es porque se controla el trafico de salida?, acaso no es el trafico de entrada el cual se debe controlar, me refiero a que yo quiero que toooodo el trafico p2p, tenga un ancho de banda de un 1%, eso quiere decir que los paquetes que llegan se descartaran cumpliendo esta norma y asi no me deja lenta la linea. Acaso asi no deberia controlarse?
Gracias!!

Ariel Weher dijo...

En realidad en todos los casos la limitación va a ser en la salida de las interfaces. Vos podés hacer policing a la entrada para -por ejemplo- decir que paquetes procesas antes que otros, pero no para decir cuantos paquetes por segundo llegan dado que eso varía de acuerdo al emisor.
No es raro suponer que yo solo puedo limitar lo que envío y no lo que recibo. En todo caso si tengo un equipo con dos interfaces, una hacia internet y otra hacia la LAN, la subida hacia la LAN termina siendo la bajada de los usuarios.
Espero haber despejado tu duda.

Saludos

El Chapa dijo...

Buenas, soy reciente lector del blog y aprovecho a felicitarte. Articulos muy lindos y bien explicados.

Te planteo un posible error en el esquema de QoS, puntualmente en el MATCH de las CLASS para identificar las distintas VLANs:

Tanto para el trafico entrante como el saliente estas usando la misma ACL standard que considera ORIGENES IP. Al aplicar en el trafico entrante dicha ACL para la CLASS asociada a una VLAN, no matchearias porque la distincion en este sentido la haces sobre IP DESTINO (internet hacia tus VLANS) y las sentencias solo miran ORIGEN, por lo que no tendrias policy alguno en este sentido.

Si hay un error conceptual, pido disculpas.
Abrazo desde Arequito!

Anónimo dijo...

en donde redefino los access list por rango de direcciones???

Anónimo dijo...

Hola, UN fAVOR NO podras dejar el ejercio realizado porque ya no intente realizar pero no me sale no se en que me falla realizo los puntos pero me fallan las vlan

Anónimo dijo...

me podrian ayudar explicandome lo de las rafagas??

GoDDeSS dijo...

Me has ayudado a entender las QoS pues tengo una configuracion extensa y dificil.

Ricardo dijo...

gracias por la informcion

Publicar un comentario