Pequeña ayuda con entender SNMP

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Wolas!

Hace un tiempo atrás adquirí para la casa un router / firewall netgate SG-3100, y aunque sabía que me estaba metiendo en las patas de los caballos al no haber estudiado redes, me atreví igual y a punta de tutoriales lo configuré el bicho, de tal forma que hasta la señal de IPTV que me llega desde mi proveedor lo pude separar en una VLAN aparte y todos felices comiendo perdices.

Sin embargo, lo que quiero hacer ahora es simple... pero no pillo mucha documentación al respecto.

Ya caché y configuré SNMP para que me de un listado de clientes conectados (mediante 1.3.6.1.2.1.4.22.1.2), y otro para ver el uptime de la máquina (1.3.6.1.2.1.1.3.0 aunque creo que este me entrega el uptime del proceso bsnmpd en vez del de la máquina), pero lo que quiero hacer ahora es que me devuelva los 'bytes in' y 'bytes out' de la interface WAN... y no tengo idea cómo llegar a ello a través del famoso baseoid y por más que busco no lo encuentro. En lo posible sería lo ideal que me diera la de todas las interfaces, ya que lo que quiero hacer es tener algo parecido a esta tabla en mi influxdb / grafana:

uhzlRmG.png


Alguien sabe o me puede explicar cómo mierda funciona la wea del baseoid y cómo llego a ese dato? Lo único que pillé al respecto fue este RFC: https://tools.ietf.org/html/rfc2790 y la verdad es que no tengo muchas ganas de mamarme todo un RFC para sacar algunos datos no más jajajaj

Saludos.
 

Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.401
a ver de lo que recuerdo de esa parte de snmp (aun no cacho que mierda tiene de simple), en esa parte el oid te entrega una tabla (ifindex) con las interfaces de red correspondiente, ejemplo tienes 3 interfaces de red la cosa te genera una tabla con los ids 1 2 3.
entonces supongamos que el baseoid es 1.3.6.1.2.1.31 el id 1.3.6.1.2.1.31.1 tiene la info de la interfaz de red 1, 1.3.6.1.2.1.31.2 la info de la interfaz de red 2, etc...

https://www.loriotpro.com/Products/..._Network_Supervision/C3-D4_SNMP_Object_EN.htm

Creo que eso te puede ayudar, en verdad una vez que cache que opennms cumplia con todos los requerimientos que me pedian en ese entonces olvide snmp de mi cabezota.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.296
buenas
welcome to the jungle of MIBs

en general (hablando para cualquier dispositivo que presente un servicio o proceso snmp ) siempre se puede hacer una extracción de todos los MIBs presentes para así buscar todos los recursos disponibles y así solo consultar más adelante los que sean necesarios
esto naturalmente estará limitado por la configuración y la comunidad habilitada (se pueden crear con alcances diferentes, solo lectura bastará para las consultas, pero deben tener un alcance global y no solo algunos MIBs )

si estás usando Linux, puedes usar el comando snmpwalk para hacer consultas a MIBs puntuales o por secciones , pero si no específicas ningún MIB, el servidor te responderá todos los que tenga autorizada la comunidad en uso

de qué sirve esto? puedes hacer una consulta sin filtro y si la comunidad permite leer todo, te dará literalmente todos los MIBs disponibles del dispositivo, ya sean recursos de bloques (memorias flash, hdd,etc, divisibles en bloques de 4096bytes) , de datos (memoria RAM, creo que divisibles en bloques de 1024 bytes), de red (counters )

de esta forma, al usar snmpwalk (y después puedes instalar un paquete con los nombres de MIBs ) puedes buscar los valores exactos que necesites de las interfaces presentes del dispositivo, y con eso hacer un gráfico o contadores de tráfico (cacti , zenoss, zabbix y otros sistemas de monitoreo usan los MIBs estándares para graficar tráfico de red usando los contadores )

te dejare adjunta una captura de cómo se ve una salida numérica de la lista de MIBs se una interface de red, y notarás que los valores de tráfico están en Counters, estos son valores absolutos de tráfico de bytes, entonces los gráficos no miran el valor en si, sino que van registrando la "diferencia" entre una lectura y otra 5 minutos después
así en el siguiente punto del gráfico, el punto subira o bajará según cuando bits o bytes hubieran pasado en ese lapso de tiempo .

también habrán valores relativos a estado (conectado o desconectado), velocidad negociada , máscara, IPs, etc)

e86798dd46fb9b0700f5eba4fcae08bf.jpg


Enviado desde mi moto g(7) plus mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Gracias por sus respuestas cabros!

Había probado con menos números pero dp de quitar un par me dio un listado tan tremendo de cosas que superó el límite de mostrar las últimas 5000 líneas en mi cli jajajaja

Por lo visto voi a tener que jugar con las opciones pq no me salían numéricas, solo letras, pero según entiendo: también puedo ocupar letras entonces o tiene que ser numérico?

Voi a probar jajajja

Algún cliente gui que recomienden bajo Linux?


Sent from my iPhone using Tapatalk
 
Upvote 0

replikante

