VPSs y mas.

miércoles, 23 de septiembre de 2015

Monitoreando IPv4 e IPv6 con sFlow

Introducción
 
Este primer artículo tiene como objetivo presentar de manera práctica cómo monitorear tráfico de una interfaz de red con doble pila configurada (Dual-Stack), IPv6 e IPv4, a través de la tecnología sFlow.
 
sFlow es una tecnología de muestreo de paquetes que se puede implementar en una amplia gama de dispositivos desde equipos de capa 2 hasta equipos de alto desempeño como enrutadores de core. Debido a la incorporación de redes de alta velocidad, el muestreo de paquetes ha sido ampliamente reconocido como la solución más escalable, precisa y completa para el monitoreo de redes.
 
Si bien la metodología de muestreo de paquetes está incrustada dentro del elemento de red (por ejemplo, el enrutador o switch), el análisis de tráfico se realiza realmente en un equipo diferente, normalmente un servidor. Esto permite mayor escalabilidad y capacidad de respuesta en tiempo real sin afectar el desempeño de los enrutadores, especialmente a altas velocidades de tráfico.
 
Los diferentes componentes del sistema sFlow: son el generador sFlow, el agente sFlow, y el colector sFlow:
 
  • El generador de sFlow es el elemento de red que genera muestras de tráfico. La toma de muestras de paquetes se realiza típicamente en hardware para proporcionar un rendimiento a velocidad de cable (wire-speed).
  • El agente sFlow es un proceso de software que se ejecuta como parte del software de gestión de red dentro del elemento de red.  Los agentes sFlow en enrutadores y switches en toda la red envían continuamente un flujos de datagramas sFlow a un colector sFlow centralizado. Los contadores de interfaz y las muestras de flujo se combinan en datagramas sFlow, que requieren muy poco procesamiento. Los datos se empaqueta en datagramas sFlow, que se envían de inmediato en la red. Esto reduce al mínimo la carga en la memoria y procesador de los agentes sFlow .
  • El software colector de sFlow analiza los datagramas recibidos de cada agente sFlow y los presenta en tiempo real, permitiendo la vista de los flujos de tráfico de toda la red. Varias soluciones de colectores y software analizador de sFlow están disponibles comercialmente, así como en software libre.
 
La definición de flujos de tráfico a través de esta tecnología se puede realizar de numerosas maneras. Tradicional implica una clave en que el flujo se define como una secuencia unidireccional de tramas que comparten los siguientes valores:
 
  • Dirección MAC de origen
  • Dirección MAC de destino.
  • Tipo de Ethernet.
  • VLAN y prioridad.
  • Dirección IPv6 ó IPv4 de origen.
  • Dirección IPv6 ó IPv4 de destino.
  • Puerto UDP o TCP de origen.
  • Puerto UDP o TCP de destino.
  • Protocolo IP (IPv4), Next header (IPv6).
  • Interfaz (SNMP inputifindex, outputifindex).
  • Tipo de servicio IP.
  • Tipo de queries DNS.
  • Entre otras.
 
Cuáles son los beneficios
 
El establecimiento de sFlow nos permite contar con una visibilidad completa y en tiempo real de toda la infraestructura de red, coadyuvando entre muchas cosas:
 
  • Monitoreo de la red, servidores, servicios, ataques e intrusiones desde una sola consola.
  • Identificar fácilmente las redes, computadoras, servidores y puntos de almacenamiento.
  • Supervisar el rendimiento de la telefonía IP, videoconferencias, almacenamiento, cómputo , entre otros dispositivos de red.
  • Identificar la congestión y garantizar la calidad del servicio.
  • Identificar los recursos sobre utilizados y mejorar su eficiencia.
  • Analizar la distribución de contenidos por Multicast.
  • Analizar e implementar ingeniería de tráfico en redes MPLS.
  • Monitoreo de VLAN, QinQ, redes Metroethernet, etcétera.
  • Detectar asimetrías en el enrutamiento.
  • Analizar la conveniencia al momento de interconectar nuevos peers.
  • Asegurar cuotas de tráfico discriminado a través de la capa de aplicación.
  • Inspeccionar y dar seguimiento de usuarios.
 
Qué necesitamos
 
Como objeto de esta demostración se requerirá de los siguientes recursos:
 
  1. Equipo enrutador o switch con soporte de sFlow.
  2. Servidor Linux de la plataforma de su preferencia.
  3. La instalación de un colector de sFlow dentro del servidor Linux, en particular el colector llamado sFlow-RT, consulte:http://www.inmon.com/products/sFlow-RT.php
  4. Un equipo de cómputo con navegador web.
 
 
Para obtener una lista de colectores disponibles, consulte:
http://www.sflow.org/products/collectors.php
 
