Mostrando entradas con la etiqueta ios. Mostrar todas las entradas
Mostrando entradas con la etiqueta ios. Mostrar todas las entradas

miércoles, 11 de agosto de 2010

Usar un router como servidor DNS

Esto es una cosa bastante extraña, pero nos puede ayudar en muchos laboratorios y prácticas donde necesitamos jugar con la resolución de nombre a IP y viceversa.

Yo no recomiendo usar esto en un entorno de producción dado que varias fallas se han publicado alrededor de los servicios de DNS y el router no debería proveerlos salvo en determinados escenarios o bien por razones de fuerza mayor.

La configuración es muy sencilla, y vamos a crear el dominio capaocho.net, donde tenemos el router servidor DNS con la ip 172.19.25.229 y el cliente con la 172.19.25.230.

Habilitamos el servicio y declaramos el registro SOA del dominio:
ip dns server
ip dns primary capaocho.net soa dns-server.capaocho.net 
[email protected] 86400 3600 864000 86400

Ahora configuramos los RR

! El DNS
ip host capaocho.net ns dns-server.capaocho.net.
! Los servidores de mails con sus prioridades
ip host capaocho.net mx 10 mx1.capaocho.net.
ip host capaocho.net mx 20 mx2.capaocho.net.
! La ip del router/servidor DNS
ip host dns-server.capaocho.net 172.19.25.229
! Los registros A de los servidores de mails
ip host mx1.capaocho.net 192.0.2.10
ip host mx2.capaocho.net 192.0.2.11

Para usar el servicio de cliente de dns en un router usamos:

ip name-server 172.19.25.229
ip domain-lookup

Probamos...

DNS-Client#ping dns-server.capaocho.net
Translating "dns-server.capaocho.net"...domain server (172.19.25.229) [OK]

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.19.25.229, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/5/8 ms

DNS-Client#ping mx1.capaocho.net

Translating "mx1.capaocho.net"...domain server (172.19.25.229) [OK]

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.0.2.10, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/8/12 ms

Y en el server vemos las estadísticas:

DNS-Server#show ip dns statistics 
DNS requests received = 4 ( 4 + 0 )
DNS requests dropped  = 0 ( 0 + 0 )
DNS responses replied = 4 ( 4 + 0 )

Espero que les sea de utilidad para sus prácticas.

Saludos!

miércoles, 14 de julio de 2010

Por una licencia de IOS con fines educativos...

Como muchos sabemos, Cisco lanzó hace un tiempo la versión 15 de su sistema operativo IOS.

Aunque algunas versiones se pueden correr en un 7200, las nuevas solo van en la plataforma ISR que no se puede emular con Dynamips o GNS3.

Entonces nuestro amigo Wendel Odom (que escribe los libros para certificar CCIE) tuvo la idea de hacer una petición para que exista una versión académica de dicho software, y en conjunto con Greg Ferro (autor de uno de los mejores blogs de networking existentes) habilitaron una interfase para firmar el petitorio.

Esta noticia está apareciendo por todos lados y me tomé el trabajo de traducirla en parte para que los estudiantes de habla hispana se enteren del asunto:

A pesar que esta semana marcó el principio del fin para este viejo amigo, con el anuncio del hardware soportado para el IOS 15.1, vemos que únicamente los routers ISR e ISR2 están en la lista.
Por razones de arquitectura, nunca va a ser posible emular estas plataformas en dynamips, entonces hemos alcanzado un punto donde el nuevo software IOS no va a ser usable. Nosotros podemos ejecutar la versión 12.4 en el rango existente de plataformas, 15.0 en la 7200 y nada más.
Hoy en día esto no nos perjudica en nada, salvo que quieras probar la nueva característica de música en espera de la 15.1, pero según pasen los meses, a medida que todo se mueva a la 15.2 y 15.3, entonces el software que vamos a poder ejecutar en dynamips se volverá obsoleto para un montón de funciones.
Los temarios de los exámenes cambiarán, y las características necesarias para el estudio solo existirán en las nuevas versiones, actualizaremos las redes de testing y de producción, pero de a poco dynamips se va a transformar en algo del pasado.
Para aquellos de nosotros que hemos invertido mucho en nuestro propio entrenamiento y equipamiento de laboratorio, no habrá una gran diferencia. El agregar un nuevo par de  1841′s de segunda mano no va a costar una fortuna, a pesar que se va a usar mucha más energía y enfriamiento lo que se necesita para una sola caja dynamips.
Pero el estudiante ordinario de CCNA o CCNP va a tener mucho que comprar, necesitará mucho espacio físico, y deberá soportar altos gastos en energía. Quizás puedan usar labs remotos, pero esto no dan la misma flexibilidad que un laboratorio propio.