Capo
Se incorporó
10 Septiembre 2008
Mensajes
105
Instala la versión free de MIB browser, y deja que busque todos los OID asociado a tu equipo (lo hace por la IP y muchos de los OID los separa en su categoría correspondiente: interface, hardware, tráfico, etc, etc) y de ahí, sacas los que necesitas. En realidad hace lo mismo que snmpwalk pero de una forma gráfica y mucho más fácil de filtrar.

Saludos!
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Hasta que al final pillé los datos :) Eso sí, instalé tkmib para poder navegar un poco, la vista de árbol me dio una mucha mejor idea de qué tanta información hay disponible.

Para complementar la respuesta: sí, los índices no son sólo numéricos, también se pueden ocupar strings.

El que yo necesitaba era ifInOctets (.iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifInOctets.[X])... sin embargo, estos se limitan a 32 bits por lo que se reinician cada ~4.29GB. Yo al día estoy transfiriendo aprox. 20GB (externo, interno puede que sea más), y con conexiones gigabit donde regularmente transfiero películas de 11GB podría "perderlos" fácilmente si no estoy cada 4 segundos haciendo queries (en un mundo ideal, mi setup no es ideal, pero para hacerme una idea del worst-case scenario).

Así que me puse a buscar y me encontré con ifHCInOctets (ubicado en .iso.org.dod.internet.mgmt.mib-2.ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifHCInOctets.[X]), que es de 64 bits, lo cual me da aprox. 18 exabytes antes de que se reinicie el counter... por el momento más que suficiente.

Ahora a por el siguiente bug: tengo que instalar otro server de snmp, ya que el que viene default tiene una pifia que muestra sólo una interfaz: https://forum.netgate.com/topic/142951/snmp-ifhcinoctets-ifhcoutoctets-are-missing-on-sg-3100

Muchas gracias por su ayuda cabros, con su ayuda me fue mucho más simple resolver el misterio!

Saludos.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Listo, con el paquete NET-SNMP tengo ahora las estadísticas de todo lo que necesito:

RWImtLK.png


Ahora a implementarlo!
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.296
Listo, con el paquete NET-SNMP tengo ahora las estadísticas de todo lo que necesito:

RWImtLK.png


Ahora a implementarlo!
que bien
bueno,ese es el servicio por defecto en centos, en las basadas en debian el paquete se llama snmpd

Enviado desde mi moto g(7) plus mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Sorry no me expresé muy bien: yo estaba hablando del daemon en pfsense, no en CentOS :)

Sucede que pfsense viene con un daemon snmp predeterminado pero es básico y tiene algunos bugs y missing features... todo eso se arregla con otro daemon más pesado (computacionalmente) que se instala como un add-on en el sistema llamado NET-SNMP, de ahí la confusión :)

Saludos.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.296
Sorry no me expresé muy bien: yo estaba hablando del daemon en pfsense, no en CentOS :)

Sucede que pfsense viene con un daemon snmp predeterminado pero es básico y tiene algunos bugs y missing features... todo eso se arregla con otro daemon más pesado (computacionalmente) que se instala como un add-on en el sistema llamado NET-SNMP, de ahí la confusión :)

Saludos.
ahhh si tienes razón
el que viene integrado es más liviano y se configura en la gui web, pero si tiene potencia suficiente,mejor el dsemon completo

Enviado desde mi moto g(7) plus mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
Hasta que finalmente tuve tiempo de implementarlo, quedó bastante bueno, sobretodo teniendo en cuenta que ocupé Telegraf como intermediario (también mediante Docker!) lo cual simplificó harto la cosa. Ahora me queda instalarlo en el otro raspberry pi que tengo para poder estadísticas de ambos rpi en la misma instancia de influxdb / grafana.

Estadísticas de Raspberry Pi:
JCB4swC.png


Estadísticas recolectadas via SNMP:
W77Mb4k.png


Saludos.

Mi conf en Docker para incorporar Telegraf fue la siguiente:

Código:
  telegraf:
  container_name: telegraf
  image: "telegraf:latest"
  restart: unless-stopped
  ports:
  - 8125:8125 # StatsD
  - 8092:8092 # UDP
  - 8094:8094 # TCP
  volumes:
  - ~/iot-services/services/telegraf/config/telegraf.conf:/etc/telegraf/telegraf.conf:ro
  - /var/run/docker.sock:/var/run/docker.sock

Estuve weando haaaarto rato con el telegraf.conf, pero la parte de SNMP era bastante fácil:

Código:
[[inputs.snmp]]
  agents = ["udp://lalalalalalal:161"]
  version = 2
  community = "lololololo"
  name = "lalalalalalal"
  [[inputs.snmp.field]]
    name = "lalalalalalal"
    oid = ".1.3.6.1.2.1.1.5.0"
    is_tag = true
  [[inputs.snmp.field]]
    name = "Memory Total"
    oid = ".1.3.6.1.2.1.25.2.3.1.5.1"
  [[inputs.snmp.field]]
    name = "Memory Used"
    oid = ".1.3.6.1.2.1.25.2.3.1.6.1"
  [[inputs.snmp.field]]
    name = "WAN In"
    oid = ".1.3.6.1.2.1.31.1.1.1.6.8"
  [[inputs.snmp.field]]
    name = "WAN Out"
    oid = ".1.3.6.1.2.1.31.1.1.1.10.8"
...
 
Última modificación:
Upvote 0
Subir