
Saludos, hoy os traigo uno de esos posts con utilidades y funcionalidades que nos hacen la vida más sencilla. En este caso vengo a hablaros de phpIPAM, un gestor de IPs, VLAN, y Networking en general que hará las delicias de todos aquellos que tienen un entorno de red complejo. En mi caso lo voy a usar para el Homelab que tengo, ya que muchas veces al tener tantas IP, y si nos ponemos a jugar con VLAN, recordar todo se complica.
Como en todas las entradas que son muy extensas, aquí os dejo el menú para hacer este artículo más sencillo de leer:
- Características de phpIPAM
- Requisitos a nivel de VM
- Requisitos a nivel de OS
- Instalando phpIPAM
- Vistazo rápido a phpIPAM y configuraciones básicas
Características de phpIPAM
Tengo que admitir que para ser un producto open-source, contiene todas las características que podríamos necesitar de un producto de pago, recomiendo su instalación para sentir todo el potencial.
[three_first]
-
IPv4/IPv6 IP address management
-
Section / Subnet management
-
Automatic free space display for subnets
-
Visual subnet display
-
Automatic subnet scanning for new hosts
-
Automatic status checks
-
Changelogs
[/three_first][three_second]
-
Domain authentication (AD, LDAP)
-
Per-group section/subnet permissions
-
Device / device types management
-
RIPE subnets import
-
XLS / CVS subnets import
-
IP request module
-
API
[/three_second][three_third]
-
VLAN management
-
VRF management
-
IPv4 / IPv6 calculator
-
IP database search
-
E-mail notifications
-
Custom fields suppor
-
Translations
[/three_third]
Requisitos a nivel de VM
A nivel de VM, phpIPAM consume realmente poco, ya que se instala sobre Apache y MySQL o MariaDB, por lo que si no vamos a manejar cientos de miles de subnets, donde acceden miles de diferentes clientes, creo que unos recursos moderamos serán más que suficiente:
- 1vCPU
- 1GB RAM
- 30GB Disco Eager Zeroed Thick
- VMXNET3
- PVSCSI
Requisitos a nivel de OS
- Apache2 webserver with php support
- Mysql server (5.1+)
- php version 5.3 or later with following php modules enabled:
- 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)
- php PEAR support
Instalando phpIPAM
Instalar phpIPAM no es muy complicado, pero es cierto que necesitaremos todos los componentes en orden antes de instalar la aplicación final, por lo que vamos a ver cómo instalar, Apache, MariaDB y PHP, o lo que comúnmente se llama, un servidor LAMP.
Instalando Apache, MariaDB y PHP
Lo primero que tendremos que hacer después de la instalación de Ubuntu 16.04 LTS, es realizar una actualización de los paquetes y un upgrade de los paquetes que ya tenemos instalados:
sudo su
apt-get update
apt-get upgrade
En mi caso tenía casi 100MB adicionales que actualizar en mi sistema, puede variar referente a vosotros, pulsaremos Yes para actualizar los paquetes:
The following packages have been kept back:
apport apt apt-utils bind9-host byobu curl dnsutils gcc-5-base initramfs-tools initramfs-tools-bin iproute2 iptables isc-dhcp-client isc-dhcp-common libapt-pkg5.0 libcurl3-gnutls libgcc1 libgnutls-openssl27 libldap-2.4-2 librtmp1
libstdc++6 linux-generic linux-headers-generic linux-image-generic lvm2 ntfs-3g
The following packages will be upgraded:
accountsservice acpid apparmor apt-transport-https at base-files bash-completion bsdmainutils bsdutils btrfs-tools ca-certificates command-not-found command-not-found-data console-setup console-setup-linux coreutils cpio cron dash
dbus debianutils dh-python distro-info-data dmeventd dmidecode dmsetup dosfstools dpkg ethtool findutils fonts-ubuntu-font-family-console fuse geoip-database gettext-base git git-man gnupg gpgv grep groff-base hdparm ifupdown info
init init-system-helpers initscripts install-info irqbalance iso-codes keyboard-configuration klibc-utils kmod krb5-locales language-selector-common less libaccountsservice0 libacl1 libapparmor-perl libapparmor1 libapt-inst2.0
libasn1-8-heimdal libasprintf0v5 libaudit-common libaudit1 libblkid1 libbsd0 libc-bin libc6 libdbus-1-3 libdbus-glib-1-2 libdevmapper-event1.02.1 libdevmapper1.02.1 libdrm2 libedit2 libelf1 libexpat1 libfdisk1 libfuse2 libgcrypt20
libgeoip1 libglib2.0-0 libglib2.0-data libgpg-error0 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libk5crypto3 libklibc libkmod2
libkrb5-26-heimdal libkrb5-3 libkrb5support0 liblvm2cmd2.02 libmount1 libmpdec2 libmpfr4 libncurses5 libncursesw5 libnettle6 libnewt0.52 libnih1 libnl-3-200 libnl-genl-3-200 libnuma1 libpam-modules libpam-modules-bin libpam-runtime
libpam-systemd libpam0g libparted2 libpci3 libpcre3 libperl5.22 libplymouth4 libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 libprocps4 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libpython3-stdlib
libpython3.5-minimal libpython3.5-stdlib libreadline5 libreadline6 libroken18-heimdal libsasl2-2 libsasl2-modules libsasl2-modules-db libseccomp2 libselinux1 libsemanage-common libsemanage1 libsmartcols1 libsqlite3-0 libssl1.0.0
libsystemd0 libtasn1-6 libtinfo5 libudev1 libutempter0 libuuid1 libwind0-heimdal libxml2 linux-firmware locales login lsb-base lsb-release lshw ltrace manpages memtest86+ mount mtr-tiny multiarch-support nano ncurses-base ncurses-bin
ncurses-term openssh-client openssh-server openssh-sftp-server openssl parted passwd pciutils perl perl-base perl-modules-5.22 plymouth plymouth-theme-ubuntu-text policykit-1 popularity-contest ppp procps psmisc python-apt-common
python3 python3-apport python3-apt python3-chardet python3-commandnotfound python3-dbus python3-debian python3-distupgrade python3-gdbm python3-gi python3-minimal python3-newt python3-pkg-resources python3-problem-report
python3-pycurl python3-requests python3-six python3-software-properties python3-update-manager python3-urllib3 python3.5 python3.5-minimal readline-common resolvconf rsync rsyslog screen sed software-properties-common ssh-import-id
strace sudo systemd systemd-sysv sysv-rc sysvinit-utils tmux tzdata ubuntu-minimal ubuntu-release-upgrader-core ubuntu-standard ucf udev ufw unattended-upgrades update-manager-core update-notifier-common util-linux uuid-runtime vim
vim-common vim-runtime vim-tiny w3m watershed whiptail wpasupplicant xdg-user-dirs xfsprogs xkb-data
244 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.
Need to get 116 MB of archives.
After this operation, 7,082 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Vamos a instalar ahora MariaDB y todos los componentes necesarios, he seleccionado MariaDB en vez de MySQL ya que MariaDB es un proyecto más maduro, y con mejor rendimiento.
apt-get -y install mariadb-server mariadb-client
Una vez termine la instalación, es el momento de securizar nuestro entorno de MariaDB, lanzando el siguiente comando:
mysql_secure_installation
Que nos hará una serie de preguntas básicas sobre cómo queremos proteger nuestro sistema, aquí la manera en la que yo lo he securizado
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Es la hora de la instalación de Apache2, y aunque yo hubiera preferido nginx, no he encontrado los pasos necesarios para hacero funcionar correctamente, por lo que Apache2 será nuestro Servidor Web para phpIPAM:
apt-get -y install apache2
Una vez termina la instalación de Apache2, vamos a necesitar adicionalmente PHP y las siguientes librerias:
apt-get -y install php7.0 libapache2-mod-php7.0
Cómo se puede leer en los requerimientos de phpIPAM, necesitamos adicionalmente las siguientes librerias para hacerlo funcionar, es posible que algunas de ellas ya estuvieran instaladas con el comando anterior, pero mejor cerciorarse:
apt-get -y install php7.0-cli php7.0-curl php7.0-gmp php7.0-json php7.0-ldap php7.0-mcrypt php7.0-mysql php7.0-xml php-pear
Ya podriamos irnos a nuestro navegador e introducir la IP de nuestro Server, o el hostname:
Para securizar el entorno, ejecutaremos los siguientes comandos:
a2enmod ssl
a2ensite default-ssl
Y si ahora abrimos el navegador de nuevo, pero usando el protoclo https:// podremos ver que nos muestra el sitio mediante SSL, aunque el certificado nos dará error al ser un SSL auto-firmado
Por último, y para hacer más sencilla la tarea de administrar MariaDB, instalaremos el conocido phpmyadmin:
apt-get -y install phpmyadmin php-mbstring php-gettext
Durante el proceso de instalación nos preguntará que Servidor Web tenemos, en este caso seleccionaremos Apache2
Seleccionaremos la opción por defecto en esta pregunta:
En este momento podremos introducir una contraseña, o dejar el campo en blanco para que genere un contraseña automática
Necesitaremos adicionalmente los modulos de mcrypt y mbstring para el correcto funcionamiento de phpIPAM
phpenmod mcrypt
phpenmod mbstring
service apache2 restart
Desde hace ya unas ediciones de MariaDB, el usuario root no permite el login fuera de la Terminal, por lo que no podemos usarlo en aplicaciones, etc. Aunque este tema de seguridad es realmente muy bueno y nos fuerza a crear un usuario adicional para nuestras aplicaciones, en este caso he preferido editar el usuario de root para que permita el login con contraseña desde localhost:
echo "update user set plugin='' where User='root'; flush privileges;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql
Y después reiniciaremos el servicio de MariaDB
service mysql restart
Ya podríamos irnos a un navegador e introducir la IP de nuestro servidor seguido por la ruta de phpmyadmin, como en la imagen
Descargando e instalando phpIPAM
Deberemos descargar la última versión de phpIPAM, a la hora de escribir este artículo se hace con la versión 1.2.1. Visitar su proyecto en Sourceforge para conocer la última Release.
cd /tmp
wget https://sourceforge.net/projects/phpipam/files/phpipam-1.2.1.tar
Vamos ahora a descomprimirlo directamente desde /tmp a la carpeta correcta de la aplicación
tar -xvf phpipam-1.2.1.tar -C /var/www/html
Es la hora de editar el fichero de configuración, pero como no existe ninguno, nos basaremos en el template y lo copiaremos para editarlo posteriormente:
cp /var/www/html/phpipam/config.dist.php /var/www/html/phpipam/config.php
vi /var/www/html/phpipam/config.php
Las dos únicas secciones que debemos editar son las credenciales de la Base de Datos
/* database connection details
******************************/ $db[‘host’] = “localhost”; $db[‘user’] = “root”; $db[‘pass’] = “YOURPASS”; $db[‘name’] = “phpipam”; $db[‘port’] = 3306;
Y la ruta donde hemos ubicado phpipam:
/**
* BASE definition if phpipam
* is not in root directory (e.g. /phpipam/)
*
* Also change
* RewriteBase / in .htaccess ******************************/ if(!defined(‘BASE’)) define(‘BASE’, “/phpipam/”);
Vamos a editar el fifhcero .htaccess también para indicar donde hemos instalado phpipam:
vi /var/www/html/phpipam/.htaccess
# RewriteBase /phpipam/
Por último deberemos editar el fichero de configuración de Apache2, y añadir lo siguiente al final del fichero:
vi /etc/apache2/sites-available/000-default.conf
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Activaremos el módulo de rewrite y reiniciaremos Apache2
root@phpipam:/tmp# a2enmod rewrite
root@phpipam:/tmp# service apache2 restart
Es el turno de irnos a nuestro navegador e introducir la nueva URL, por ejemplo, https://SERVERIP/phpipam donde nos cargará en proceso de instalación, seleccionaremos la primera opción, ya que es la más cómoda:

Introduciremos ahora las credenciales que tengamos para acceder a nuestra DB, en mi caso con el usuario root
El siguiente paso será seleccionar una contraseña para el usuario admin, y podemos editar los siguientes campos, aunque en este caso los he dejado por defecto, para editarlos posteriormente:
Vistazo rápido a phpIPAM y configuraciones básicas
Ya está todo listo, y podremos hacer login con las credenciales que acabamos de crear 
Nada más entrar, podemos ver un bonito Dashboard, que incluye ya algunos ejemplos de VLANs, Clientes, Rangos de IP, etc.
Cada sección se muestra en forma de pestaña, y cada sección incluye Carpetas, Rangos de IPs, etc. ¡Muy completo!
Si usamos el menú de la derecha, Administration, podremos ver todas las opciones que la herramienta nos permite, debo reconocer que no he visto un proyecto tan completo como este nunca.
Por ejemplo, he creado una nueva sección llamada HOMELAB, y dentro de ella estoy creando una subnet, con todos los datos necesarios y las opciones que necesito.
Una vez creada la subnet, vemos que nos muestra un precioso dashboard con una tarta que nos mostrará las estadísticas de IPs usadas v.s. las no usadas, y además un mapa con cada de las IPs, que nos hará identificar de manera rápida las IPs consumidas.
Si nos fijamos bien, hay un pqueño icono, a la derecha del icono verdecito, que nos permite escanear todo nuestro Rango, en busca de IPs y máquinas activas
Pulsaremos Scan Subnet para comenzar el proceso
Pasados unos segundos, podremos ver el resultado de la búsqueda, en mi caso como he marcado un DNS para el Rango, cuando cree la subnet, el DNS me ha devuelto los Hostnames que conoce, pero si no fuera así, podemos incluir manualmente los nombres en Hostname, o una Descripción en caso que tengamos varios Clientes, de manera que será más sencillo de analizar después
Y así es cómo quedaría el mapa de mi Homelab con las IPs usadas, y donde nunca más deberá pensar que IP he usado para determinados servicios o labs, cuales están usadas, etc.

