martes, 5 de noviembre de 2013

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

No hay comentarios:

Publicar un comentario