¿Estas cansado de tener que recordar las IP's de tu Red? ¿Posees un entorno de Red complejo con muchas subredes, VLANS y equipos? ¿Necesitas tener toda esa información organizada en un solo lugar para saber que IP's tienes libres y poderlas usar? Todas estas preguntas tienen una respuesta simple, phpIPAM. Pero que es phpIPAM:
Phpipam es una aplicación de gestión de direcciones IP web de código abierto (IPAM). Su objetivo es proporcionar una gestión de direcciones IP ligera, moderna y útil. Es una aplicación basada en php con base de datos MySQL, que utiliza bibliotecas jQuery, ajax y HTML5 / CSS3.
Características de phpIPAM.
IPv4/IPv6 IP address management Section / Subnet management Automatic free space display for subnets Visual subnet display Automatic subnet scanning / IP status checks PowerDNS integration NAT support RACK management
Domain authentication (AD, LDAP, Radius) Per-group section/subnet permissions Device / device types management RIPE subnets import XLS / CVS subnets import IP request module REST API Locations module

VLAN management VRF management IPv4 / IPv6 calculator IP database search E-mail notifications Custom fields support Translations ChangelogsEn este tutorial les mostrare como instalar la última versión (hasta la fecha) sobre un contenedor de Proxmox con Debian 9.
Requisitos de nuestro Contenedor CPU x 1 Core 512 MB RAM 8 GB Disco OS Debian 9Como pueden apreciar phpIPAM consume muy poco, ya que solo es una web que se instala sobre Apache/Nginx y como base de datos MariaDB/MySql. Antes de comenzar a instalar phpipam, asegúrese de cumplir los siguientes requisitos: Apache2 webserver with php support or Nginx with php-fpm Mysql server (5.1+) PHP:
version 5.3 supported to phpipam version 1.3.1 version 5.4 version 7.2 and higher supported from phpipam release 1.3.2 PHP modules:
pdo, pdo_mysql : Adds support for mysql connections session : Adds persistent session support sockets : Adds sockets support openssl : Adds openSSL support gmp : Adds support for dev-libs/gmp (GNU MP library) -> to calculate IPv6 networks ldap : Adds LDAP support (Lightweight Directory Access Protocol – for AD also) crypt : Add support for password encryption SimpleXML: Support for SimpleXML (optional, for RIPE queries and if required for API) json: Enable JSON support gettext: Enables translation filter : Adds filtering support pcntl : Add support for process creation functions (optional, required for scanning) cli : Enable CLI (optional, required for scanning and status checks) mbstring : Enable mbstring support php PEAR supportInstalación de phpIPAMComenzamos actualizando nuestro contenedor (CT) para siempre usar las últimas versiones.
apt update
apt upgradeAhora sigue nuestro servidor web que en este caso utilizaremos Nginx, ya que en la mayoría de los tutoriales sobre phpIPAM que existen usan Apache2.
apt install nginxComo se aprecia en los requisitos necesitamos PHP y como usamos Nginx también necesitaremos php-fpm, además de los módulos obligatorios.
apt install php7.0-fpm php7.0-curl php7.0-gd php7.0-mysql php7.0-cli php7.0-imap php7.0-ldap php7.0-apcu php7.0-xmlrpc php7.0-mbstring php7.0-xml php-cas php-pear php7.0-gmpPodemos comprobar que todo se cumple con este simple comando
php -iUna vez terminado configuraremos nuestros servicios de web.
nano /etc/php/7.0/fpm/pool.d/www.conf
Buscaremos la línea:
listen = /run/php/php7.0-fpm.sock
y lo sustituimos por:
listen = 127.0.0.1:9000Nota: Si desea puede dejar la conexion por socket al fpm, tendra que configurarlo asi tambien para su sitio usando
fastcgi_pass unix:/run/php/php7.0-fpm.sock;Ahora viene un paso que no parece tener importancia, pero les ahorrara muchos dolores de cabeza. Después de horas intentando la actualización automática del estado de las IP's me di cuenta del error que tenía, era algo tan sencillo como tener diferencia de hora entre el contenedor (CT) y la web de phpIPAM. Para evitar esto configuramos:
nano /etc/php/7.0/cli/php.ini
Buscamos:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
Definimos nuestra zona horaria
date.timezone = America/HavanaRepito solo haciendo esto lograran ver el estado real de sus IP's , ya que no habrá diferencias de hora y la tarea programada que usaremos no se perderá. Para comprobar q todo este bien entramos a la web y comparamos la hora de la web y del PC.
Editamos el fichero de configuración de Nginx para phpIPAM.
nano /etc/nginx/sites-enabled/phpipam
Dentro pondremos esto:
server {
listen 80 default_server;
#listen 443 ssl;
root /var/www/html;
index index.php;
server_name phpipam.mi.dominio.cu;
charset utf-8;
# <- your SSL Settings here!
#ssl_certificate /etc/ssl/ipam/server_crt.pem;
#ssl_certificate_key /etc/ssl/ipam/server_key.pem;
#ssl_trusted_certificate /etc/ssl/ipam/server_crt.pem;
#ssl_session_timeout 1d;
#ssl_session_cache shared:SSL:50m;
#ssl_session_tickets off;
# phpipam
location /phpipam/ {
try_files $uri $uri/ /phpipam/index.php;
index index.php;
}
# phpipam - api
location /phpipam/api/ {
try_files $uri $uri/ /phpipam/api/index.php;
}
#prise en charge PHP
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param SERVER_NAME $host;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}Les deje comentado la sesión de usar seguridad https mediante SSL, por si en un futuro desean activarla.
systemctl restart nginx
systemctl restart php7.0-fpm.serviceNos toca ahora instalar el servidor de bases de datos que usaremos en este caso sería MariaDB. Les mostrare como instalar la más reciente versión de la misma.
apt install software-properties-common dirmngrNecesitamos agregar al sourcelist:
deb http://mirror.zol.co.zw/mariadb/repo/10.4/debian stretch mainEl nuevo repositorio agregado para MariaDB usa su llave (key) por lo tanto la agregamos:
sin proxy
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
con proxy
apt-key adv --keyserver-options http-proxy=http://proxyIP:port/ --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xF1656F24C74CD1D8Actualizamos nuevamente y seguido instalamos MariaDB
apt update
apt install mariadb-serverComprobamos
root@phpIPAM:~# systemctl status mysql
* mariadb.service - MariaDB 10.4.0 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
`-migrated-from-my.cnf-settings.conf
Active: active (running) since Sat 2018-11-17 19:44:51 UTC; 8s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 31350 (mysqld)
Status: "Taking your SQL requests now..."
CGroup: /system.slice/mariadb.service
`-31350 /usr/sbin/mysqld
Nov 17 19:44:50 phpIPAM systemd[1]: Starting MariaDB 10.4.0 database server...
Nov 17 19:44:51 phpIPAM mysqld[31350]: 2018-11-17 19:44:51 0 [Note] /usr/sbin/mysqld (mysqld 10.4.0-MariaDB-1:10.4.0+maria~stretch) starting as process 31350 ...
Nov 17 19:44:51 phpIPAM systemd[1]: Started MariaDB 10.4.0 database server.Y podemos ver que nos instaló una versión más reciente que si hubiésemos usado un apt install mariadb-server
Aseguramos el servidor
mysql_secure_installation
Introducimos la clave de root para entrar al MySql, pondremos las misma que nos pidio
cuando se instalo. Pedira cambiarla, se la cambiamos por otra o ponemos la misma.
Luego respondemos que si (yes) a todas las preguntas que nos haga hasta salir.
Ahora lo configuramos
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'tu clave';
flush privileges;
quit
NOTA: Mas seguro es si usan otro usuario como phpipam por ejemplo.
Descargaremos la última versión de phpIPAM, a la fecha de este tutorial es la versión 1.3.2. Hay 2 métodos :
Puede descargar e instalar phpipam desde el repositorio oficial de Sourceforge y extraerlo a su directorio de servidor web. O simplemente usar GitHub:[root@ipam /]# GIT clone --recursive https://github.com/phpipam/phpipam.git /var/www/html/phpipam
[root@ipam /]# cd /var/www/html/phpipam
[root@ipam /var/www/html/phpipam]# git checkout -b 1.3 origin/1.3Usaremos el 1er método ya que es el más sencillo. Vamos al repositorio oficial de Sourceforge y bajamos phpipam-1.3.2.tar . Puede que tengan que usar algún método alternativo para bajarlo por estar cerrado para Cuba.
tar -xvf phpipam-1.3.2.tar -C /var/www/htmlLa web de phpIPAM tiene una plantilla de configuración, nos basaremos en ella y la copiaremos para editarla:
cp /var/www/html/phpipam/config.dist.php /var/www/html/phpipam/config.php
nano /var/www/html/phpipam/config.php
Buscar en database connection details y editar
$db['host'] = "localhost";
$db['user'] = "phpipam"; #cambiar a root
$db['pass'] = "phpipamadmin"; #clave de root q usamos con mariadb
$db['name'] = "phpipam";
Buscar en BASE definition if phpipam is not in root directory (e.g. /phpipam/)
cambiar a:
if(!defined('BASE'))
define('BASE', "/phpipam/");Daremos permisos a las carpetas de phpIPAM para que Nginx las use
chown -R www-data:www-data /var/www/html/Finalmente nos queda entrar a la web usando http://ip_phpipam/phpipam