Aquí está la página para firmar

Saludos

miércoles, 26 de mayo de 2010

Cambiar secuencia de escape en el CLI de IOS

¿Cuántas veces nos pasó que no podemos cortar un traceroute?

Es común que enseñemos en la academia que la secuencia de escape en IOS es CTRL+SHIFT+6 y que a veces también es necesario tocar la letra X. Esto es todo un problema, sobre todo para los recién iniciados.

Los usuarios generalmente están acostumbrados a que la secuencia de escape sea CTRL+C, por lo que veremos como se cambia en el IOS:

Esta receta funciona tanto para las LINE VTY como para la LINE CON 0 y LINE AUX:

Router(config)# line vty 0 15
Router(config-line)# escape-character 3
Router(config-line)# end
Router#

La explicación de esto es que el caracter ASCII 3 representa el CONTROL+C.

Nos vemos en el próximo TIP.

jueves, 25 de febrero de 2010

IOS y configuraciones resistentes a errores

Un cortito mientras estudio el ISCW...

Siempre que tenemos equipos que se acceden desde muchos lugares o bien son usados para hacer laboratorios nos encontramos con que nos modifican las configuraciones o nos borran los sistemas operativos por lo que nuestro trabajo pasa de optimizar la red e inventar nuevos servicios a restaurar funcionalidad básica.

Cisco nos propone un feature llamado IOS Resilient Configuration que el equipo asegure una copia de la imagen de IOS que está corriendo así como también de la configuración actual.

Para esto, guarda una copia de cada uno de esos elementos en la flash en un directorio oculto que no puede ser accedido por los usuarios.

Algunos datos interesantes acerca de este feature son:

  • La configuración que se guarda es una copia de la running-config al momento en que el feature fue habilitado por primera vez.
  • Puede detectar diferencias en la imágen y en la config.
  • Solamente puede usar storage local, por lo que no puede guardar esto en servidores ftp o tftp remotos.
  • La única forma de deshabilitar el feature es mediante acceso por la consola.
 Se activa muy fácil:

Router(config)#
Router(config)# secure ?
  boot-config  Archive the startup configuration
  boot-image   Secure the running image
Router(config)# secure boot-config 
Router(config)# secure boot-image
Feb 25 2010 18:38:19.298 ART: %IOS_RESILIENCE-5-CONFIG_RESIL_ACTIVE: Successfully secured config archive [disk2:.runcfg-20100225-213818.ar]
Feb 25 2010 18:38:35.202 ART: %IOS_RESILIENCE-5-IMAGE_RESIL_ACTIVE: Successfully secured running image

Ahora podemos probar de hacer un listado de los directorios del disco:

Router# dir /all
Directory of disk2:/

    2  -rw-    39399484  Jan 21 2009 10:35:12 -03:00  c7200-advipservicesk9-mz.124-15.T8.bin

255774720 bytes total (176951296 bytes free)

Epa... no aparecen... probemos otra cosa...

Router# show secure bootset
IOS resilience router id 23672497

IOS image resilience version 12.4 activated at 18:38:34 ART Thu Feb 25 2010
Secure archive disk2:cisco2-C7200 type is image (elf) []
  file size is 39399460 bytes, run size is 39565104 bytes
  Runnable image, entry point 0x80008000, run from ram

IOS configuration resilience version 12.4 activated at 18:38:19 ART Thu Feb 25 2010
Secure archive disk2:.runcfg-20100225-213818.ar type is config
configuration archive size 8467 bytes

¿Cómo recupero los archivos se me los borran?

Tento que entrar al rom monitor (el ramón para los amigos) ejecutando la secuencia de control+break durante el arranque del equipo. Desde ahí sí se puede ver el bootset con los archivos.

rommon 1> dir disk2:

Ahi vas a ver la imagen de IOS asegurada que luego vas a poder bootear:

rommon 2> boot disk2:cisco2-C7200

