martes, 5 de noviembre de 2013

Captura de tráfico en un Switch Cisco


Bien sabemos que cuando un switch tiene completa las tablas de direcciones MAC la conmutación de unicast se hace puerto a puerto entre el origen y el destino de la información, esto permite que las comunicaciones sean extremadamente rápidas y que el ancho de banda sea dedicado entre los dos equipos intervinientes.

Esta es una de las ventajas que poseen los switches con respecto a los hubs. Pero sin embargo y casi sin querer logramos otro efecto positivo para la red.


Dado que las comunicaciones son punto a punto, en teoría no hay posibilidad de que un equipo pueda recibir tramas que no estén destinadas a el, con el consiguiente beneficio en la seguridad.


En este caso si conectamos un dispositivo destinado a analizar los paquetes que se envían los equipos, este nunca recibirá tráfico salvo que esté explícitamente destinado a su dirección MAC.

Para solucionar este inconveniente, los switches implementan una tecnología de mirroring o espejado, en donde la información que se trasmite hacia/desde los equipos que se quieren analizar se conmuta normalmente pero también se envía una copia al puerto donde se encuentra enchufado el equipo de análisis.


Cuando hablamos de Switches Cisco, esta tecnología se llama SPAN (SwitchPort ANalyzer) o bien como Monitor Session, y puede dirigir el tráfico que se origina en un puerto físico o en una VLAN hacia un puerto destino donde se encuentra conectado -por ejemplo- un IDS.

Algunas consideraciones para tener en cuenta:
  • El puerto de destino no soporta determinados protocolos de capa 2 (DTP, VTP, CDP, STP).
  • Tampoco soporta determinados features de seguridad (802.1X, pVLAN).
  • El ancho de banda del puerto de destino debe soportar la sumatoria de la cantidad de datos que se generan desde los puertos de origen. No deberíamos capturar el tráfico de 5 puertos de 100 mbps e intentar copiarlos a un puerto de destino de 100 mbps que se satura rápidamente.
  • Un puerto origen no puede ser a la vez un puerto de destino ni viceversa.
  • Un puerto de destino deja de trabajar como puerto de switch, y solo transmite información de los puertos origen.
  • La sesión de monitoreo solo se activa si los puertos en cuestión están operativos (al menos uno de origen y el de destino).

Vamos a ver un ejemplo de configuración en donde capturaremos el tráfico entrante y saliente del port 5, el saliente del 6 y el entrante del 7. Todo ese tráfico se replicará en el IDS que tenemos instalado en el puerto Gigabit 0/1. Además establecemos otra sesión de monitoreo para el tráfico que se cursa por la vlan 405.

Switch(config)#monitor session 1 source interface FastEthernet 0/5
Switch(config)#monitor session 1 source interface FastEthernet 0/6 tx
Switch(config)#monitor session 1 source interface FastEthernet 0/7 rx
Switch(config)#monitor session 1 destination interface GigabitEthernet 0/1
Switch(config)#monitor session 2 source vlan 405
Switch(config)#monitor session 2 destination interface GigabitEthernet 0/2 

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.
so a jugar con BGP de una forma muy extraña y sin medir las consecuencias de esto.

Trucos para el enrutamiento estático


El enrutamiento estático puede ser una solución muy conveniente para cuando la cantidad de nodos en nuestra red no es tan amplia como para que valga la pena un protocolo dinámico. Pero puede transformarse en un verdadero dolor de cabeza en caso de que no tengamos en cuenta determinadas pautas.

Veamos el siguiente diagrama:



Supongamos que en esta red WAN todos los vínculos entre equipos son del mismo ancho de banda y tienen la misma tasa de error y confiabilidad.

Si tomamos el ejemplo de una comunicación entre Córdoba y Buenos Aires sería prudente realizar enrutamiento estático de tal forma que se balancee la carga entre los tres enlaces que están directamente conectados a ellos. De esta forma, en principio (sin tener en cuenta CEF y otras pautas) podemos decir que cuando sale un paquete desde Córdoba siempre irá por un camino distinto al anterior.

Por ejemplo los paquetes con numeración:
  1. Sale por Tucumán.
  2. Sale por Rosario.
  3. Sale por La Plata.
  4. Sale por Tucumán.
  5. Sale por Rosario.
  6. Sale por La Plata.
  7. [...]

Ahora,  supongamos que se cae el enlace entre Rosario y BsAs, Córdoba no se va a enterar porque no está directamente conectado y no hay un protocolo de enrutamiento que nos avise del fallo. Entonces se seguirá enviando tráfico a Rosario y este último lo descartará por tener el enlace caído.

