Saltar al contenido

SNMP

El modelo gestor-agente, qué es una MIB y cómo se nombra cada dato con un identificador de objeto, las operaciones del protocolo y sus puertos, en qué se diferencian sus tres versiones y cómo es por dentro un mensaje.

El modelo gestor-agente

Vigilar a mano una red de doscientos equipos es imposible, y enterarse de las averías por las llamadas de los usuarios es llegar tarde. La monitorización automatiza esa vigilancia, y el estándar con el que se hace desde hace décadas es SNMP, el protocolo simple de gestión de red.

Su arquitectura es de cliente y servidor, aunque aquí las piezas tienen otro nombre: gestor y agente. El gestor es la estación central, el sistema de gestión de red, y es el único sitio desde el que se mira. El agente es el software que corre dentro de cada equipo gestionable, sea un servidor, un conmutador, un encaminador, una impresora o una cabina, y es quien conoce el estado de esa máquina y lo publica.

PiezaDónde viveQué hace
GestorEn una máquina central de la redPregunta a los agentes, guarda el histórico, pinta las gráficas y dispara las alarmas
AgenteDentro de cada dispositivo gestionableResponde a lo que le preguntan y avisa por su cuenta si ocurre algo grave
Base de datos de gestiónEn el agenteEs el catálogo de datos que ese equipo puede ofrecer

SNMP pertenece a la pila TCP/IP y viaja sobre UDP, no sobre TCP. La elección tiene sentido: la monitorización debe pesar lo mínimo y no conviene que un protocolo de vigilancia añada carga a una red que ya puede estar en apuros. A cambio, un mensaje perdido se pierde, y por eso el gestor pregunta de forma periódica en lugar de fiarlo todo a un aviso.

Para trastear a mano existe una herramienta de escritorio, el navegador de bases de datos de gestión, que se conecta a un equipo y deja recorrer todo lo que ese equipo publica. Es la forma habitual de averiguar qué se puede vigilar de una máquina antes de configurarla en el sistema de gestión.

El agente no decide nada: publica datos y avisa. La inteligencia, los umbrales y el histórico están en el gestor.

Para el examen

  • Gestor: consulta

  • Agente: responde en cada equipo vigilado

  • Trap: la excepción: la manda el agente sin que nadie pregunte

La MIB, la SMI y el árbol de identificadores

Para que un gestor pueda preguntar a un conmutador de un fabricante y a una impresora de otro, hace falta acordar cómo se nombra cada dato. Eso es lo que resuelven dos piezas: la estructura de información de gestión, que es la gramática, y la base de datos de gestión, que es el diccionario de cada aparato.

La estructura de información de gestión define, con la sintaxis abstracta ASN.1, cómo se describe un objeto gestionable: cómo se le pone nombre, qué forma tiene y cómo se organizan las ramas donde vive. No contiene datos, contiene las reglas para definirlos.

La base de datos de gestión, la MIB, es el conjunto de parámetros que un agente concreto sabe responder: cuántos paquetes ha pasado cada puerto, cuánta memoria queda libre, cuánto lleva encendido el equipo. Cada aparato tiene la suya, aunque casi todos comparten una parte común y general, y por eso el mismo gestor sirve para todos.

Cada parámetro se identifica con un identificador de objeto, un OID, que es una secuencia de números separados por puntos. No es un número arbitrario: es el camino desde la raíz de un árbol mundial hasta ese dato concreto, igual que una ruta de directorios localiza un fichero.

Tramo del caminoNúmeroQué agrupa
Organismo internacional de normalización1La raíz de la que cuelga todo
Organizaciones reconocidas3El siguiente escalón administrativo
Departamento de Defensa estadounidense6De donde nació internet
Internet1La rama donde vive todo lo de esta materia
Directorio, gestión, experimental y privada1 a 4Las cuatro ramas de internet
Base de datos de gestión común1.3.6.1.2.1Los datos estándar que casi todo equipo publica
Rama de fabricantes1.3.6.1.4.1Debajo, cada fabricante cuelga lo suyo