El equipo va a arrancar, pero la configuración inicial no está, por lo que intentará arrancar el modo setup, le ponemos que no y ejecutamos:

Router(config)# secure boot-config restore disk2:.runcfg-20100225-213818.ar
Router(config)# copy disk2:.runcfg-20100225-213818.ar running-config

Voalá y hasta la próxima.

viernes, 5 de febrero de 2010

Viendo caer nuestros equipos

Uno siempre lee acerca de equipos y sistemas operativos que se cuelgan (no voy a dar nombres) y muchas veces esas situaciones nos parecen totalmente ajenas. Sin embargo, hoy voy a dar un tip que no es del todo útil, dado que no mejora la performance ni seguriza nada, sino todo lo contrario: derriba los equipos.

En el caso de cisco no es muy común ver caer los equipos, pero utilizando una suerte de "comando oculto" podemos ver la forma en que caen y se recuperan de los errores.

Este comando oculto se llama test crash y se puede utilizar de la siguiente forma:

Router#test crash
WARNING: Command selections marked with '(crash router)' will crash
         router when issued. However a selection 'C' will need to
         be issued IMMEDIATELY before these selections to enable them.


Type the number for the selected crash:
--------------------------------------
 1  (crash router) Bus Error, due to invalid address access
 2  (crash router) Bus Error, due to parity error in Main memory
 3  (crash router) Bus Error, due to parity error in I/O memory
 4  (crash router) Address Error, due to fetching code from odd address
 5  (crash router) Jump to zero
 6  (crash router) Software forced crash
 7  (crash router) Illegal read of address zero
 8  (crash router) Divide by zero
 9  (crash router) Corrupt memory
 C  Enable crash router selection marked with (crash router)
 R  (crash router) User enter read bus error address
 U  (crash router) User enter write bus error address
 W  (crash router) Software watchdog timeout (*** Watch Dog Timeout ***)
 w  (crash router) Process watchdog timeout (SYS-2-WATCHDOG)
 d  Disable crashinfo collection
 e  Enable crashinfo collection
 i  Display contents of current crashinfo flash file
 m  Write crashinfo on crashinfo RAM
 n  Change crashinfo flash file name
 q  Exit crash menu
 s  Save crashinfo to current crashinfo flash file
 c  Close current crashinfo flash file
 t  Write crashinfo on console TTY
 x  Exit crash menu
? C                                                                     


Type the number for the selected crash:
-------------------------------------- 
 1  (crash router) Bus Error, due to invalid address access
 2  (crash router) Bus Error, due to parity error in Main memory
 3  (crash router) Bus Error, due to parity error in I/O memory 
 4  (crash router) Address Error, due to fetching code from odd address
 5  (crash router) Jump to zero                                        
 6  (crash router) Software forced crash                               
 7  (crash router) Illegal read of address zero                        
 8  (crash router) Divide by zero                                      
 9  (crash router) Corrupt memory                                      
 C  Enable crash router selection marked with (crash router)           
 R  (crash router) User enter read bus error address                   
 U  (crash router) User enter write bus error address                  
 W  (crash router) Software watchdog timeout (*** Watch Dog Timeout ***)
 w  (crash router) Process watchdog timeout (SYS-2-WATCHDOG)            
 d  Disable crashinfo collection                                        
 e  Enable crashinfo collection                                         
 i  Display contents of current crashinfo flash file                    
 m  Write crashinfo on crashinfo RAM                                    
 n  Change crashinfo flash file name                                    
 q  Exit crash menu                                                     
 s  Save crashinfo to current crashinfo flash file                      
 c  Close current crashinfo flash file                                  
 t  Write crashinfo on console TTY                                      
 x  Exit crash menu                                                     
? 6                                                                     
Causing a software forced crash...                                      


 10:44:18 UTC Fri Feb 5 2010: Breakpoint exception, CPU signal 5, PC = 0x6078406C



--------------------------------------------------------------------
   Possible software fault. Upon reccurence,  please collect        
   crashinfo, "show tech" and contact Cisco Technical Support.      
--------------------------------------------------------------------