Por esto podemos decir que 1/3 del tráfico que Córdoba envíe hacia BsAs se va a perder. Esto trae muchos problemas a la red y sus aplicaciones.

Afortunadamente contamos con algunas herramientas para lidiar con este tipo de problema:

La que utilizaremos en este caso se llama IP SLA, y está disponible desde la versión 12.3T de IOS.

La idea es que Córdoba va a estar todo el tiempo tirando un proceso ping a Buenos Aires a través de cada una de las interfases.

Dicho proceso será vinculado a una ruta estática, y por ende cuando un proceso falle se retira la ruta de la tabla automágicamente. A esto se llama 'hacer tracking' a un objeto.

Veamos en principio la configuración de Cordoba  y Buenos Aires:

Router CORDOBA:


interface FastEthernet0/0
description Enlace a Tucuman
ip address 192.168.7.2 255.255.255.252
!
interface FastEthernet0/1
description Enlace a Rosario
ip address 192.168.7.10 255.255.255.252
!
interface FastEthernet1/0
description Enlace a La Plata
ip address 192.168.7.18 255.255.255.252
!
interface FastEthernet1/1
description LAN
ip address 192.168.7.33 255.255.255.224
!
ip route 192.168.7.4 255.255.255.252 192.168.7.1 name TUCUMAN-BAIRES
ip route 192.168.7.12 255.255.255.252 192.168.7.9 name ROSARIO-BAIRES
ip route 192.168.7.20 255.255.255.252 192.168.7.17 name LAPLATA-BAIRES
ip route 0.0.0.0 0.0.0.0 192.168.7.1 name viaTUCUMAN
ip route 0.0.0.0 0.0.0.0 192.168.7.9 name viaROSARIO
ip route 0.0.0.0 0.0.0.0 192.168.7.17 name viaLAPLATA
!

Ahora vamos a configurar el IP SLA en CORDOBA para que detecte las caídas del servicio:

ip sla 1
icmp-echo 192.168.7.6 source-ip 192.168.7.2
ip sla schedule 1 life forever start-time now
ip sla 2
icmp-echo 192.168.7.14 source-ip 192.168.7.10
ip sla schedule 2 life forever start-time now
ip sla 3
icmp-echo 192.168.7.22 source-ip 192.168.7.18
ip sla schedule 3 life forever start-time now

Ahora vinculamos tres objetos track con el ID de IP SLA correspondiente:
track 1 rtr 1 reachability
track 2 rtr 2 reachability
track 3 rtr 3 reachability

Y luego configuramos las rutas estáticas para que sean dependientes de cada track que le corresponda:
ip route 0.0.0.0 0.0.0.0 192.168.7.1 name viaTUCUMAN track 1
ip route 0.0.0.0 0.0.0.0 192.168.7.9 name viaROSARIO track 2
ip route 0.0.0.0 0.0.0.0 192.168.7.17 name viaLAPLATA track 3

Ahora solo hay que dejar que el IP SLA haga su trabajo sacando las rutas estáticas cuando el vecino no sea alcanzable. Obviamente en cualquier momento podemos verificar la configuración:
CORDOBA#show track
Track 1
Response Time Reporter 1 reachability
Reachability is Up
12 changes, last change 10w1d
Latest operation return code: OK
Latest RTT (millisecs) 1
Tracked by:
STATIC-IP-ROUTING 0
Track 2
Response Time Reporter 2 reachability
Reachability is Up
6 changes, last change 15w4d
Latest operation return code: OK
Latest RTT (millisecs) 1
Tracked by:
STATIC-IP-ROUTING 0
Track 3
Response Time Reporter 3 reachability
Reachability is Up
38 changes, last change 1w2d
Latest operation return code: OK
Latest RTT (millisecs) 1
Tracked by:
STATIC-IP-ROUTING 0

También podemos verificar los niveles de SLA que nos dan nuestros proveedores:
CORDOBA#show ip sla statistics details  

Round Trip Time (RTT) for       Index 1
Latest RTT: 1 ms
Latest operation start time: 10:34:54.500 UTC Mon Apr 13 2009
Latest operation return code: OK
Over thresholds occurred: FALSE
Number of successes: 40
Number of failures: 0
Operation time to live: Forever
Operational state of entry: Active
Last time this entry was reset: Never

Round Trip Time (RTT) for       Index 2
Latest RTT: 1 ms
Latest operation start time: 10:34:54.500 UTC Mon Apr 13 2009
Latest operation return code: OK
Over thresholds occurred: FALSE
Number of successes: 35
Number of failures: 5
Operation time to live: Forever
Operational state of entry: Active
Last time this entry was reset: Never

