phpIPAM: controla las direcciones IP y todos sus cambios

Como su nombre compuesto indica, phpIPAM es el manejo y administración, por medio de lenguaje PHP, de las direcciones del Protocolo de Internet (en inglés “Internet Protocol Address Managament”, y que abreviaremos como IPAM). Esto hace al software tener un nombre muy singular, nemotécnico pues (¿meta nombre?). En este artículo revisaremos cómo podremos utilizar phpIPAM más bien como una herramienta auxiliar, aunque veremos que tiene ciertos componentes basados en la monitorización. ¡Vamos!

phpIPAM y Pandora FMS

En un artículo anterior explicamos qué es una calculadora de IP y cómo funciona implementado en Pandora FMS. Lo cierto es que, desde mayo de 2014 (y formalmente liberada en la versión 5.1 ), Pandora FMS incluye IPAM como una extensión muy útil para el manejo, el descubrimiento, las asociaciones de agentes existentes, el registro de comentarios en cada una de las direcciones IP, pudiendo también establecer excepciones desde el punto de vista de la monitorización. Las direcciones IP pueden ser detectadas por medio de ping o por las direcciones IP que nos entreguen los agentes que previamente tengamos registrados: Pandora FMS se encargará de hacernos las equivalencias y correspondencias.

Cuando las detecciones están regidas por los agentes de Pandora FMS tenemos la ventaja de conocer sus sistemas operativos, los cuales son representados gráficamente en la extensión IPAM. Podremos establecer alertas para cuando una dirección IP cambie, también el ver un panorama general con todas las direcciones o bien de manera filtrada: los dispositivos activos, los gestionados, etc. y sus posibles combinaciones. Entonces, ¿qué ventaja supone el utilizar phpIPAM?

phpIPAM

Está desarrollado bajo la modalidad de software libre, licencia GNU 3 desde junio de 2015, cuando se mudaron los repositorios a GitHub, y al parecer su fuente de financiación son las donaciones, tanto de dinero como de alojamiento web. De hecho, la página está en una máquina virtual dedicada, cortesía de una empresa de “webhosting”. Este modelo de software libre ha reunido una selecta comunidad por lo es difícil hallar información al respecto.
Existe una gran variedad de software disponible para trabajar con IPAM, y en este artículo veremos con detenimiento el software phpIPAM como una herramienta auxiliar, pero primero repasaremos los conceptos que envuelven las direcciones IP: sin este concepto abstracto Internet no existiría y la monitorización muchísimo menos.

Breve historia de phpIPAM

La primera versión pública fue la 0.1 y para noviembre de 2014 phpIPAM lanzó su versión 1.1 de la mano y obra del señor Miha Petkovsek; en enero de 2016 la versión 1.2 y en julio de 2017 se liberó la versión 1.3.

Hoy en día en casi todas las empresas y hogares existe una red de área local. En los albores del Internet se planificó el sistema de direcciones IP de tal manera que se hizo la previsión de reservar tres clases de redes para uso privado en las redes de área local. Dichas direcciones se denominan direcciones privadas. Cada organización puede por medio de estas direcciones privadas conectar sus dispositivos y cada dispositivo también puede tener una o más direcciones IP. (Por ejemplo, un ordenador portátil puede estar conectado por cable Ethernet, por su antena “wifi” integrada y además una antena “wifi” conectada por puerto USB; generalmente los servidores web son redundantes y tiene 2 conexiones Ethernet para tráfico de datos y al menos una conexión Ethernet para monitorización).

Las direcciones están repetidas en cada organización, pero no hay ningún problema porque no están conectadas entre sí y aquí es donde viene el Internet, la interconexión de las redes privadas por medio del protocolo de traslado de direcciones (NAT), ya que en Internet cada dirección IP pública es única y los enrutadores obtienen una dirección IP pública la cual “comparten” hacia lo interno de cada organización.

La práctica numérica (calculadoras IP)

¿Cuántas direcciones IP necesitamos en nuestra organización? Hay tres clases para uso privado:

  • Clase A: 10.0.0.0 a 10.255.255.255 (8 bits red, 24 bits anfitrión).
  • Clase B: 172.16.0.0 a 172.31.255.255 (16 bits red, 16 bits anfitrión).
  • Clase C: 192.168.0.0 a 192.168.255.255 (24 bits red, 8 bits anfitrión).

Dicho rápidamente, la clase A permite una sola red con millones de direcciones IPv4, la clase B permite 16 redes y cada una de ellas con miles de direcciones IP y la clase C permite cientos de direcciones IPv4 (exactamente 253 porque 0 y 255 tienen otros usos que veremos más adelante). Existen otras clases de redes que para este artículo no tienen relevancia; estás son la clase D, para multidifusión “multicast“, y clase E para investigación y desarrollo.