-Traceback= 0x6078406C 0x60254650 0x61366294 0x6138C3B4 0x626264B8 0x6262649C 
$0 : 00000000, AT : 654E0000, v0 : 00000049, v1 : 000000A7                    
a0 : 651A5158, a1 : 00000320, a2 : 63D143E8, a3 : 66ED5C38                    
t0 : 66ED5C38, t1 : 6590FE60, t2 : 927C0000, t3 : 00000000                    
t4 : 000008B7, t5 : 00000F3B, t6 : 00000000, t7 : 00000000                    
s0 : 64CA0000, s1 : 0000003C, s2 : 00000036, s3 : 653D0000                    
s4 : 66F08DB0, s5 : 64CA0000, s6 : 6597DAD8, s7 : 64CA0000                    
t8 : 6640BE78, t9 : 0000B798, k0 : BFC003E0, k1 : 0000FF00                    
gp : 65068FA8, sp : 66F08D98, s8 : 648E0000, ra : 60254650                    
EPC  : 6078406C, ErrorEPC : 00000000, SREG     : 3400FF03                     
MDLO : 00000000, MDHI     : 00000000, BadVaddr : 00000000                     
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000               
Cause 00000024 (Code 0x9): Breakpoint exception

File bootflash:crashinfo_20100205-104418 Device Error :Bad device info block
File disk0:crashinfo_20100205-104418 Device Error :Invalid DOS media or no media in slot
File disk1:crashinfo_20100205-104418 Device Error :No device available
File slot0:crashinfo_20100205-104418 Device Error :Bad device info block
File slot1:crashinfo_20100205-104418 Device Error :No such device
File bootflash:crashinfo_20100205-104418 Device Error :Bad device info block
File disk0:crashinfo_20100205-104418 Device Error :Invalid DOS media or no media in slot
File disk1:crashinfo_20100205-104418 Device Error :No device available
File slot0:crashinfo_20100205-104418 Device Error :Bad device info block
File slot1:crashinfo_20100205-104418 Device Error :No such device
File bootflash:crashinfo_20100205-104418 Device Error :Bad device info block

 10:44:18 UTC Fri Feb 5 2010: Breakpoint exception, CPU signal 5, PC = 0x6078406C



--------------------------------------------------------------------
   Possible software fault. Upon reccurence,  please collect
   crashinfo, "show tech" and contact Cisco Technical Support.
--------------------------------------------------------------------


-Traceback= 0x6078406C 0x60254650 0x61366294 0x6138C3B4 0x626264B8 0x6262649C
$0 : 00000000, AT : 654E0000, v0 : 00000049, v1 : 000000A7
a0 : 651A5158, a1 : 00000320, a2 : 63D143E8, a3 : 66ED5C38
t0 : 66ED5C38, t1 : 6590FE60, t2 : 927C0000, t3 : 00000000
t4 : 000008B7, t5 : 00000F3B, t6 : 00000000, t7 : 00000000
s0 : 64CA0000, s1 : 0000003C, s2 : 00000036, s3 : 653D0000
s4 : 66F08DB0, s5 : 64CA0000, s6 : 6597DAD8, s7 : 64CA0000
t8 : 6640BE78, t9 : 0000B798, k0 : BFC003E0, k1 : 0000FF00
gp : 65068FA8, sp : 66F08D98, s8 : 648E0000, ra : 60254650
EPC  : 6078406C, ErrorEPC : 00000000, SREG     : 3400FF03
MDLO : 00000000, MDHI     : 00000000, BadVaddr : 00000000
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
Cause 00000024 (Code 0x9): Breakpoint exception

-Traceback= 0x6078406C 0x60254650 0x61366294 0x6138C3B4 0x626264B8 0x6262649C


=== Flushing messages (10:44:18 UTC Fri Feb 5 2010) ===

Buffered messages:

*Feb  5 10:42:15.167: %LINEPROTO-5-UPDOWN: Line protocol on Interface VoIP-Null0, changed state to up
*Feb  5 10:42:15.171: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down
*Feb  5 10:42:15.171: %LINEPROTO-5-UPDOWN: Line protocol on Interface IPv6-mpls, changed state to up
*Feb  5 10:42:16.171: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down
*Feb  5 10:42:17.503: %SYS-5-RESTART: System restarted --
Cisco IOS Software, 7200 Software (C7200-ADVIPSERVICESK9-M), Version 12.4(11)T2, RELEASE SOFTWARE (fc4)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2007 by Cisco Systems, Inc.
Compiled Tue 01-May-07 04:19 by prod_rel_team