El estándar, de la industria, sFlow se encuentra actualmente en la versión 5. Para obtener más información, consulte:
http://www.sflow.org
 
 
Cuáles son los pasos que tenemos que seguir
 
  1. Como primer paso realizaremos la configuración del enrutador, para ello utilizaremos como ejemplo un enrutador MLXe-4 de la marca Brocade con la versión de sistema operativo  5.5.0T165.
     a. Desde línea de comando (CLI) ejecutaremos las siguientes instrucciones, en modo de configuración global :
       i. Habilitar sFlow en el equipo:
 
         R1(config)# sflow enable
       ii. Configurar la dirección IPv6 ó IPv4 del servidor que tendrá el rol de colector sFlow y a donde se enviará los      datagramas de sFlow:
R1(config)# sflow destination 192.168.105.33
ó
R1(config)# sflow destination ipv6 FE80::AA8E:F8FF:FE73:B700
iii. Es importante configurar los intervalos o frecuencia en la que se enviarán los datagramas de sFlow (definida en segundos):
R1(config)# sflow polling-interval 10
iv. Otro parámetro importante de la configuración es el denominador de muestreo, que es de 1/N, es decir, por cada N número de tramas que pasan por una interfaz se tomará una sola, esta muestra será registrada y enviada al colector de sFlow. Este valor dependerá de la velocidad del puerto al que será configurado (para más información consultar las recomendaciones del fabricante):
R1(config)# sflow sample 512
 
b. Desde CLI ejecutaremos el siguiente comando, en modo de configuración dentro de la interfaz de red que nos interesa monitorear:
R1(config-if-e10000-4/4)# sflow forwarding
 
La configuración final quedará de la siguiente manera:
 
sflow enable
sflow destination 192.168.105.33
sflow polling-interval 10
sflow sample 512
!
interface ethernet 4/4
port-name ISP1
enable
sflow forwarding
!
 
2. Una vez realizado el paso 1, el enrutador comenzará enviar los datagramas de sFlow al colector de flujos. El siguiente paso es configurar el software sFlow-RT para que pueda analizar el tráfico, por lo que será necesario entrar al siguiente URI (servidor en que instalamos el colector):
 
http://192.168.105.33:8008/flow/html


    1. Para comenzar a obtener los valores de download y upload que pasan por nuestra interfaz troncal recién habilitada con sFlow, configuraremos los siguientes parámetros dentro de la interfaz web del colector de flujos, particularmente dentro del apartado Flows, llenando el siguiente formulario web:
      i. Name: IPv6stack
      ii. Keys: stack
      iii. Value: bytes
      iv. Filter: stack=eth.ip6.tcp|stack=eth.ip6.udp|stack=eth.ip6.icmp6
    2.  
      Presionamos el botón Submit.
       
    3. De la misma manera agregaremos otro registro en el formulario para el stack IPv4:
      i. Name: IPv4stack
      ii. Keys: stack
      iii. Value: bytes
      iv. Filter: stack=eth.ip.tcp|stack=eth.ip.udp|stack=eth.ip.icmp
    4.  
      y finalmente presionamos el botón Submit.
       
      Nota:
      El parámetro value puede ser configurado con cualquier de los siguientes atributos: frames (frames per second), bytes (Bytes per second), requests, duration.
       
      El resultado final quedará de la siguiente manera:



    1. Una vez configurado los flujos, podemos dar un click al registro IPv6stack o IPv4stack y comenzaremos observar en tiempo real los Bytes por segundo que están pasando por la interfaz de acuerdo al stack seleccionado, mostrando los siguientes resultados:
 
Para poder observar gráficas en tiempo real a través del sFlow-RT, en nuestro navegador deberemos colocar los siguientes URI:
 

http://192.168.105.33:8008/metric/ALL/sum:IPv6stack/html
 



http://192.168.105.33:8008/metric/ALL/sum:IPv4stack/html


Con esto concluimos la configuración básica de sFlow, ahora podemos identificar cuántos Bytes por segundo están pasando por la interfaz de red, de la misma manera podemos configurar más flujos con diferentes value por ejemplo frames, para obtener las tramas por segundo que pasan por la misma. Por último, si nos interesa conocer los top senders de las direcciones IPv6 ó IPv4, podemos configurar más flujos en el colector, por ejemplo:
 
Name: IPv6topsender
Keys: ip6source,ip6destination,ip6nexthdr
Value: bytes
 
finalmente presionamos el botón Submit. Con el cual obtendremos la lista de las direcciones que más descargan o suben información en IPv6 ó IPv4, en este caso por ejemplo el protocolo IPv6:




En posteriores artículos se compartirá cómo:
Generar históricos de la información, así como gráficas personalizadas a través de CACTI, InfluxDB o programación con Python y RRDTools; en base a valores obtenidos por las open northbound APIs del colector sFlow-RT.  
Desarrollar aplicaciones SDN con Python, sFlow-RT y OpenFlow 1.3, para detener, redireccionar o dar calidad de servicio al tráfico que pasa por switches y/o enrutadores mediante una controladora SDN, a partir de eventos detectados por un colector de sFlow.
 

Autor: Jaime Olmos
Revisado: Alejandro Acosta, Azael Fernández y José Luis Gaspoz.

martes, 11 de agosto de 2015

Como monitorear independientemente contadores IPv4 e IPv6 en Cisco (tráfico)

