sax-presentacion-gps



sax-presentacion-gps

0 0


sax-presentacion-gps

Presentación del proyecto GPS en el SAX 2014 (guifi.net)

On Github tombatossals / sax-presentacion-gps

guifi.net

GPS

http://tombatossals.github.io/sax-presentacion-gps

Presentacion

¿De qué nos vas a hablar?

  • Herramienta de análisis, monitorización y diagnóstico del estado de un subconjunto de la red inalámbrica.
  • Totalmente basada en herramientas y proyectos de software libre.
  • Todavía en fase de desarrollo.
  • En producción desde hace un par de años.

Código fuente

http://github.com/tombatossals/gps

Demo funcional

http://gps.qui.guifi.net

El problema

  • La red está viva.
  • Los caminos inalámbricos cambian.
  • Los enlaces se degradan.

La solución ideal

Por pedir que no quede:

  • Conocer el camino que sigue mi tráfico.
  • Saber el estado de los enlaces por los que pasa mi tráfico.
  • Si puede haber un camino mejor para el tráfico, aunque sea dando más saltos, asígnalo automáticamente.

¿Y qué más?

La solución ideal

Seguro que se os ocurren más cosas:

  • Si se incorporan nuevos nodos o enlaces a la red, monitorizarlos automáticamente.
  • Si un enlace deja de funcionar o degrada, avisa a la gente interesada.
  • Si una antena/router se avería, montar automáticamente un crowfounding para reemplazarla.

Tecnología

Collectd

The system statistics collection daemon. http://collectd.org.

Nos permite muestrear a intervalos regulares los diferentes valores necesarios para nuestro análisis (tráfico, ancho de banda usuarios conectados, etc.)

Generador de Round Robin Databases aplicando una mínima configuración.

MongoDB

Base de datos documental. http://mongodb.org.

Estructura de un documento "Node"

Estructura de un documento "Link"

Desarrollo propio en Node.JS

Arquitectura

  • Explorador de enlaces/equipos
  • Recolector
  • Agentes
  • Presentación de datos

Explorador de enlaces/equipos

Añadir un nuevo nodo o enlace al sistema tiene que ser tan fácil como introducir IP y coordenadas. El resto se obtiene de manera automática:

  • Modelo de hardware, sistema, version
  • Interfaces de red funcionales
  • Validación de segmentos de red punto a punto.
  • Estado de la tabla de enrutado.

¿Cómo?RouterOS API (Mikrotik), SSH (OpenWRT)

Línea de comandos explorador

Añadir un nuevo nodo a la monitorización:

        
$ cat node.json
{
    "name": "jrjimenez",
    "system": "mikrotik",
    "latlng": {
        "lat": 39.979128,
        "lng": -0.049640
    }
}

$ ./manage add node node.json
        
    

Línea de comandos explorador

Añadir un nuevo enlace a la monitorización:

        
$ cat link.json
{
  "nodes": [
    {
        "name": "jrjimenez"
    },
    {
        "name": "casalduch"
    }
  ]
}

$ ./manage add link link.json
        
    

Línea de comandos explorador

Actualizar todas las interfaces de los nodos monitorizados:

        
$ ./manage update interfaces

# Actualizar las interfaces del nodo castalia
$ ./manage update interfaces castalia
        
    

Línea de comandos explorador

Actualizar información (distancia, red P2P, estado) de los enlaces monitorizados:

        
$ ./manage update links

# Actualizar los links del nodo castalia
$ ./manage update links castalia
        
    

Línea de comandos explorador

Actualizar otra información:

        
$ ./manage update routing
$ ./manage update bandwidth
$ ./manage update sysinfo
$ ./manage update ospf
        
    

Documento con la información de un nodo

Documento con la información de un enlace

Recolector

  • Recoge información
  • A intervalos fijos
  • Útil para comparativas
  • Visualizada con gráficas

Collectd + custom script

  • Collectd se encarga de lanzar el script a intervalos regulares, y a almacenar la info en una base de datos RRD.
  • Sólo tenemos que crear scripts que alimenten a collectd con la información que nos interese monitorizar.

Script que ejecuta collectd cada 20 min.

Número de usuarios conectados al nodo, con señal mejor que -80dbm y peor que -80dbm

        
[dave@solicom5 gps]$ ./manage.js  monitor users
PUTVAL "TorreSanVicente/node/connected_users" interval=1200 N:3:0
PUTVAL "fsalvador/node/connected_users" interval=1200 N:2:2
PUTVAL "casalduch/node/connected_users" interval=1200 N:3:0
PUTVAL "paseouniversidad/node/connected_users" interval=1200 N:13:1
PUTVAL "panderola/node/connected_users" interval=1200 N:9:0
PUTVAL "benarabe/node/connected_users" interval=1200 N:10:1
PUTVAL "graoPaseoBuenavista/node/connected_users" interval=1200 N:2:1
PUTVAL "inforgames/node/connected_users" interval=1200 N:13:0
PUTVAL "pabello/node/connected_users" interval=1200 N:12:3
PUTVAL "riotamesis/node/connected_users" interval=1200 N:6:2
PUTVAL "urbanizacionMadrigal/node/connected_users" interval=1200 N:3:1
        
    

Agentes

Los agentes son cada uno de los dispositivos enrutadores y que establecen los enlaces inalámbricos que queremos tener monitorizados en nuestro sistema.

  • Agentes pasivos.
  • Responden a las consultas del recolector.
  • Configuración mínima.

Tipos de agentes

  • Mikrotik (acceso vía API)
  • OpenWRT (acceso vía SSH)

Necesario usuario/contraseña para acceder a consultar la información. Puede ser el usuario guest del unsolclick.

Activar acceso a la API RouterOS

        
/ip service set api disabled=no
        
    

Bandwidth monitor

Script de monitorización de ancho del banda de un enlace P2P en un nodo mikrotik

        
/system script
name="bandwidth" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api last-started=jun/06/2014 09:43:46 run-count=989 source=
  :local ttx
  :local rrx
  :set ttx 0
  :set rrx 0
  :global ip
  :global username
  :global password
  :global interval
  :global duration
  :global proto
  /tool bandwidth-test $ip user=$username password=$password protocol=$proto \
      direction=transmit interval=$interval duration=$duration do={
      :if ($status="running") do={
        :set ttx $"tx-total-average"
      }
  }
  /tool bandwidth-test $ip user=$username password=$password protocol=$proto \
      direction=receive interval=$interval duration=$duration do={
      :if ($status="running") do={
        :set rrx $"rx-total-average"
      }
  }
  :put ("tx:". $ttx . " rx:" . $rrx )
        
    

Bandwidth monitor

Para nodos OpenWRT utilizamos una versión del test de ancho de banda de mikrotik hecha para Linux.

Código fuente: https://github.com/kadosch/mikrotik_btest.

        
/usr/sbin/mikrotik_btest -d both -t 20 172.16.5.105
        
    

Gráficas de ancho de banda

Gráficas de ancho de banda

Gráficas de ancho de banda

Presentación

  • Vista de nodos y enlaces en un mapa
  • Estado en tiempo real
  • Información resumida de estado
  • Traza del camino entre nodos

Vista global del mapa

Traceroute visual del tráfico entre nodos

Vista resumen de un nodo

Vista resumen de un enlace

¿Futuro?

  • ¿Os parece interesante?
  • ¿Integración en la web de guifi.net?
  • ¿Desarrollo conjunto y consensuado?
  • Gracias por aguantar el tostón.