De más está decir que se debe usar en equipos que no estén en producción... después no me culpen si bajaron su red por usarlo en cualquier lado.

Salute!

jueves, 3 de septiembre de 2009

Redundancia de Gateway con HSRP

Muchas veces hablamos acerca de la necesidad de tolerancia a fallos en nuestras redes, hablamos de disponer de equipos y enlaces redundantes.

Pero una vez que obtenemos los recursos en base doble nos encontramos con que no es fácil sincronizar todo de manera que el usuario final no se de cuenta de que algo falló en la red.

En este post voy a tratar uno de los conceptos más básicos de tolerancia a fallos, en donde nos situamos lo más cerca posible al usuario final.

Si contamos con dos equipos con salida a la WAN o a Internet, es coherente decidir que las puertas de enlace de los clientes se configuren mitad con un router y mitad con el otro, tal cual vemos en el siguiente diagrama:
Sin embargo esta política genera una carga administrativa importante, dado que hay que llevar el conteo de la cantidad de equipos que usan cada router y además no existe la tolerancia a fallas.

Si R1 o R2 dejan de funcionar, todos los clientes que apunten hacia dicho equipo perderán conectividad con el resto de la red.
Ahora bien, Cisco creó el "Hot Standby Router Protocol" (HSRP), definido en la RFC2281 en donde entre los dos equipos se crea una IP virtual que puede ser usada como default gateway de los clientes.

Los routers que ejecutan HSRP envían mensajes anunciandose mediante UDP con puerto 1985 a la dirección multicast 224.0.0.2 (todos los routers). La dirección IP virtual se asocia con una dirección MAC bien conocida con el formato 00:00:0C:07:AC:XX donde XX es el número de grupo que identifica a la IP virtual.

Este protocolo se configura por interfase, por lo que podemos tener varios grupos en cada una de las interfases para brindar redundancia simultánea a varios segmentos de la red.

Si el router que está en el rol de Activo pierde conectividad o queda fuera de servicio, el vecino que está en modo Standby automáticamente toma su lugar (se asocia con la MAC y la IP virtual) haciendo que el cambio sea transparente a los clientes de la red involucrada.
Su configuración es muy sencilla, y basta poner un par de comandos que en la forma más básica son:
Modo de configuración de interfase:
standby numero_de_grupo ip direccion_ip_virtual
!En R1:
interface FastEthernet 0/0
ip address 192.168.1.1 255.255.255.0
standby 1 ip 192.168.1.3

!En R2:
interface FastEthernet 0/0
ip address 192.168.1.2 255.255.255.0
standby 1 ip 192.168.1.3

Como vemos un solo comando basta para ponerlo a funcionar.

Veamos el estado del protocolo:

R1#show standby
FastEthernet0/0 - Group 1
   Local state is Standby, priority 100
Hellotime 3 holdtime 10
Next hello sent in 0:00:00
Hot standby IP address is 192.168.1.3 configured
   Active router is 192.168.1.2 expires in 0:00:07
   Standby router is local

R2#show standby
FastEthernet0/0 - Group 1
   Local state is Active, priority 100
Hellotime 3 holdtime 10
Next hello sent in 0:00:02
Hot standby IP address is 192.168.1.3 configured
   Active router is local
   Standby router is 192.168.1.1 expires in 0:00:09


Este protocolo posee varias herramientas que son muy útiles al momento de decidir por donde pasa el tráfico de los clientes. Configurando priorities y tracking de interfases podemos hacer por ejemplo que un router no se vuelva activo si no tiene determinadas interfaces levantadas, para no crear un blackhole que descarte el tráfico pro no poder enviarlo a la WAN.

La idea del post es incentivar a que salgan preguntas e ideas acerca de HSRP, y más adelante utilizaremos las opciones más avanzadas para seguir profundizando en este protocolo.

Saludos

jueves, 28 de mayo de 2009

Show Interface

Este post viene dado porque muy seguido suelo preguntar a mis colegas si me saben explicar línea por línea la salida de un show interface de IOS.

Parece tonto, pero en realidad es muy dificil, dado que se necesita conocimiento de varias áreas como para comprender toda la información que este comando nos brinda.

Yo intenté hacer un rejunte de información (propia y externa) para tratar de explicar de forma sencilla cada linea del comando show interface serial.