Introduccion
  Hoy en día es muy común ver redes en la modalidad Dual Stack (IPv4 + IPv6) donde ambos protocolos conviven en misma VLAN y/o Bus de red

  En el presente post voy a mostrar como monitorear independientemente el tráfico IPv4 e IPv6 que atraviesa una interfaz de un equipo Cisco.

Que se necesita
  a) Primero es muy importante el soporte de IP::MIB en el IOS del router, muy probablemente ya lo tengas pero vas a necesitar un IOS relativamente novedoso porque existen OID que no estan en versiones viejas.

  Para la realizacion del siguiente documento utilizamos:  c7200-adventerprisek9_sna-mz.152-4.M8.bin

  b) El cliente debe tener el software con el que vayas a monitorear..., eso es todo :-)  El siguiente post brevemente da ejemplos en MRTG, por ello instalamos:

apt-get install snmp
apt-get install snmp-mibs-downloader
apt-get install mrtg

  c) Para un mejor seguimiento de este documento es mejor tener compilado el MIB: IP-MIB de Cisco, muy seguramente quedó instalado luego de ejecutar apt-get install snmp-mibs-downloader.


Topologia utilizada para este post




Pasos

a)  Primero hay que averiguar el índice de la interfaz. Hay dos maneras:
  1) Desde el CLI del equipo Cisco con el comando:

#show snmp mib ifmib ifindex

Obtendremos algo así:

FastEthernet1/1: Ifindex = 3
Loopback0: Ifindex = 5
Null0: Ifindex = 4
FastEthernet1/0: Ifindex = 2
FastEthernet0/0: Ifindex = 1

 Logicamente trabajaremos con las interfaces que nos interecen, recordemos el número de índice que lo necesitaremos más adelante.


  2) Vía SNMP:
  Sabiendo al menos el IPv4 que queremos monitorear (mas adelante podremos monitorear IPv6 también)

Desde el equipo linux hacemos:
#snmpwalk -mALL -v2c -chola3 host1 .1.3.6.1.2.1.4.20.1.2.+DIRIPv4  
Por ejemplo:
#snmpwalk -mALL -v2c -chola3 host1 .1.3.6.1.2.1.4.20.1.2.192.168.1.1

Lo anterior nos devuele el indice de la interfaz que queremos monitorear. Listo!.

Si queremos estar seguro podemos hacer:

#snmpwalk -mALL -v2c -chola3 host1 1.3.6.1.2.1.2.2.1.2.+IntfIndex  
y nos devuelve la interfaz.

Donde:
host1 = host (podemos colocar un IP)
hola3 = la comunidad SNMP


b)  Crear los OID a monitorear
  i) Para obtener el OID de paquetes "INPUT IPv6" haremos lo siguiente:
- Utilizaremos este OID base y la agregaremos el indice de la interfaz al final:
  1.3.6.1.2.1.4.31.3.1.5.2 (IP-MIB::ipIfStatsInOctets.ipv6) + ifIndex = 1.3.6.1.2.1.4.31.3.1.5.2.1

 ii) Para obtener el OID de paquetes "Output IPv6" haremos lo siguiente:
  1.3.6.1.2.1.4.31.3.1.32.2 (IP-MIB::ipIfStatsOutOctets.ipv6) + ifIndex = 1.3.6.1.2.1.4.31.3.1.32.2.1

En MRTG el mrtg.cfg quedaría algo así:

Target[ipv6_f00]:1.3.6.1.2.1.4.31.3.1.5.2.1&1.3.6.1.2.1.4.31.3.1.32.2.1:readonly@192.168.1.1


Ahora bien, también queremos monitorear el tráfico IPv4:

i) Para obtener el OID de paquetes "INPUT IPv4" haremos lo siguiente:
- Utilizaremos este OID base y la agregaremos el indice de la interfaz al final:
  .1.3.6.1.2.1.4.31.3.1.5.1 (IP-MIB::ipIfStatsInOctets.ipv4) + ifIndex (F0/0) = .1.3.6.1.2.1.4.31.3.1.5.1.1

ii) Para obtener el OID de paquetes "Output IPv4" haremos lo siguiente:
  1.3.6.1.2.1.4.31.3.1.32.1 (IP-MIB::ipIfStatsOutOctets.ipv4) + ifIndex (F0/0) = 1.3.6.1.2.1.4.31.3.1.32.1.1


Target[ipv4_f00]:.1.3.6.1.2.1.4.31.3.1.5.1.1&1.3.6.1.2.1.4.31.3.1.32.1.1:readonly@192.168.1.1


  c) Se generó tráfico desde los hosts IPv4 e IPv6 hacia la Loopback del router principal con la aplicación bwping, se cambió el ancho de banda transmitido con el objeto de ver los cambios en la interfaz

    Para generar el tráfico utilicé el siguiente script:

while [ 1] 
do 
  bwping6 -b 256 -s 100 -v 9999 2001:db8:ffff::ffff
done

y

while [ 1] 
do 
  bwping -b 128 -s 100 -v 9999 192.168.255.255
done




Resultados

IPv4:




IPv6:



Total en la interfaz (default en MRTG):