
Gérer efficacement un plan d’adressage IP devient rapidement un défi technique de taille lorsque le parc informatique d’une organisation s’agrandit. Plus de besoin est souvent synonyme de plus de serveurs physiques ou virtuels. Et si vous respectez les bonnes pratiques, votre réseau doit être segmenté en plusieurs sous-réseau.
La gestion des adresses IP à l’aide d’un fichier Excel, c’est possible, vous l’avez surement déjà vu, mais ce n’est pas suffisamment efficace. C’est précisément pour répondre à ces besoins métier que des outils de type IPAM (IP Address Management) ont été conçus. Parmi les solutions disponibles sur le marché, phpIPAM (développée en PHP, comme son nom l’indique), et d’autres comme Netbox et GestióIP.
Cet outil offre une interface web pour centraliser la gestion et le suivi de vos sous-réseaux, vos VLANs, vos baies de brassage et l’ensemble de vos équipements connectés. Ceci est vrai pour un seul site, plusieurs sites et même pour une gestion multi-clients.
L’objectif de ce tutoriel est de vous accompagner dans le déploiement de phpIPAM avec Docker. Pour une présentation complète de cette solution, je vous invite à regarder ma vidéo :
Avant de commencer, voici des informations sur les fonctionnalités clés de phpIpam :
Gestion des IP et des réseaux :
Gestion des adresses IP : prise en charge complète de l’IPv4 et de l’IPv6.
Gestion de la topologie : création de sections (sites), de réseaux et de sous-réseaux (imbrication).
Visualisation : affichage visuel des sous-réseaux et calcul automatique de l’espace libre.
Automatisation : scan automatique des sous-réseaux pour la découverte des hôtes et vérification de l’état (statut) des adresses IP.
Couche 2 & Routage : déclaration des VLANs et des VRF (Virtual Routing and Forwarding).
Outils réseaux : calculateur IPv4, adresse MAC lookup, etc.
Infrastructure et Matériel (DCIM)
Gestion des baies (Racks) : modélisation visuelle de vos baies informatiques, avec intégration des équipements.
Inventaire : intégration – manuelle – des équipements réseaux/serveurs et création de types d’équipements sur mesure.
Cartographie : module dédié pour gérer les emplacements géographiques et les salles physiques.
Administration, sécurité et audit
Authentification centralisée : connexion au portail via Active Directory (AD), LDAP ou Radius.
Contrôle d’accès granulaire : gestion des permissions d’accès par groupes, applicables sur des sections ou des sous-réseaux spécifiques.
Traçabilité : moteur de recherche global dans la base de données IP, notifications par e-mail et journal détaillé des modifications (changelogs).
Intégrations, importations et personnalisation
API & DNS : API REST complète pour scripter vos actions et intégration native avec PowerDNS.
Imports de masse : importation facile de sous-réseaux depuis des bases RIPE ou via des fichiers tableurs XLS / CSV.
Flexibilité : prise en charge de la création de champs personnalisés pour adapter l’outil à votre entreprise.
Multi-langues : interface disponible en plusieurs langues.
Installation de phpIPAM avec Docker
L’installation par conteneurs Docker nécessite de configurer plusieurs services qui vont interagir ensemble. phpIPAM a besoin d’un serveur web avec PHP, d’un service pour la planification (cron) pour scanner les réseaux et vérifier l’état des équipements, et d’une base de données pour stocker les informations (MariaDB).
Commencez par créer un répertoire dédié à votre projet sur votre serveur, puis déplacez-vous à l’intérieur de ce dossier :
mkdir /opt/docker-compose/phpipam
cd /opt/docker-compose/phpipam
Créez trois sous-répertoires pour la persistance des données :
mkdir /opt/docker-compose/{database,logo,ca}
Ensuite, à la racine du projet, créez un fichier nommé docker-compose.yml à l’aide de votre éditeur de texte favori (comme Nano ou Vim) :
nano docker-compose.yml
Insérez la configuration suivante dans le fichier. Cette configuration décrit les trois conteneurs nécessaires au bon fonctionnement de l’application :
services:
phpipam-web:
container_name: phpipam-web
image: phpipam/phpipam-www:latest
ports:
– “80:80”
environment:
– TZ=Europe/Paris
– IPAM_DATABASE_HOST=phpipam-mariadb
– IPAM_DATABASE_PASS=MotDePasseBaseDeDonnees
– IPAM_DATABASE_WEBHOST=%
restart: always
volumes:
– ./logo:/phpipam/css/images/logo
– ./ca:/usr/local/share/ca-certificates:ro
depends_on:
– phpipam-mariadb
phpipam-cron:
container_name: phpipam-cron
image: phpipam/phpipam-cron:latest
environment:
– TZ=Europe/Paris
– IPAM_DATABASE_HOST=phpipam-mariadb
– IPAM_DATABASE_PASS=MotDePasseBaseDeDonnees
– SCAN_INTERVAL=1h
restart: always
volumes:
– ./ca:/usr/local/share/ca-certificates:ro
depends_on:
– phpipam-mariadb
phpipam-mariadb:
container_name: phpipam-mariadb
image: mariadb:latest
environment:
– MYSQL_ROOT_PASSWORD=MotDePasseRoot
restart: always
volumes:
– ./database:/var/lib/mysql
Ce fichier Docker Compose permet de :
Déployer trois conteneurs nécessaires au bon fonctionnement de phpIPAM : celui pour le serveur web, celui pour les tâches planifiées (cron, notamment pour effectuer un scan toutes les heures) et celui pour la base de données. Les images Docker les plus récentes seront utilisées pour chaque composant (ajustez si vous souhaitez fixer les versions).
Pour initialiser l’application, vous devrez spécifier le mot de passe associé au compte root MariaDB spécifié au niveau de la directive MYSQL_ROOT_PASSWORD du conteneur phpipam-mariadb.
Le conteneur phpipam-web expose le port 80, ce qui va permettre de se connecter à l’interface de phpIPAM en HTTP. Par la suite, vous pouvez affiner la configuration pour utiliser un certificat (via le dossier ca créé précédemment) et un accès HTTPS.
Enregistrez et fermez ce fichier.
Si vous désirez publier phpIPAM par l’intermédiaire d’un reverse proxy, c’est possible. Toutefois, vous devez veiller à ajouter le paramètre IPAM_TRUST_X_FORWARDED=true dans les variables d’environnement du conteneur phpipam-web.
L’exemple ci-dessous montre comment publier phpIPAM avec Traefik. Le réseau auquel est connecté Traefik se nomme frontend, tandis qu’un second réseau dédié aux communications internes entre les trois conteneurs de phpIPAM est utilisé aussi ; il est nommé phpipam-backend.
services:
phpipam-web:
image: phpipam/phpipam-www:latest
environment:
– TZ=Europe/Paris
– IPAM_DATABASE_HOST=phpipam-mariadb
– IPAM_DATABASE_PASS=${DB_PASSWORD}
– IPAM_DATABASE_WEBHOST=%
– IPAM_TRUST_X_FORWARDED=true
– IPAM_DISABLE_INSTALLER=1
restart: unless-stopped
volumes:
– ./logo:/phpipam/css/images/logo
– ./ca:/usr/local/share/ca-certificates:ro
depends_on:
– phpipam-mariadb
networks:
– frontend
– phpipam-backend
labels:
– traefik.enable=true
– traefik.http.routers.phpipam-https.rule=Host(`phpipam.it-connectlab.fr`)
– traefik.http.routers.phpipam-https.entrypoints=websecure
– traefik.http.routers.phpipam-https.tls=true
– traefik.http.routers.phpipam-https.tls.certresolver=ovhcloud
– traefik.http.services.phpipam-https.loadbalancer.server.port=80
– traefik.docker.network=frontend
phpipam-cron:
image: phpipam/phpipam-cron:latest
environment:
– TZ=Europe/Paris
– IPAM_DATABASE_HOST=phpipam-mariadb
– IPAM_DATABASE_PASS=${DB_PASSWORD}
– SCAN_INTERVAL=1h
restart: unless-stopped
volumes:
– ./ca:/usr/local/share/ca-certificates:ro
depends_on:
– phpipam-mariadb
networks:
– phpipam-backend
phpipam-mariadb:
image: mariadb:latest
environment:
– MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
– MARIADB_DATABASE=phpipam
restart: unless-stopped
volumes:
– ./database:/var/lib/mysql
networks:
– phpipam-backend
networks:
frontend:
external: true
phpipam-backend:
internal: true
Avec cette version, j’ai également utilisé un fichier .env pour définir les mots de passe dans des variables d’environnement (plus propre). Ainsi, mon fichier .env ressemble à ce qui est précisé ci-dessous et les variables sont appelées dans le Docker Compose.
DB_ROOT_PASSWORD=MotDePasseRootComplexe
DB_PASSWORD=MotDePasseBaseDeDonnees
Pour information, si vous n’ajoutez pas la ligne pour que phpIPAM fonctionne derrière un reverse proxy, vous obtiendrez cette erreur JQuery.
Une fois le fichier sauvegardé, vous pouvez lancer la création et le démarrage des conteneurs en arrière-plan à l’aide de la commande suivante :
docker compose up -d
Docker va procéder au téléchargement des images nécessaires, puis démarrer les conteneurs dans le bon ordre. Vous pouvez vérifier que tous les services sont actifs en tapant la commande docker compose ps.
Initialiser phpIPAM
Ouvrez ensuite un navigateur web et saisissez l’adresse IP de votre serveur (par exemple, http://192.168.1.200). Vous serez accueilli par la page d’installation de phpIPAM. Voici les étapes à suivre dans l’assistant web.
Commencez par cliquer sur le bouton nommé “New phpipam installation”.
Sélectionnez l’option “Automatic database installation” pour que l’outil crée lui-même le schéma de la base de données.
Renseignez les identifiants de connexion à la base. L’hôte est phpipam-mariadb (le nom du service Docker), l’utilisateur est root, et le mot de passe est celui que vous avez défini dans le fichier Docker Compose (évoqué précédemment). Si tout est OK, vous devriez obtenir le message “Database installed successfully.”
Note : dans le cas où un message indiquant que la base de données existe déjà s’affiche, cochez l’option “Drop existing database if it exists” dans les options avancées.
Une fois la base créée, l’assistant vous demandera de définir un mot de passe pour le compte administrateur de l’interface web (le login par défaut est admin). Indiquez également l’URL du site, soit via le nom DNS ou l’adresse IP selon votre configuration.
Une fois ces étapes validées, vous pourrez vous connecter au tableau de bord principal. L’occasion de constater un avertissement de sécurité sous l’interface de connexion.
Vous devez ajuster la configuration de phpIPAM pour désactiver l’assistant d’installation. Autrement dit, cela évite que quelqu’un puisse tenter de relancer l’installation de votre instance. Il s’agit d’une action de post-installation que vous devez réaliser.
Si vous utilisez une instance phpIPAM “en dur”, ajustez directement le fichier config.php comme spécifié sur l’image ci-dessus. Sinon, si vous utilisez Docker, ajoutez une variable d’environnement à votre Docker Compose, comme ceci (IPAM_DISABLE_INSTALLER=1).
Relancez ensuite votre instance si vous utilisez Docker. Cette commande suffira :
docker compose up -d
Configuration de phpIPAM
L’interface de phpIPAM est conçue de manière hiérarchique. Pour bien débuter, il faut comprendre l’organisation en Sections et en Sous-réseaux (Subnets).
Les Sections représentent le plus haut niveau de classement. Par défaut, vous trouverez des sections comme “Customers”. Vous pouvez créer vos propres sections, par exemple “Siège social” et “Agences distantes”, ou simplement le nom de votre société, afin de séparer visuellement les différents environnements de votre entreprise.
Vous pouvez ensuite ajouter un nouveau sous-réseau et l’associer à une section. Je vous recommande de prendre un masque assez large afin de venir créer les sous-réseaux correspondants à votre environnement (et vos VLANs, par exemple) en tant que sous-réseau enfant (imbriqué pour reprendre le terme de phpIPAM).
Je vous encourage à regarder ma vidéo où j’explique la configuration et au sein de laquelle je présente les différents modules.
Conclusion
L’implémentation d’une solution IPAM, que ce soit celle-ci ou une autre, est essentielle pour le service informatique afin de disposer d’un outillage adapté pour la gestion et la structuration de son réseau. Ceci permet d’avoir une vue claire sur l’organisation du réseau, ce qui aidera aussi à réduire les erreurs de configuration.
En utilisant Docker (et Docker Compose), le déploiement de phpIPAM est rapide ! Cela vous épargne la configuration manuelle d’une pile LAMP complète, bien que ce soit possible. L’interface, loin d’être la plus moderne, est tout de même riche et phpIPAM intègre vraiment beaucoup de fonctionnalités.
Cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Mon obsession depuis près de 15 ans ? Rendre l’administration système et la cybersécurité accessibles, que vous soyez junior ou confirmé. Plus qu’un métier, l’IT est pour moi une véritable passion. J’accompagne au quotidien les sysadmins et les professionnels de l’IT dans leur montée en compétences et leur veille technique.