La rama de fabricantes es la que explica por qué un conmutador de una marca ofrece datos que otro no tiene: bajo ella cada empresa registra su propio subárbol y publica ahí lo que solo tiene sentido en sus productos. Lo estándar cuelga de la rama de gestión y lo particular de la rama privada.

El reparto en documentos normativos es materia de examen: uno define la estructura de información de gestión, otro la primera versión de la base de datos común, otro el protocolo con sus mensajes y otro la segunda versión de la base de datos común, que es la que se usa.

DocumentoQué define
RFC 1155La estructura de información de gestión: cómo se definen los objetos
RFC 1156La primera versión de la base de datos de gestión común
RFC 1157El protocolo en sí y sus unidades de datos
RFC 1213La segunda versión de la base de datos de gestión común

La estructura de información de gestión es la gramática, la base de datos de gestión es el diccionario de un equipo y el identificador de objeto es la palabra concreta que se pregunta.

Para el examen

  • MIB: la base de datos de lo que se puede consultar

  • SMI: las reglas para escribirla

  • OID: identifica cada objeto dentro de un árbol jerárquico

Las operaciones del protocolo y sus puertos

Todo lo que sabe hacer SNMP cabe en cinco operaciones, y se entienden mejor separadas por quién las inicia. Las que empiezan en el gestor viajan al puerto 161 de UDP del agente; el aviso que sale del agente por su cuenta viaja al puerto 162 de UDP del gestor.

OperaciónDirecciónPara qué sirve
GetGestor al agentePedir el valor de un objeto concreto
GetNextGestor al agentePedir el objeto siguiente en el árbol, sin saber de antemano cómo se llama
SetGestor al agenteModificar un valor, es decir, configurar el equipo
ResponseAgente al gestorLa respuesta a cualquiera de las anteriores
TrapAgente al gestorEl aviso espontáneo: algo ha ocurrido y no se espera a que pregunten

La pareja de petición y respuesta va siempre de la mano: el gestor pregunta y el agente contesta. La operación de siguiente es la que permite recorrer un árbol que no se conoce, porque devuelve el objeto que viene a continuación del indicado, y encadenándola se recorre la tabla entera.

El aviso espontáneo es lo que hace que la monitorización sea inmediata en lugar de depender del intervalo de sondeo. Si un servicio se reinicia o una fuente de alimentación falla, el agente lo comunica en ese momento. Como va sobre UDP y sin confirmación, un aviso puede perderse: por eso un buen sistema de gestión combina los avisos con un sondeo periódico y no confía solo en ellos.

161 es el puerto del agente y recibe las preguntas; 162 es el puerto del gestor y recibe los avisos. Confundir los dos sentidos es el fallo clásico.

Para el examen

  • Puerto de consulta: 161

  • Puerto de las traps: 162

Consultar a mano: snmpget y snmpwalk

Antes de dar de alta un equipo en el sistema de gestión, el administrador comprueba a mano que el agente responde y averigua qué publica. Para eso hay dos herramientas de línea de comandos que se corresponden con las dos operaciones de lectura.

HerramientaQué haceCuándo se usa
snmpgetUna consulta simple: pide el valor de un identificador concretoCuando ya se sabe exactamente qué dato se quiere
snmpwalkParte de un identificador y va pidiendo el siguiente una y otra vezCuando se quiere descubrir todo lo que cuelga de una rama

El recorrido de la segunda se apoya en la operación de siguiente: con lo que le devuelve cada respuesta pregunta por el elemento posterior, y así avanza por la tabla como quien recorre un árbol en profundidad. Es la forma de averiguar el nombre exacto de un dato cuando no se conoce el catálogo del fabricante.

bash
# ¿cuánto lleva encendido el servidor de la plataforma?
snmpget -v2c -c lectura 10.20.0.15 1.3.6.1.2.1.1.3.0

# ¿qué interfaces tiene y cómo se llaman? recorrido de la rama
snmpwalk -v2c -c lectura 10.20.0.15 1.3.6.1.2.1.2.2.1.2

Una consulta simple para un dato que ya se conoce, un recorrido para explorar una rama entera. Van de la mano: se explora una vez y después se consulta lo que interesa.

Para el examen

  • snmpget: pide UN objeto concreto

  • snmpwalk: recorre toda una rama del árbol

  • Si no se sabe el OID exacto: snmpwalk