En la 1era pantalla nos preguntara si queremos hacer una instalación nueva o subir de versión. Le diremos que instalación nueva, seguido usaremos la opción de instalación automática de las bases de datos. En la cual debemos llenar los datos del usuario que usamos para entrar y crear bases de datos (root) y la clave ('tu clave') que le definimos al configurarlo. Si todo esta correcto se crearan las bases de datos y seguido nos pedirá introducir la clave del usuario admin. Finalmente nos autenticamos como admin y veremos el dashboard de phpIPM. Aquí les dejo una captura final.

La interfaz es muy fácil de entender, pueden borrar todos los ejemplos que trae luego de entender su filosofía. Lo primero es crearte sección o editar la customer que trae, le ponemos nuestros datos. Dentro de ella podemos crear carpetas en orden jerárquico y en cada carpeta ubicar nuestras subredes y VLANS para un mayor orden.
Ahora les mostrare como usar [glossary]FPing[/glossary] para escanear sus redes. Primero lo instalamos:



apt install fping
Lo probamos en nuestro CT haciendo ping a cualquier IP de nuestra red
root@phpipam:~# fping 10.122.193.2
10.122.193.2 is alive
En la web del phpIPAM configuramos que usaremos fping y no ping. Vamos a:
Menú de Administración, phpIPAM setting y nos desplazamos al final donde se encuentra las características del [glossary]ICMP[/glossary].
Es muy importante definir el camino correcto al comando fping(/usr/bin/fping). En el tipo de escaneo seleccionamos fping. ¿Como puedo automatizar el proceso de refrescamiento y escaneo de IP?
-Disponibilidad automática de host y verificación de descubrimiento
En primer lugar, se recomienda el soporte de pcntl para php cli para que phpipam pueda hacer verificaciones paralelas de icmp, esto reduce considerablemente el tiempo requerido para verificar el estado. Puede verificar si su instalación está bien con el siguiente comando:php -m | grep pcntlAhora tiene que seleccionar qué subredes deben buscar estados para los hosts configurados.Vaya a editar subred y marque "Comprobar el estado de los hosts". Esto le indicará al script cron que verifique el estado de los hosts dentro de esta subred. "Descubrir nuevos hosts" intentará encontrar nuevos hosts para esta subred y los agregará automáticamente a la base de datos de phpipam.
Finalmente creamos una tarea en el cron
nano /etc/crontab
Agregamos las siguientes tareas:
# NUEVOS ESCANEADOS DE SUBREDES
*/30 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/discoveryCheck.php
#
# CHEQUEOS DE HOST EXISTENTES
*/15 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/pingCheck.php
#
# RESUELVE LAS DIRECCIONES IP QUE SE ENCUENTRAN (NOTA: Este es un proceso separado, todos juntos desde la verificación de host up/down)
*/30 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/resolveIPaddresses.php
#
# BACKUP DE LA TABLA IP, Y PURGAR BACKUPS MAYORES DE 10 DÍAS
#
@daily root /usr/bin/mysqldump -u root -p[claveBD] phpipam > /var/www/html/phpipam/db/bkp/phpipam_bkp_$(date +"\%y\%m\%d").db
@daily root /usr/bin/find /var/www/html/phpipam/db/bkp/ -ctime +10 -exec rm {} \;Se puede apreciar que cada 15 minutos se escaneara la subred chequeando el estado de esas direcciones IP's. Cada 30 minutos se escanea en busca de nuevas direcciones IP's que agregar. Los demás son muy fácil de entender. Queda por ustedes seguir configurando esta útil herramienta que le facilita la vida a cualquier SysAdmin.
Como actualizar su phpIPAM
En general, actualizar phpipam es un proceso que contiene 3 pasos separados:
Copia de seguridad de la base de datos de y del archivo config.php
Actualizar el código phpIPAM
Actualizar la base de datos phpIPAM
El primer paso ya esta cubierto porque en el CRON les deje una tarea de salva diaria de la Base de Datos. Salvamos el archivo config.php
cd /var/www/html/phpipam/
cp config.php /root/config.phpBajamos la version nueva y la copiamos a /var/www/html
tar -xvf phpipam-1.X.tar -C /var/www/htmlRestauramos si es necesario la configuración.
cp /root/config.php /var/www/html/phpipam/config.phpAbra el navegador y siga el procedimiento de actualización.
Finalmente si todo fue satisfactorio podemos entrar al dashboard y tendremos el phpIPAM actualizado.
Nota: Agradecimientos a Héctor (AKA @nihilanthlnxa) y a Jorge de la Cruz por mostrarme la existencia de este maravilloso programa. Si desean hacer este mismo tutorial pero usando Ubuntu, Apache2 y MySQL pueden hacerlo aquí en el blog de Jorge.
alex out







No comments yet