En la realidad para nuestras mentes, las redes clase C se adaptan a nuestras necesidades en el hogar y en las pequeñas empresas. Llevar la cuenta de una o dos docenas de dispositivos en el enrutador que comparte una dirección IP pública para toda la red privada es fácil y práctico de llevar y administrar.

Pero en los otros casos, miles y hasta millones de direcciones IP son una auténtica pesadilla, una empresa muy laboriosa. Para estos casos tenemos que seguir exactamente los mismos pasos que hizo la Corporación de Internet para la Asignación de Nombres y Números (ICANN): asignar a cada uno de los departamentos una subred y delegar así la autoridad en los jefes de departamento. Pero anotar y registrar todo sobrepasa fácilmente las capacidades de una hoja de cálculo y con ese motivo fue desarrollado el software phpIPAM.

Instalación de phpIPAM

A diferencia de los detalles históricos, hay muchos tutoriales sobre phpIPAM en la red, unos mejores que otros; nosotros lo probamos sobre Ubuntu 16 y de allí obtuvimos las capturas de imágenes que apreciáis. Lo primero que hicimos al finalizar la instalación fue subir nuestro propio logo para efectos de evaluación y rellenar los datos que identifican a nuestro servidor de prueba incluyendo el envío de correo electrónico, lo cual es muy importante para recibir las alertas, que no son tan frecuentes debido a la naturaleza del trabajo.

En resumen, se necesita un servidor de base de datos MySQL, un servidor web Apache, los adecuados permisos de muro de fuego firewall para cuando hagamos una exploración de nuestra red o redes de área local… e incluso las subredes, lo que nos lleva al siguiente punto.

Subredes (o mejor dicho: cómo funciona phpIPAM)

No todos trabajamos con empresas de alojamiento web o proveedoras de acceso a Internet, por lo que los ejemplos aquí tratados se basan en las direcciones privadas. Os aseguramos que todo lo aquí descrito se aplica en la Internet y hay organizaciones “haciendo dinero” con ayuda de phpIPAM, quien a su vez también dona la FreeBSD Foundation, así que todo esto es un ciclo sin fin.

Las tareas de phpIPAM son llevar la cuenta y almacenar la información en una base de datos MySQL de:

  • Nuestros dispositivos y sus direcciones IP.
  • Nuestros armarios o racks de ordenadores.
  • Nuestros circuitos (con ayuda de las API de Google Maps).
  • Soporta autenticación por LDAP, lo cual ya nos va ahorrando trabajo.
  • Llevar registro de las redes privadas virtuales.
  • Las NATs que tengamos creadas para que nuestros equipos se conecten a lo externo.
  • ¡Incluso tiene para uno hacer anotaciones al resto del grupo en una suerte de micro Wikipedia! (Aunque no la recomendamos para llevar una gestión de incidencias, tal vez se podría llevar en orden cronológico tipo causa/efecto/solución para no tropezar dos veces con las mismas piedras).
  • También las subredes que tengamos creadas.

Para hablar de las subredes, tarea rutinaria y de difícil sincronización entre equipos de trabajo, primero tenemos que explicar cómo se manejan y por qué su razón de ser. En 1980, los artefactos que se encargaban de conectar a Internet eran dispositivos muy básicos. Así surgió la necesidad de crear subredes de trabajo, pero los equipos no contaban con la tecnología necesaria. La solución fue crear máscaras de subred como una manera de que dichos dispositivos pudieran discernir de manera rápida si el mensaje o datagrama recibido pertenecía a la subred que le habían designado para trabajar.

Es por ello que la máscara permite distinguir en la dirección IP la parte que identifica la red de la parte que identifica al dispositivo, pero con la salvedad que lo hace con números binarios. Las máscaras de red tienen el mismo formato de las direcciones IPv4 pero siempre con valores para cada octeto siempre a uno; por ejemplo la máscara de red para una red privada clase A que vayamos a crear en phpIPAM sería la siguiente:

11111111.00000000.00000000.00000000

O sea, en notación decimal, 255.0.0.0 ya que nuestra red privada puede así contener millones de direcciones IPv4 (la multiplicación de los tres últimos octetos 255 x 255 x 255 = 16581375 aproximadamente porque la dirección cero identifica la red y 255 se utiliza para multidifusión). Ahora imaginemos que sí, que es posible que tengamos en nuestra organización al menos un millón de dispositivos. ¿Cómo harían los aparatos para mantener el transporte y envío de los paquetes o datagramas con tal volumen de usuarios?

La solución práctica de aquella época fue aplicar una operación AND (una operación AND es una simple multiplicación) a cada dirección de paquete y la máscara de red; así podremos determinar si es para la red o subred. Supongamos que un paquete va dirigido a 10.0.7.23 en nuestra red privada clase A:

00000010.00000000.00000007.00010111 <-paquete dirigido a 10.0.7.23
11111111.00000000.00000000.00000000 <- máscara de red 255.0.0.0
00000010.00000000.00000000.00000000 <-oper. AND resulta 10.0.0.0 (multiplicación)

Aquí hay algo que está implícito: nuestra máscara de red, “la que escogimos”, está implícita porque una red clase A el primer octeto identifica a la red, o sea 8 caracteres, por lo que en una notación llamada CIDR (que implica la dirección de nuestra red y la máscara de red juntas) se representa de la siguiente manera: 10.0.0.0/8

1. Creación de una subred privada

Ahora imagina que en nuestra red privada clase A necesitamos una subred donde colocaremos las máquinas para nuestras pruebas de programación. Para ello 253 direcciones IPv4 son más que suficientes, así que de mutuo acuerdo con nuestro equipo de trabajo nos asignan 10.0.0.0/24 esto quiere decir que en la red privada clase A 10.0.0.0 tendremos asignada una máscara de red 255.255.255.0 y volviendo al ejemplo numérico último, pero con nuestra máscara de red:

00000010.00000000.00000111.00010111 <-paquete dirigido a 10.0.7.23
11111111.11111111.11111111.00000000 <- máscara de red 255.255.255.0
00000010.00000000.00000111.00000000 <-oper. AND resulta 10.0.7.0
(no es nuestra red, nuestra red está identificada como 10.0.0.0)

2. Subred pública

A finales de siglo pasado nos dimos cuenta que las direcciones IPv4 estaban agotándose debido al crecimiento exponencial del Internet, así que la ICANN se percató de que a muchos Proveedores de Internet (“Internet Service Providers” o ISP) se le asignaron bloques muy grandes, lo cual ocasionó direcciones IPv4 ociosas. La decisión fue salomónica: asignar mediante máscaras de red para cada proveedor a fin de ajustar al tamaño adecuado y, aunque no lo creáis, sus ordenadores hacen estos cálculos millones de veces al día: comparar direcciones contra máscaras de red para saber si están en su subred (hoy en día, en realidad, hay otros mecanismos implementados en los ahora existentes módems, enrutadores, concentradores y repetidores, pero el concepto básico sigue siendo el mismo). Por eso comentamos que muchas organizaciones se benefician del uso de phpIPAM para registrar y planificar las direcciones asignadas.

3. Subredes con máscara de longitud variable

Si han comprendido hasta este punto lo que hemos explicado, algunos académicos o profesionales podrían escandalizarse. Podemos avanzar al concepto de máscaras de red de longitud variable: tan sencillo como que no están limitadas a los valores por octetos (8, 16 y 24) sino a cualquier otro valor, como por ejemplo 10.0.0.0/28 para nuestro ejemplo (os dejamos esta para que practiquéis con vuestra calculadora IP).

Creación de usuarios y grupos en phpIPAM

Después de esta base conceptual, comenzamos con recomendar que al trabajar con phpIPAM se comience con la creación de grupos y luego de usuarios. phpIPAM trae por defecto dos grupos creados: grupo de administradores y grupo de invitados. Esto simplemente nos permitirá agrupar nuestros usuarios a la hora de una búsqueda o visualización o para tener en nuestra mente algún tipo de orden; es decir, no provee ninguna otra utilidad de derechos de escritura o de herencia.

En la parte de creación de usuarios sí que tendremos el panorama completo: crear un usuario como usuario normal o administrador a la vez que nos mostrará los grupos que hayamos creado (recordando que no es vinculante la descripción del grupo con su clasificación de usuario, un grupo que se describa como “Administradores Remotos” no significa que sus usuarios tengan derechos de Administradores). Muchas veces la simplicidad es bienvenida, con utilizar los dos grupos que vienen creados podremos trabajar a menos que la organización sea extraordinariamente grande.

Al crear un usuario nos mostrará la manera sobre cómo se autenticarán nuestros usuarios y solo veremos dos opciones: por base de datos local y por Apache, que es un método anticuado y basado en ficheros que no recomendamos. Nuestra elección será por LDAP; sin embargo, primero deberemos activar en nuestro servidor Apache la librería php-ldap y reiniciar el servicio. En total son siete formas de autenticación posibles:

  • Local.
  • Apache.
  • Active Directory (AD).
  • LDAP.
  • NetIQ.
  • Radius.
  • SAMLv2.

Calculadora IP

Una vez hayamos abonado el terreno para trabajar podremos crear nuestras redes y subredes. La manera más fácil que observamos es ir a la calculadora IP integrada, introducir nuestro CIDR asignado o el que nosotros mismos crearemos en el caso de las redes privadas. phpIPAM calculará y mostrará todos los valores y se ofrecerá a crear una red con ese resultado e incluso sus subredes.