Round Trip Time (RTT) for       Index 3
Latest RTT: 1 ms
Latest operation start time: 10:34:54.500 UTC Mon Apr 13 2009
Latest operation return code: OK
Over thresholds occurred: FALSE
Number of successes: 38
Number of failures: 2
Operation time to live: Forever
Operational state of entry: Active
Last time this entry was reset: Never

Con esta configuración básica podemos ver que el proveedor de WAN que mejor servicio nos da es el correspondiente al SLA 1 (Index 1), que es el que nos provee el enlace contra Tucumán.

La configuración de IP SLA en IOS puede ser tremendamente compleja, y puede permitirnos incluso dejar scripts de configuración que se accionan en caso de algún evento preconfigurado.

Podemos no solamente hacer ping, sino realizar consultas HTTP, DNS y varios más para determinar que el servicio monitoreado está andando bien.

Esta es la config más básica, pero creo que les va a ser muy útil en sus redes.

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

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:
ero#conf t
Enter configuration commands, one per line. End with CNTL/Z.
ero(config)#interface g1/0
nero(config-if)#ip address 10.0.0.1 255.255.255.0
ero(config-if)#no shutdown
*Feb 16 17:51:19.643: %LINK-3-UPDOWN: Interface GigabitEthernet1/0, changed
e to up
ero(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!!!.

Ni hablar de si estamos editando algún tipo de política de enrutamiento, access-list o cualquier cosa que sea un submodo de configuración:
ero(config)#route-map COSA-IMPORTANTE permit 156
ero(config-route-map)#match ip address prefix-list LISTA-PRIVADA 
ero(config-route-map)#set tag 65333
ero(config-route-map)#set ip next-hop ?
  A.B.C.D              IP address of next hop
  dynamic              application dynamically sets next hop
  peer-address         Use peer address (for BGP only)
  recursive            Recursive next-hop
  verify-availability  Verify if nexthop is reachable

¿Cual era el next-hop?... hay que sacarlo de la tabla de enrutamiento... pero... tengo que salir del modo de configuración del route-map... ver la tabla... y luego volver a entrar...
Pare de sufrir amigo!!
Para estos menesteres existe el comando DO:

ero(config-route-map)#do 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 192.168.76.43 to network 0.0.0.0

C    192.168.76.0/24 is directly connected, FastEthernet0/0
     10.0.0.0/24 is subnetted, 1 subnets
C       10.0.0.0 is directly connected, GigabitEthernet1/0
S*   0.0.0.0/0 [1/0] via 192.168.76.43
ero(config-route-map)#set ip next-hop 192.168.76.43ero(config-route-map)#endero#

Siempre que quieras ejecutar un comando estando en un modo de configuración antepone el comando do para que IOS lo ejecute igual.
ero(config-if)#ip address 10.0.0.1 255.255.255.0
ero(config-if)#no shutdown
*Feb 16 17:51:19.643: %LINK-3-UPDOWN: Interface GigabitEthernet1/0, changed
e to up
ero(config-if)#do ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/8/12 ms

ero(config)#cry keyring security
ero(conf-keyring)#do show ip interface brief
Interface                  IP-Address      OK? Method Status     Protocol
FastEthernet0/0            192.168.76.40   YES manual up            up
GigabitEthernet1/0         10.0.0.1        YES manual up            up
SSLVPN-VIF0                unassigned      NO  unset  up            up
Loopback0                  unassigned      YES unset  up            up

El único problema con esto es que no vas a poder autocompletar con la tecla [TAB] ni va tener la ayuda contextual con el ?.  Pero bueno, al fin y al cabo la felicidad nunca es completa.

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 
info@capaocho.net 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.

Configuración de Switch de Frame Relay


Más de una vez me ha pasado que configuro un lab con GNS3 y tengo problemas con los switches de Frame Relay. Las configuraciones se me borran, o bien se cambian los números de DLCI y de puertos.

El problema pasa habitualmente al momento de cargar una topología guardada, por lo que busqué la solución a mis problemas configurando un router como para conmutar frame relay tal cual como hacíamos en la academia CCNA hace varios años atrás.
Nota: La configuración de un dispositivo Cisco como switch Frame Relay no se incluye dentro de los temas de estudio del exámen CCNA.

En este ejemplo vamos a configurar la siguiente topología:

Para el FR-SW en dynamips utilizamos un Cisco 7200 con varias interfaces serie (también se puede con los otros routers más chicos, incluso con un 1700).



Estas son las configuraciones:

FR-SW:


FRSWITCH#show running-config

Building configuration...
!
![config recortada para mejor lectura...]
!
hostname FR-SW
!
frame-relay switching
!
![...]
!
interface Serial1/1
no ip address
 encapsulation frame-relay
serial restart-delay 0
 frame-relay intf-type dce
frame-relay route 100 interface Serial1/2 200
!
interface Serial1/2
no ip address
 encapsulation frame-relay
serial restart-delay 0
 frame-relay intf-type dce
frame-relay route 200 interface Serial1/1 100
!
![sigue la config...]
! 

Los dos nodos que se van a intercomunicar deben configurarse como cualquier otro, ya sea usando la interface física o subinterfaces.

RouterA:


RouterA#show running-config
Building configuration...

Current configuration : 1374 bytes

!
hostname RouterA
!
interface Serial1/0
no ip address
 encapsulation frame-relay
serial restart-delay 0
!
interface Serial1/0.100 point-to-point
ip address 192.168.0.1 255.255.255.252
frame-relay interface-dlci 100
![...]

RouterB:


RouterB#show running-config
Building configuration...

Current configuration : 1374 bytes
!
hostname RouterB
!
![...]
!
interface Serial1/0
no ip address
 encapsulation frame-relay
serial restart-delay 0
!
interface Serial1/0.200 point-to-point
ip address 192.168.0.2 255.255.255.252
frame-relay interface-dlci 200
!

Pruebas de conectividad:


Obviamente podemos verificar que todo esté funcionando correctamente con:
RouterB#ping 192.168.0.1 repeat 15

Type escape sequence to abort.
Sending 15, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!!!!!!!!!!!
Success rate is 100 percent (15/15), round-trip min/avg/max = 16/45/76 ms

RouterB#traceroute 192.168.0.1

Type escape sequence to abort.
Tracing the route to 192.168.0.1

1 192.168.0.1 148 msec 80 msec  68 msec

RouterB#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater

Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID
RouterA          Ser 1/0.200        164           R       7206VXR   Ser 1/0.100

También podemos ver en el switch que el PVC se encuentra en estado SWITCHED:
FR-SW#show frame-relay pvc

PVC Statistics for interface Serial1/1 (Frame Relay DCE)

Active     Inactive      Deleted       Static
Local          0            0            0            0
Switched       1            0            0            0
Unused         0            0            0            0

DLCI = 100, DLCI USAGE = SWITCHED, PVC STATUS = ACTIVE, INTERFACE = Serial1/1

input pkts 91            output pkts 92           in bytes 21257
out bytes 20440          dropped pkts 0           in pkts dropped 0
out pkts dropped 0                out bytes dropped 0
in FECN pkts 0           in BECN pkts 0           out FECN pkts 0
out BECN pkts 0          in DE pkts 0             out DE pkts 0
out bcast pkts 0         out bcast bytes 0
30 second input rate 0 bits/sec, 0 packets/sec
30 second output rate 0 bits/sec, 0 packets/sec
switched pkts 91
Detailed packet drop counters:
no out intf 0            out intf down 0          no out PVC 0
in PVC down 0            out PVC down 0           pkt too big 0
shaping Q full 0         pkt above DE 0           policing drop 0
pvc create time 00:52:08, last time pvc status changed 00:23:16

PVC Statistics for interface Serial1/2 (Frame Relay DCE)

Active     Inactive      Deleted       Static
Local          0            0            0            0
Switched       1            0            0            0
Unused         0            0            0            0

DLCI = 200, DLCI USAGE = SWITCHED, PVC STATUS = ACTIVE, INTERFACE = Serial1/2

input pkts 93            output pkts 91           in bytes 20769
out bytes 21257          dropped pkts 2           in pkts dropped 2
out pkts dropped 0                out bytes dropped 0
in FECN pkts 0           in BECN pkts 0           out FECN pkts 0
out BECN pkts 0          in DE pkts 0             out DE pkts 0
out bcast pkts 0         out bcast bytes 0
30 second input rate 0 bits/sec, 0 packets/sec
30 second output rate 0 bits/sec, 0 packets/sec
switched pkts 92
Detailed packet drop counters:
no out intf 0            out intf down 0          no out PVC 0
in PVC down 0            out PVC down 2           pkt too big 0
shaping Q full 0         pkt above DE 0           policing drop 0
pvc create time 00:51:42, last time pvc status changed 00:23:13



Y que CDP no se interpreta, dado que las tramas se conmutan:
FR-SW#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater

Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID
FRSWITCH#

Espero que lo usen y les sirva tanto como a mí.