La gestión de redes es una de esas cosas que las grandes compañias hacen. Es una tarea frecuentemente asociada con hardware y software costoso y que requiere de mucha capacitación y experiencia para ser operada apropiadamente.
En un contexto más amplio, la gestión de redes trata sobre hardware, software, y las técnicas que son usadas para monitorear la salud de tu red y los dispositivos conectados a ésta. Normalmente, las pequeñas empresas y gente con redes caseras pasan muy poco tiempo, si no es que ninguno, pensando en estas cosas, hasta que ocurren los problemas.
Es por eso que el más minimo nivel de gestión beneficia a las redes más pequeñas. En una LAN pequeña puedes llegar a preguntarte: "¿Cuanto tráfico estamos enviando através de nuestra conexión a Internet?", o tal vez, "¿Esta alguno de nuestros servidores corriendo con poca memoria o disco duro?".
Equipado con un entendimiento básico del Simple Network Managemente Protocol, protocolo simple de gestión de red (SNMP) y el software correcto, puedes empezar a reunir la información necesaria para responder a esas preguntas (y otras similares).
Historia de SNMP
Durante la mitad de los 80's, los administradores de redes y de sistemas comunmente usaban ping, traceroute, tcpdump y comandos similares para ayudar a fluir el tráfico en sus redes. Esas herramientas eran generalemente suficientes, ya que las redes de ese tiempo eran muy pequeñas y menos complejas. A finales de 1987, Request For Comments (RFC) 1024 codificó el SGMP "Simple Gateway Monitoring Protocol" o Protocolo simple de monitoreo de compuerta.
SGMP definía una plataforma estándar para monitorear la salud de las compuertas que unían las redes previamente aisladas.
Después de casi dos años de desarrollo, SNMP surgió en RFC 1067. El "simple" en el nombre de SNMP sugería un contraste con los estándares rivales de ese tiempo, como el Common Management Information Protocol (CMIP), protocolo común de gestión de información. CMIP era particularmente popular en compañias de telecomunicaciones y aún tiene usos especializados. Mientras que SNMP tiene muchas oscuridades y manchas para ser considerado verdaderamente "simple", es mucho menos complejo que CMIP y estándares
A mediados de los 90's, Java y HTTP aparentaban ser las soluciones para casi cualquier problema, y muchos fabricantes de la industria de las redes se enfocaron a esas herramientas. Sus productos abandonaron SNMP para lo que parecian soluciones de un "nivel más alto". Pero la Web y Java nunca llegaron a las expectativas de mercado que pudo haber tenido el más fanatico. Hoy, virtualmente todos los dispositivos de redes, incluyendo los hubs menos caros e impresoras de red, soportan SNMP. Si quieres administrar algo o todo de tu red y quieres poder elegir de entre la más vasta gama de herramientas, preparate para lidear con SNMP.
Términos y conceptos de SNMP
El mundo de SNMP está lleno de abreviaturas, muchas de las cuales no habías escuchado antes. He aquí unas de las más importantes:
ASN.1: Abstract Syntax Notation" versión 1. Un mensaje SNMP es construido con esta notación. ANS.1 define como sus tipos simples los enteros, OIDs, cadenas octales, y nulo.
BER: Basic Encoding Rules o reglas de cifrado básicas, representan datos ANS.1 como cadenas octales.
MIB: Management Information Base, una base de información de administración para una pieza de equipo recolecta definiciones de propiedades de los objetos gestionados del dispositivo. El dispositivo por si mismo mantiene los datos almacenados de las propiedades, que pueden ser accesibles por SNMP u otros medios. Un ejemplo de una definición de propiedad es la siguiente:
sysUpTime OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only STATUS mandatory DESCRIPTION "The time (in hundredths of a second) since the network management portion of the system was last re-initialized."
OID: Object Identifier. Un identificador de objeto es un nombre que identifica como único a un dispositivo o a una caracteristica de un dispisitivo (o un objeto más general --- en SNMP existen OIDs para la gente, documentos, etc.). Los OIDs son escritos en secuencias de enteros separados por un punto, por ejemplo "1.3.6.1.3.2."
PDU: Protocol Data Unit, es el "datagrama" de SNMP -- la unidad más pequeñas de trasnmisión de red. Los PDUs de SNMP incluyen una petición de número, un estado de error, un error de OID y una lista de valores pares de OID. Por lo tanto, una respuesta PDU de sysDescr generalmente contienen un indice, dos nulos (para los valores de error), el sysDescr OID, y una cadena octal que cifra el valor de sysDescr.
SMI: Structure of Management Information, es un estándar que describe como SNMP accede información. Define MIBs y el uso de ASN.1. Una parte de la SMI dice que cada dato tiene un nombre, sintaxis, y cifrado. El nombre es un OID. La sintaxis da el tipo de dato: "entero", "cadenas octales", etc. El cifrado dice como entregar en partes los datos para la transmisión en red.
Bases de SNMP
SNMP es un protocolo cliente/servidor para comunicarse con los dispositivos de red. Parecido a SMTP que habilita la entrega de correo, también deja a los administradores de red mantener registro de sus redes. Existen cosas que hacen a SNMP un poco inusual comparado con los protocolos tradicionales.
Primero, los sistemas SNMP normalmente involucran más servidores que clientes. Desde la perspectiva de la programación de red, los dispositivos de red individuales (ruteadores, switches, impresoras, hubs, etc.) son los sevidores en un sistema SNMP. El cliente es frecuentemente una computadora que encuesta a los dispositivos y graba los datos que estos regresan.
Esta topología es contraria a la típica arquitectura cliente/servidor de un servidor y muchos clientes. Cualquier dispositivo que hable SNMP es referido como un "dispositivo administrado". Puedes preguntarle a cualquier dispositivo administrado quién (o que) es, con una petición transcrita en inglés como GetRequest SysDescr. La respuesta que regresa puede ser parecida a esta: hostname:juniper:specialOS V4.1 (Rev. 52) System #4. Puedes hacer a los dispositivos otras preguntas para colectar un perfil más completo de su estado e historial.
Para cualquier dispositivo, existen otras maneras de recuperar la misma información. En un equipo Linux, puedes inciar sesión y usar cualquiera de los comandos que normalmente diagnostican el estado de una máquina (top, vmstat, netstat, ps, etc.). Si es un ruteador de un fabricante como Cisco o Juniper, también puedes iniciar sesión y verificar el estado interactivamente. De cualquier modo, SNMP te permite reunir la misma información usando menos ancho de banda y memoria. Sistemas de administración basados en SNMP frecuentemente vigilan cientos de dispositivos simultaneamente con facilidad.
SNMP proporciona un buen método para la administración de dispostivos. Usas las mismas peticiones, y esperas respuestas similares, no importa en que sistema operativo corra el dispositivo que estas monitoreando. En realidad no importa si el sistema esta corriendo sobre Unix, OS/400, Windows, Cisco IOS, o cualquier otro sistema operativo. Si habla SNMP (y probablemente lo haga), puedes obtener información de él de forma consistemte.
NET-SNMP
Solo toma un par de minutos para empezar a encuestar dispositivos SNMP en tu red. La forma más fácil para comenzar es usar NET-SNMP, una libraría de C y una colección de uitlidades de linea de comando.
NET-SNMP esta disponible en RPM y en fuente en http://net-snmp.sourceforge.net/. Los usuarios de Debian encontrarán a .debs disponible desde los espejos de Debian. La instalación apartir de los archivos fuente es tan sencilla como descargar, descomprimir, y:
su cd ucd-snmp-x.x.x ./configure make make install
Reuniendo información
Para entender los conceptos de SNMP, ayuda el tener aplicaciones y datos "en vivo" con los cuales puedas experimentar. Antes de continuar leyendo, sigue las instrucciones de la página anterior para instalar NET-SNMP. Esto te permitirá utilizar los comandos discutidos más adelante.
Como cualquier aplicación cliente/servidor, una vez que has instalado el cliente, debes tener un servidor trabajando con cual probarlo. Tu mejor apuesta es curiosear en tu red. interrogar dispositivos como impresoras, ruteadores, hubs, etc. Muchos de los cuales trabajan con agentes SNMP (servidores). Hace un par de años era muy sencillo encontrar agentes SNMP en el Internet (normalmente ruteadores ISP). Los firewall han mejorado desde entonces, asi que probablemente lo mejor sea experimentar con algo cerca de casa.
Supón que target es un ruteador o cualquier otro dispositivo con SNMP habilitado. Desde la línea de comando. si ejecutas:
snmpget target public sysDescr.0
Deberias ver una breve descripción del sistema parecida a la siguiente:
system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (tm) 7200 Software (C7200-IS-M), Version 12.1(5)T5, RELEASE SOFTWARE (fc1) TAC Support: http://www.cisco.com/cgi-bin/ibld/view.pl?i=support Copyright (c) 1986-2001 by Cisco Systems, Inc. Compiled Tue
La línea public en el comando es un tipo de contraseña para el agente SNMP, la cuál es llamada "cadena comunitaria". Es muy común para los dispositvos administrados tener "public" como su cadena comunitaria predeterminada. Esto no es necesariamente un problema de seguridad.
sysDescr.0 es un ejemplo de un identificar de objeto (OID), es la forma textual o visible de el OID, el cual corresponde al IOD númerico 1.3.6.1.2.1.1.1.0. Esto puede que te recuerde un poco el sistema de nombre de dominio (DNS), en el cual www.yahoo.com es la forma leible para el humano para una dirección como 216.109.118.76.
El DNS, por supuesto, traduce nombres de equipos a direcciones IP y viceversa. SNMP usa una base de información de administración (MIB), que es un archivo de texto que proporciona un esquema o schema de información conocida por SNMP, las cuales incluyen traducciones de OIDs. Muchos MIBs son públicos y de un uso amplio. Algunos están patentados y restringidos a equipo de algún fabricante en particular. RFC 1213 define sysDescr y muchos otros OIDs comunes, como sysUpTime (que tal recientemente ha sido reinicializado el dispositivo). Con NET-SNMP instalado, puedes interrogar los MIBs tu mismo usando comandos como:
snmptranslate -Td -OS system.sysDescr
El comando regresa un salida como la mostrada a continuación. La información importante por ahora es el campo DESCRIPTION. Usando snmptranslate, puedes facilmente aprender (o acordarte) de las características de varios OIDs de SNMP.
.1.3.6.1.2.1.1.1 sysDescr OBJECT-TYPE -- FROM SNMPv2-MIB, RFC1213-MIB -- TEXTUAL CONVENTION DisplayString SYNTAX OCTET STRING (0..255) DISPLAY-HINT "255a" MAX-ACCESS read-only STATUS current DESCRIPTION "A textual description of the entity. This value should include the full name and version identification of the system's hardware type, software operating-system, and networking software." ::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 1 } Programando con SNMP
Aunque la distribución de NET-SNMP viene con una librería de C la cual puedes usar para crear tus propias aplicaciones basadas en SNMP, frecuentemente es mucho más fácil empezar usando un lenguaje de programación como Perl, Python o TCL. Todos ellos tienen librerias SNMP disponibles.
Por ejemplo, usando Perl y el módulo SNMP_util, puedes facilmente escribir una aplicación sencilla como la siguiente:
#!/usr/local/bin/perl # Usage: "net_if.pl ". use SNMP_util; $HOST = shift; # Este es el OID para ifDescr, o, más apropiadamente, # iso.org.dod.internet.mgmg.mib-2.interfaces. # ifTable.ifEntry.ifDescr. $OID = "1.3.6.1.2.1.2.2.1.2"; @values = &snmpwalk($HOST, $OID); if (@values) { print "Interfaces de red de $HOST: :@values:n"; } else { print "$HOST no respondio.n"; } El código imprime el nombre de cada uno de los dispositivos administrados en la variable $HOST, tales como 1o0, Ethernet, Serial1, etc.
No te molestes en escribir esto en C. Los lenguajes de scripts como Perl solucionan los problemas de SNMP con menos líneas de código que en C y también proporcionan el mismo desempeño y portabilidad.
Ventajas y desventajas
Mientras que SNMP es relativamente flexible y fácil de usar, tiene algunas desventajas. Su actual modelo de seguridad es relativamente débil. Es fácil administrar mal SNMP y crear una "tormenta de fuego" del tráfico de la red, que no tiene ningún buen propósito. Usar datos orientados a objetos o basados en XML es un duro trabajo con SNMP. También, el número de administradores y programadores que realmente entienden como funciona SNMP es muy limitado.
Aún así, a pesar de sus problemas, SNMP es lo mejor que tenemos. Es universal. La industria de las redes tiene mucha más experiencia con SNMP y sus deficiencias en seguridad que con las herramientas basadas en la Web o Java. Con la liberación del último RFC sobre SNMP version 3 (SNMPv3) se resuelven los problemas más graves de seguridad. Además SNMP es mucho más "ligero" en tu red que otras alternativas. Los nuevos dispositivos seguirán saliendo al mercado con soporte para SNMP.

Digg
Del.icio.us
Slashdot
Technorati
Googlize this
Facebook
Meneame