Ahora bien, lo escribí en el Wiki porque pienso seguir ampliando con la salida de una interfaz Ethernet y una ATM.

Podemos ver el paper en: http://wiki.capaocho.net/doku.php/showinterface

Espero que les sirva

Saludos!

martes, 26 de mayo de 2009

Segurizar equipos Cisco

Mucha gente pregunta a diario sobre tips e ideas acerca de cual debería ser el set de features habilitados en un equipo para que este sea 'seguro'.

Obviamente ningún host que sea accesible públicamente desde cualquier parte de la red va a ser seguro en un 100%, pero es nuestra tarea el tratar de que nuestra red sea lo más restrictiva posible -sin perder funcionalidad- para que se le complique la vida a los atacantes.

Hace unos días me puse a recopilar una serie de trucos que fui encontrando en distintos sitios, sobre todo en el site de Cisco. La idea fue hacer un resúmen y obviamente traducirlo al español.

Dado que seguramente surgirán dudas, inquietudes e incluso nuevas ideas que no están publicadas no voy a hacer un post de blog como es habitual, sino que armé un Wiki en donde está el contenido en cuestión.

Esta página va a ser un borrador contínuo, dado que la idea es que siga creciendo a medida que vayamos descubriendo nuevas técnicas para mejorar la seguridad de nuestra red.

Ahora sí, les dejo la url y quedo a la espera de sus comentarios:

http://wiki.capaocho.net/doku.php/ciscohardening

Saludos

viernes, 15 de mayo de 2009

Guardar running-config en un servidor externo

Muchas veces tenemos la necesidad de hacer una copia de la configuración para guardarla en un lugar seguro.

En este breve ejemplo vamos a aprovechar algunos features del IOS 12.3 para:
  1. Al momento de grabar la configuración, que se copie automáticamente en un servidor externo.
  2. Que se guarde la configuración todos los días a una hora en particular.

Dado que esto es un tip como para -copiar y pegar- voy directamente al grano:

Para guardar una copia de la config en un servidor FTP al momneto de hacer copy running-config startup-config pegamos los siguientes comandos en el modo de configuración global (conf t):
archive
path ftp://usuario:[email protected]/$h-$t
write-memory

Las variables $h y $t representan el hostname y la hora, por ejemplo quedarían archivos llamados
Router-Mar--4-00:05:40.732-UTC

Ahora vamos a hacer que la config y sus respectivos backups se graben todos los dias a las 00:05:
kron occurrence daily-config-backup at 0:05 recurring
policy-list backup-config
!
kron policy-list backup-config
cli write memory
!

Espero que les sea de utilidad.

Saludos

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

Configurar grupos de interfases en switches con IOS

Varias veces me ha pasado que necesito configurar un switch de acceso y debo definir parámetros iguales en todos los puertos, como por ejemplo la vlan de acceso, la velocidad, el spanning-tree, etc.

En un principio uno haría un copy paste de la config o bien escribiría a mano todo.

Lo mismo pasa también al momento de levantar un etherchannel en donde todas las interfaces involucradas deben poseer la misma configuración, pero tenemos el requerimiento de hacer esta config extremadamente rápido para que no se caigan los enlaces, cosa que siempre termina pasando.

Para esto, podemos usar el parámetro range, que se usa de la siguiente forma:

sábado, 21 de marzo de 2009

Reiniciar la configuracion de una interfase en IOS

Muchas veces tenemos alguna interface configurada que ya no se usa y debemos quitar la configuración, ya sea para dejarla en shutdown o bienpara reutilizarla para otra tarea.

Lo primero que se nos viene a la mente es mirar la configuración que tiene puesta y luego ejecutar un 'no' antes de cada línea:

miércoles, 18 de marzo de 2009

Autenticación local de usuarios en IOS

Este es otro artículo que contiene algo bastante viejo, pero que no todo el mundo usa.

Como sabemos para entrar por consola/vty al IOS de un equipo cisco solo hace falta ingresar el password de usuario no privilegiado sin tener en cuenta un nombre de usuario.

miércoles, 11 de marzo de 2009

Limitar tamaño del AS-PATH en BGP

Tal cual como expliqué en este post, hace un par de semanas se descubrió un bug de BGP que trajo problemas en internet a nivel mundial.