Las tres versiones y en qué se diferencian

SNMP ha pasado por tres versiones y en un examen se distinguen por dos cosas: qué operaciones añade cada una y cómo protege el acceso.

La primera versión es la original: define la estructura de información de gestión, el árbol de objetos y las cinco operaciones básicas. Su control de acceso es la cadena de comunidad, una especie de contraseña compartida entre gestor y agente que viaja sin protección alguna dentro de cada mensaje.

La segunda versión, la basada en comunidad, mantiene ese mismo control de acceso y añade operaciones que faltaban.

Añadido de la versión 2cQué aporta
GetBulkTrae de golpe todo lo que cuelga de una rama, sin ir pidiendo uno a uno el siguiente
Trap propio de la versiónEl aviso espontáneo con el formato nuevo
InformComunicación entre gestores, para que uno avise a otro
ReportPrevisto en la norma, sin uso asentado

La tercera versión no añade operaciones: añade seguridad, que era el gran agujero de las anteriores. Incorpora un modelo basado en usuario, con credenciales por usuario en lugar de una cadena compartida, autenticación que garantiza el origen y la integridad del mensaje, y cifrado del contenido para que no viaje legible. Encima de eso hay un control de acceso por vistas, que permite decidir a qué parte del árbol llega cada usuario.

Aquí hay que corregir un error que circula en muchos apuntes: la seguridad de la tercera versión no tiene nada que ver con SSH, ni es una novedad de última hora. Es norma desde finales de los años noventa y es la versión exigible en cualquier red donde el protocolo salga del segmento de administración, porque con la cadena de comunidad basta con capturar un paquete para tenerla.

La segunda versión aporta operaciones, sobre todo la lectura masiva. La tercera aporta seguridad: autenticación y cifrado por usuario.

Para el examen

  • v1 y v2c: solo community, y en claro

  • v3: la que trae seguridad real: autenticación y cifrado por usuario

Cómo es por dentro un mensaje SNMP

Un mensaje SNMP es un paquete de red normal: cabecera IP, cabecera UDP y, dentro, el mensaje propiamente dicho. Ese mensaje empieza con dos campos comunes a todos: la versión del protocolo que se está hablando y la cadena de comunidad que da acceso. Detrás va la unidad de datos, que es la parte que cambia según la operación.

La unidad de datos más habitual, la de las consultas y sus respuestas, lleva cuatro campos. El tipo, que indica de qué operación se trata. Un identificador de petición, que sirve para emparejar cada respuesta con la pregunta que la provocó, algo imprescindible cuando se viaja sobre un transporte sin conexión. Dos campos de error, que en las preguntas van a cero y en la respuesta indican si algo falló y en qué punto. Y las asociaciones de variables.

Las asociaciones de variables son el contenido útil del mensaje: una lista de parejas formadas por un identificador de objeto y su valor. En una petición los valores van vacíos, porque son justo lo que se pregunta; en la respuesta vienen rellenos. Poder mandar varias parejas en un solo mensaje es lo que permite pedir diez datos de un equipo sin diez viajes.

Unidad de datosCampos propios
Consulta y consulta del siguienteTipo, identificador de petición, dos campos de error a cero y las asociaciones de variables
RespuestaLos mismos, pero con estado de error e índice del error ya rellenos
ModificaciónIgual que la consulta, con los valores que se quieren escribir
Lectura masivaSustituye los campos de error por dos parámetros: cuántas variables se piden una sola vez y cuántas repeticiones se quieren de las demás
Aviso de la versión 1Formato propio: empresa que lo emite, dirección del agente, tipo genérico, tipo específico, marca de tiempo y variables
Aviso de la versión 2cAbandona ese formato especial y usa la misma estructura que las demás unidades

La cadena de comunidad viaja en claro dentro de cada mensaje de las versiones 1 y 2c. Quien capture un solo paquete la tiene: ese es el motivo de ser de la versión 3.

Para el examen

  • Qué lleva el mensaje: versión, comunidad o datos de usuario, y la unidad de datos

  • Qué lleva la unidad de datos: el identificador de petición y la lista de variables