*Acotación importante: si se solapan algunas subredes o subredes phpIPAM nos lo indicará en un aviso de letras rojas.

Una vez hayamos colocado correctamente los valores CIDR podremos asignar a los grupos de usuario los derechos correspondientes sobre esa red o subred (notar que aquí sí se heredan los derechos de manera opcional). ¡Aquí resaltamos de nuevo la curiosa manera de manejar los derechos de lectura y escritura en phpIPAM!

Exploración de dispositivos en phpIPAM

Para facilitar las labores de agregado, phpIPAM tiene la utilidad de utilizar el programa ping para contactar a los dispositivos a nuestra red o subred creada previamente. Pero aquí viene lo interesante, dos maneras más una para los dispositivos que ya tengamos y otra para los nuevos dispositivos:

  • Por medio de agentes: esto es similar a Pandora FMS, es decir, un software instalado en cada máquina y adecuado al sistema operativo presente. En ambiente Windows el Active Directory nos permitirá masificar dicha tarea y en GNU/Linux por SSH y guiones bien diseñados podremos manejar a voluntad cientos o incluso miles de máquinas.
  • Aquí lo novedoso y muy útil:
    • Al instalar nuevos dispositivos podremos configurarlos con el nombre de la red o subred.
    • Con su respectivo guion se conecte con la API de phpIPAM.
    • Consulta la última dirección IP libre de ese rango.
    • Se auto asigna dicho valor.
    • Confirma a phpIPAM y queda registrado en la base de datos MySQL.
    • De esta manera phpIPAM se convierte en una especie de DHCP con la diferencia que solo se consulta una sola vez: cuando se instala la máquina o dispositivo virtual (también puede ser real, aplica igual pero evidentemente que un ser humano está encargado del proceso, esto sucedería al montar los “racks” de la granja de servidores, los cuales a su vez contienen las máquinas virtuales).
    • Actualmente hay máquinas virtuales que incluso pueden levantar nuestros propios clientes a voluntad en nuestras granjas de servidores (cada quien que escoja su sistema operativo para el hipervisor que tengamos configurado con phpIPAM).
    • Por supuesto también incluye rutinas de eliminación, en caso de que los dispositivos virtuales sean borrados o los dispositivos reales sean mudados o desincorporados de su labor.

Herramienta auxiliar

phpIPAM también puede registrar nuestros servidores DNS, el monitoreo de direcciones IP ociosas y los dispositivos, con un simple ping, fping o pear ping.

Utiliza agentes, registra y administra NATs así como un monitoreo básico con SNMP, pero primero deberemos configurar nuestro servidor Apache con el módulo php-snmp. Después ya podemos configurar los dispositivos a monitorear. Incluso nos permitirá crear SNMP traps, los cuales son útiles para la creación de alertas de eventos. Para una mejor comprensión dedicamos una entrada completa sobre los aspectos básicos a consultar por medio de SNMP.

Exportar e importar datos

Para finalizar, phpIPAM tiene la opción de importar o exportar datos en formato de hoja de cálculo de las secciones que necesitemos, o bien podremos exportar (mas no importar) la base de datos completa en formato SQL, ¡o en una gran hoja de cálculo!

En el caso de la importación de datos debemos seguir un protocolo bien detallado, a fin de tener una compatibilidad exacta de los datos:

Automatización en la exportación de datos

Aunque la opción de hoja de cálculo está disponible, recomendamos el desarrollar por medio de la API unos guiones que permitan extraer datos actualizados y saber si ha habido cambios en la red y cuáles son esos cambios, si hemos agregado o quitados dispositivos, nosotros mismos o nuestros clientes a quienes les hayamos delegado la creación de máquinas virtuales, y así poder monitorizar con Pandora FMS la infraestructura completa.

Para ir un paso más allá también podríamos crear un complemento o plugin para Pandora FMS que consulte directamente en la base de datos en busca de cambios, pero es un tema avanzado, no sería un plugin normal (evidentemente que con derechos de solo lectura, siempre de phpIPAM hacia Pandora FMS).

Conclusión

Auguramos un gran futuro si con phpIPAM, creado en software libre y al cual tenemos acceso a su código fuente, logramos obtener datos sobre qué dispositivos debemos monitorear de una manera casi completamente automatizada, manteniendo a los equipos de planificación y desarrollo de infraestructura completamente separados del equipo de monitoreo y mantenimiento.

Visualizamos entonces, ¡una excelente relación simbiótica entre ambos productos de software! Por favor, déjanos tus comentarios u opiniones y gustosamente os responderemos.

Shares