En este nuevo post vamos a ver como podríamos prevenir de que nos pase (de nuevo) el mismo problema.

Como siempre, Cisco tenía en su IOS un feature que no acepta updates que contengan un AS-PATH más largo que el valor configurado, pero evidentemente nadie lo usaba. Hoy vamos a aprender a usarlo:

Tengamos en cuenta el siguiente caso:





Obviamente estamos analizando un caso simplificado y no representa el backbone de internet de ninguna forma.

Resulta que BuenosAires tiene dos redes para publicar:
  • 192.168.100.0/24
  • 192.168.50.0/24

El administrador novato que trabaja en este sistema autónomo decide que quiere hacer más largo el AS-PATH de la red 192.168.50.0/24 para que el tráfico llegue por otro enlace (que no está dibujado) distinto del que lo vincula con el Router Rosario.

Veamos las configuraciones iniciales de los equipos:

BuenosAires:


!
interface Loopback0
description Red para publicar
ip address 192.168.100.1 255.255.255.0
!
interface Loopback1
description Red para publicar con AS-PATH largo
ip address 192.168.50.1 255.255.255.0
!
interface Serial1/0
description Enlace a Rosario
ip address 192.168.1.1 255.255.255.252
serial restart-delay 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
network 192.168.50.0
network 192.168.100.0
neighbor 192.168.1.2 remote-as 200
neighbor 192.168.1.2 description Rosario
neighbor 192.168.1.2 password 100200
neighbor 192.168.1.2 version 4
neighbor 192.168.1.2 soft-reconfiguration inbound
 neighbor 192.168.1.2 route-map Cambiar-ASPATH-a-10 out
no auto-summary
!
access-list 10 permit 192.168.50.0 0.0.0.255
!
route-map Cambiar-ASPATH-a-10 permit 10
match ip address 10
set as-path prepend 100 100 100 100 100 100 100 100 100 100
!
route-map Cambiar-ASPATH-a-10 permit 20
!

Rosario:


!
interface Serial1/0
description Enlace a BuenosAires
ip address 192.168.1.2 255.255.255.252
serial restart-delay 0
!
interface Serial1/1
description Enlace a Cordoba
ip address 192.168.1.5 255.255.255.252
serial restart-delay 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 192.168.1.1 remote-as 100
neighbor 192.168.1.1 description Peering con BuenosAires
neighbor 192.168.1.1 password 100200
neighbor 192.168.1.1 version 4
neighbor 192.168.1.1 soft-reconfiguration inbound
neighbor 192.168.1.6 remote-as 300
neighbor 192.168.1.6 description Peering con Cordoba
neighbor 192.168.1.6 password 200300
neighbor 192.168.1.6 version 4
neighbor 192.168.1.6 soft-reconfiguration inbound
no auto-summary
!

Cordoba


!
interface Serial1/0
description Enlace a Rosario
ip address 192.168.1.6 255.255.255.252
serial restart-delay 0
!
router bgp 300
no synchronization
bgp log-neighbor-changes
neighbor 192.168.1.5 remote-as 200
neighbor 192.168.1.5 description Rosario
neighbor 192.168.1.5 password 200300
neighbor 192.168.1.5 version 4
neighbor 192.168.1.5 soft-reconfiguration inbound
no auto-summary
!

Como vemos no hay nada extraño, salvo las configuraciones básicasde BGP  (sin filtrado de rutas) en cada equipo, salvo en BuenosAires donde aplicamos un Route-Map a las actualizaciones salientes para cambiar el AS-PATH de la red 192.168.50.0/24.

Ahora vamos a ver las tablas de enrutamiento y de BGP de todos los equipos.

BuenosAires:


BuenosAires#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

C    192.168.50.0/24 is directly connected, Loopback1
192.168.1.0/30 is subnetted, 1 subnets
C       192.168.1.0 is directly connected, Serial1/0
C    192.168.100.0/24 is directly connected, Loopback0

BuenosAires#show ip bgp
BGP table version is 3, local router ID is 192.168.100.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.50.0     0.0.0.0                  0         32768 i
*> 192.168.100.0    0.0.0.0                  0         32768 i

Rosario:


Rosario#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

B    192.168.50.0/24 [20/0] via 192.168.1.1, 00:02:00
192.168.1.0/30 is subnetted, 2 subnets
C       192.168.1.0 is directly connected, Serial1/0
C       192.168.1.4 is directly connected, Serial1/1
B    192.168.100.0/24 [20/0] via 192.168.1.1, 00:02:00