En las opciones de phpIPAM, tendremos además la opción de cambiar la interfaz a Castellano, en caso de que lo necesitéis
Nada más amigos, espero que esta entrada os guste, y si estabáis usando Excels, como yo hacía hasta que encontré esta aplicación, dejéis un comentario con vuestras impresiones.
Especial gracias a Alex – https://ithinkvirtual.com/2016/05/08/installing-phpipam-on-ubuntu-16-04/






Gracias por el articulo, a ver si con esto soy capaz de organizar las IP’s de la oficina
Saludos David, eso espero, yo ya tengo mi entorno a punto, especialmente el autodiscover, que buena aplicación.
Un saludo
Hola Oscar
Como siempre una 10 en el tutorial y en la utilidad de la herramienta.
Es posible que no se pueda cambiar de idioma a persar de tenerlos instalados?
a mi por mucho que trillo no me lo cambia a otro que no sea el “ingle”
algun consejo?
Saludos Jose,
Soy Jorge, Oscar Mas ya no escribe desde hace tiempo en el Blog 😛 Es normal que le eches de menos, yo también. Luego echo un vistazo en casa, de ser así, supongo que se podrá abrir una incidencia en su Github.
Un saludo
Gracias Jorge.
Disculpa la confusion. Estaba revisando otro post a la vez de oscar y lo tenia en mente.
Buenas,
Un post muy detallado.
Indicar que la linea del fichero de configuración del apache que indico a continuación me daba error y hacia que el servicio no levantara, por lo que siguiendo el post original que referencias, he optado por obviarla, con buenos resultados hasta el momento:
Order allow,deny
Ahora toca probar en detalle la funcionalidad de la solución.
Saludos.
Dejame ojear y ahora lo edito, muchas gracias !!
Muy buenas Jorge.
Antes de nada, gracias por el tutorial, es una maravilla.
Me he atascado en el siguiente paso con este mensaje de error:
echo “update user set plugin=” where User=’root’; flush privileges;” | mysql –defaults-file=/etc/mysql/debian.cnf mysql
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
Tienes alguna sugerencia??
Gracias.!!!
Saludos Alejandro,
Muchas gracias, según me lo pegas, parece que las comillas se han cambiado y no son las correctas, intenta copiar/pegar exactamente el contenido tal cual lo ves aquí:
http://pastebin.com/DSQ8yejd
Un saludo
Gracias Jorge, todo funciono correctamente.
El mejor tutorial que encontré, muchas gracias por tu tiempo para compartir esto, no sabes el ahorro en tiempo que nos haces a los que tenemos miles de cosas que hacer.
Lo he instalado ahora y me parece de maravilla!
Saben alguna forma de hacer funcionar el Scaner ?? Desearia que en la parte de Detalles de la IP me mostrara la direccion MAC y el Hostname del computador con esa IP.
Alguna idea de como lograrlo ??
Gracias de antemano, saludos.
Hola,
me sirvió mucho tu post para instalar el software, ahora lo estoy configurando pero ocurre un problema, que al agregar una subnet luego del escaneo todo OK los host los ve Online, pero luego los marca como warning y luego offline.
le baje los intervalos de ping intervals y ocurre lo mismo.
¿tienen alguna solución a este problema?
muchas gracias !!!
no ha arrancado!!!
service apache2 restart
Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details.
Volvi a reisntalar todo y sin reiniciar el Apache2 todo se instalo perfectamente hasta el phpipam, pero si salia un advertencia que tenia que reiniciar el servicio de apache2 y cuando lo reinicie .. chao murio el apache.
apache2.service – LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since mar 2017-10-10 18:22:08 COT; 12ms ago
Docs: man:systemd-sysv-generator(8)
Process: 22470 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)
oct 10 18:22:08 IPAM apache2[22470]: * The apache2 configtest failed.
oct 10 18:22:08 IPAM apache2[22470]: Output of config test was:
oct 10 18:22:08 IPAM apache2[22470]: AH00526: Syntax error on line 30 of /etc/apache2/si…nf:
oct 10 18:22:08 IPAM apache2[22470]: Invalid command ‘<Directory’, perhaps misspelled…ion
oct 10 18:22:08 IPAM apache2[22470]: Action ‘configtest’ failed.
oct 10 18:22:08 IPAM apache2[22470]: The Apache error log may have more information.
oct 10 18:22:08 IPAM systemd[1]: apache2.service: Control process exited, code=exited status=1
oct 10 18:22:08 IPAM systemd[1]: Failed to start LSB: Apache2 web server.
oct 10 18:22:08 IPAM systemd[1]: apache2.service: Unit entered failed state.
oct 10 18:22:08 IPAM systemd[1]: apache2.service: Failed with result ‘exit-code’.
Hint: Some lines were ellipsized, use -l to show in full.
Estimado excelente tuto solo que al instalar los php debemos poner el mas actualizado
Sin duda Claudio
Muchas Gracias Jorge, sin duda muy buen tutorial ya he comenzado a organizar las IP de mi empresa..!! Saludos
Que bueno suena Carlos, un saludo!
Gracias jorge , ya lo tengo instalado pero veo que los tiempos de sesion activa duran muy poco menos de 5min, como podria aumentar los tiempos de sesion activa en el phpipam? Saludos desde Argentina.
Saludos, parece que tiene que ver con el timeout de PHP en general, edita esto en tu php.ini
session.use_cookies = 1session.cookie_lifetime = 86400
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 86400
Y dentro de PHPIPAM, asegurate que session.gc_maxlifetime tiene tambien un dia