Rosario#show ip bgp
BGP table version is 3, local router ID is 192.168.1.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.50.0     192.168.1.1              0             0 100 100 100 100 100 100 100 100 100 100 100 i
*> 192.168.100.0    192.168.1.1              0             0 100 i

Cordoba:


Cordoba#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

B    192.168.50.0/24 [20/0] via 192.168.1.5, 00:02:43
192.168.1.0/30 is subnetted, 1 subnets
C       192.168.1.4 is directly connected, Serial1/0
B    192.168.100.0/24 [20/0] via 192.168.1.5, 00:02:43
Cordoba#
Cordoba#show ip bgp
BGP table version is 3, local router ID is 192.168.1.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.50.0     192.168.1.5                            0 200 100 100 100 100 100 100 100 100 100 100 100 i
*> 192.168.100.0    192.168.1.5                            0 200 100 i

Vemos que en Cordoba el AS-PATH tiene un largo importante, y si BuenosAires llegase a publicar rutas con un AS-PATH extremadamente largo se produciría el bug que vimos en el post anterior.

Aquí el administrador podría resolver esto de dos formas:
  1. Configurar el comando global bgp maxas-limit.
  2. Configurar un AS-PATH Access-List por cada peer que tenga.

Es evidente que la segunda opción es la más granular, pero no puede ser utilizada siempre porque puede implicar que se cambie la forma de filtrar rutas y establecer políticas. Además debe hacerse en cada vecino de BGP que tengamos, lo que puede resultar engorroso.

Vamos a configurar el maxas-limit en Rosario para ver que es lo que pasa:
Rosario#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Rosario(config)#router bgp 200
Rosario(config-router)#bgp maxas-limit 5
Rosario(config-router)#end
Rosario#
*Mar 11 15:24:36.003: %BGP-6-ASPATH: Long AS path 100 100 100 100 100 100 100 100 100 100 100 received from 192.168.1.1: More than configured MAXAS-LIMIT

El proceso ha recortado la ruta de la tabla de BGP por exceder el largo de AS-PATH permitido en la configuración. Podemos ver los resultados de este comando:

BuenosAires:


BuenosAires#show ip bgp
BGP table version is 3, local router ID is 192.168.100.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.50.0     0.0.0.0                  0         32768 i
*> 192.168.100.0    0.0.0.0                  0         32768 i

Rosario:


Rosario#show ip bgp
BGP table version is 4, local router ID is 192.168.1.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.100.0    192.168.1.1              0             0 100 i

Cordoba:

Cordoba#show ip bgp
BGP table version is 4, local router ID is 192.168.1.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network       Next Hop     Metric LocPrf Weight Path
*> 192.168.100.0 192.168.1.50                      200 100 i
En Rosario tuvimos un aviso de que se descartó de la ruta, y por ende no se la anunció a Cordoba.

Con este sencillo comando podemos proteger nuestros equipos del desastre, hasta que el parche para el mismo sea liberado.

Espero que este post les haya servido.

Saludos!

lunes, 16 de febrero de 2009

El comando "do"

Este truco ya es viejo, pero aún en día veo gente que no lo sabe y termina escribiendo de mas:

¿Cuántas veces nos pasó al levantar un enlace nuevo y al instante queremos probarlo?. Lo habitual es que pase esto:
Tijuanero#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Tijuanero(config)#interface g1/0
Tijuanero(config-if)#ip address 10.0.0.1 255.255.255.0
Tijuanero(config-if)#no shutdown
*Feb 16 17:51:19.643: %LINK-3-UPDOWN: Interface GigabitEthernet1/0, changed
e to up
Tijuanero(config-if)#ping 10.0.0.2
^
% Invalid input detected at '^' marker.

El apuro nos nubla el cerebro y no podemos apretar Ctrl+Z para volver al modo privilegiado!!!.

martes, 10 de febrero de 2009

John Nagle

Este señor hizo un algorimo que está documentado en la RFC896 y habla del control de congestión y del problema de los paquetes pequeños en las redes TCP/IP.

Este algoritmo debe activarse en los routers para mejorar en general el rendimiento de las sesiones telnet ya sean entrantes o salientes.