Gérer les adresses IP d'un réseau d'entreprise sur une feuille Excel, c'est prendre le risque d'incohérences, de conflits d'adresses, de sous-réseaux mal documentés et d'une visibilité nulle sur l'utilisation réelle des plages IP. Avec la croissance des réseaux hybrides (on-premises + cloud), la multiplication des VLANs et l'intégration de l'IPv6, la gestion manuelle devient rapidement ingérable. Un outil IPAM (IP Address Management) professionnel s'impose. phpIPAM est la solution open source de référence dans ce domaine : gratuite, largement adoptée dans les PME et les ETI, elle offre une interface web complète pour gérer les sous-réseaux, les plages IPv4 et IPv6, les VLANs, les VRFs, avec une découverte réseau automatique et une API REST pour l'intégration dans vos outils d'automatisation. Déployée par des milliers d'organisations dans le monde, phpIPAM rivalise avec des solutions commerciales comme Infoblox ou SolarWinds IPAM. Ce guide vous accompagne de l'installation sur Debian 12 jusqu'à l'intégration avancée avec PowerDNS et Ansible, en passant par la configuration des sous-réseaux, la découverte automatique et la gestion des droits. Vous aurez en main tous les éléments pour professionnaliser la gestion de votre plan d'adressage.

ARTICLES TECHNIQUES phpIPAM : IPAM Open Source pour Gérer vos Adresses IP 📌 Qu'est-ce qu'un IPAM et… 🔹 Installer phpIPAM sur Debian 12 🔸 Configuration initiale 🔺 Importer des plages IP existante… Découverte réseau automatique Gestion des VLANs et VRFs dans… ayinedjimi-consultants.fr

Qu'est-ce qu'un IPAM et pourquoi en déployer un ?

Un IPAM (IP Address Management) est un outil centralisé pour planifier, suivre et gérer l'attribution des adresses IP dans un réseau. Il répond à des besoins qui vont bien au-delà d'un simple inventaire.

Les limites de la gestion manuelle :

  • Conflits d'adresses IP : deux équipements reçoivent la même IP statique par erreur, provoquant des interruptions de service intermittentes.
  • Documentation obsolète : les tableurs ne sont pas mis à jour en temps réel, l'information devient rapidement fausse.
  • Audit impossible : qui a attribué cette IP ? Quand ? À quel équipement ? Ces questions restent sans réponse.
  • Planification de capacité complexe : impossible de visualiser rapidement quel sous-réseau approche de la saturation.
  • Intégration DNS/DHCP manuelle : les enregistrements DNS doivent être créés manuellement pour chaque nouvelle IP, source d'erreurs.

Ce qu'apporte phpIPAM :

  • Vue en temps réel de l'utilisation de chaque sous-réseau (nb IP utilisées / total, %).
  • Découverte automatique des IP actives par scan ping (fping) ou SNMP.
  • Historique des modifications (qui a attribué quelle IP, quand).
  • Gestion hiérarchique : sections → sous-sections → sous-réseaux → adresses.
  • Support natif IPv4 et IPv6.
  • API REST documentée pour l'intégration avec Ansible, Terraform, scripts Python.
  • Intégration DNS bidirectionnelle avec PowerDNS.
  • Gestion des VLANs et VRFs (Virtual Routing and Forwarding).

phpIPAM est écrit en PHP et utilise une base de données MariaDB/MySQL. Il est distribué sous licence GPL v3 et activement maintenu sur GitHub.

Installer phpIPAM sur Debian 12

L'installation de phpIPAM nécessite un serveur web (Apache ou Nginx), PHP 8.x et MariaDB. Voici la procédure complète sur Debian 12 (Bookworm).

Étape 1 — Mise à jour et installation des dépendances :

sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 mariadb-server php php-mysql php-curl php-gd \
  php-intl php-pear php-imap php-memcache php-pspell php-xml php-xmlrpc \
  php-mbstring php-zip php-soap php-ldap libapache2-mod-php fping git

Étape 2 — Sécuriser MariaDB :

sudo mysql_secure_installation
# Répondre : Y, définir mot de passe root, Y Y Y Y

Étape 3 — Créer la base de données phpIPAM :

sudo mysql -u root -p << 'EOF'
CREATE DATABASE phpipam CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'phpipam'@'localhost' IDENTIFIED BY 'VotreMotDePasseSécurisé';
GRANT ALL PRIVILEGES ON phpipam.* TO 'phpipam'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

Étape 4 — Installer phpIPAM depuis GitHub :

sudo git clone --recursive https://github.com/phpipam/phpipam.git /var/www/phpipam
sudo chown -R www-data:www-data /var/www/phpipam

Étape 5 — Configurer phpIPAM :

sudo cp /var/www/phpipam/config.dist.php /var/www/phpipam/config.php
sudo nano /var/www/phpipam/config.php
# Modifier :
# $db['host'] = '127.0.0.1';
# $db['user'] = 'phpipam';
# $db['pass'] = 'VotreMotDePasseSécurisé';
# $db['name'] = 'phpipam';

Étape 6 — Configurer Apache :

sudo tee /etc/apache2/sites-available/phpipam.conf << 'EOF'
<VirtualHost *:80>
    ServerName ipam.votre-domaine.fr
    DocumentRoot /var/www/phpipam
    <Directory /var/www/phpipam>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
EOF
sudo a2ensite phpipam
sudo a2enmod rewrite
sudo systemctl restart apache2

Étape 7 — Installation initiale via l'interface web : Ouvrez http://ipam.votre-domaine.fr/install/ dans un navigateur. L'assistant d'installation importe le schéma de base de données et crée le compte administrateur. Choisissez l'option "Automatic database installation".

Sécuriser l'installation :

# Supprimer le répertoire d'installation après configuration
sudo rm -rf /var/www/phpipam/install/

Configuration initiale — sections et sous-réseaux

Après l'installation, connectez-vous à l'interface web avec les identifiants admin créés lors de l'installation. L'interface phpIPAM est organisée autour de sections hiérarchiques.

Créer une structure de sections : Dans Administration → Sections, créez vos sections principales selon votre organisation : "Production", "DMZ", "Serveurs", "Bureaux", "Infrastructure".

Ajouter un sous-réseau :

  1. Naviguez vers la section souhaitée.
  2. Cliquez sur "Add subnet".
  3. Renseignez : Subnet (ex : 10.10.0.0/24), Description, VLAN associé, Permissions.
  4. Cochez "Allow automatic IP scanning" si vous souhaitez la découverte automatique.
  5. Définissez des IP réservées (passerelle, broadcast) comme "Reserved".

Vue d'ensemble des sous-réseaux : phpIPAM affiche pour chaque sous-réseau le nombre d'IP utilisées, libres et réservées, avec une barre de progression de l'utilisation. Un sous-réseau à plus de 80% d'utilisation est automatiquement mis en évidence pour alerter l'administrateur.

Ajouter une adresse IP manuellement : Dans un sous-réseau, cliquez sur une IP libre (affichée en gris) → "Add address". Renseignez le nom d'hôte, le type (Static/DHCP/Reserved), le propriétaire, les tags personnalisés. phpIPAM crée automatiquement l'entrée et met à jour le compteur d'utilisation du sous-réseau.

Importer des plages IP existantes

Si vous migrez depuis Excel ou un autre outil, phpIPAM propose plusieurs méthodes d'import.

Import CSV : Dans Administration → Import, préparez un fichier CSV avec les colonnes minimales :

ip,hostname,description,owner
10.10.0.1,gw-production,Passerelle réseau production,réseau
10.10.0.10,srv-web01,Serveur web principal,DSI
10.10.0.11,srv-db01,Serveur base de données,DSI

Importez ce fichier dans phpIPAM en sélectionnant le sous-réseau cible et en mappant les colonnes CSV aux champs phpIPAM.

Import par scan réseau : phpIPAM peut importer automatiquement les adresses actives d'un sous-réseau via un scan ping. Naviguez vers le sous-réseau → Scan → "Scan for new hosts". Les adresses qui répondent au ping sont ajoutées avec leur hostname résolu par DNS (si configuré).

Import depuis DHCP : Il est possible d'importer les baux DHCP actifs depuis un serveur Windows DHCP ou ISC DHCP via des scripts Python ou Ansible utilisant l'API phpIPAM. C'est une approche puissante pour la synchronisation initiale d'un parc existant.

Découverte réseau automatique

La découverte automatique est l'une des fonctionnalités phares de phpIPAM. Elle permet de maintenir à jour automatiquement l'état des adresses IP (active/inactive) et de détecter de nouveaux équipements sur le réseau.

Méthodes de découverte disponibles :

  • Ping scan (fping) : scanne les adresses IP en envoyant des paquets ICMP. Simple et rapide, mais bloqué par les pare-feux qui filtrent l'ICMP.
  • Agent phpIPAM : un script PHP exécuté localement sur un hôte du réseau cible (pour les réseaux non accessibles directement depuis le serveur phpIPAM).
  • SNMP : découverte via SNMP pour les équipements réseau (switches, routeurs) avec récupération des tables ARP et MAC.

Configurer le scan automatique :

# Installer fping (si absent)
sudo apt install -y fping

# Activer la découverte dans phpIPAM
# Administration → Network Discovery → Scan agents
# Ajouter un agent "Local" pointant vers le serveur phpIPAM lui-même

# Planification automatique via cron
sudo crontab -e -u www-data
# Ajouter : */15 * * * * /usr/bin/php /var/www/phpipam/functions/scripts/pingCheck.php > /dev/null 2>&1

Configurer la découverte par sous-réseau : Dans les paramètres de chaque sous-réseau, définissez :

  • Scan interval : fréquence de scan (5 minutes à 24 heures selon la criticité).
  • Check hosts : activer la vérification de l'état des hôtes existants.
  • Discover new hosts : ajouter automatiquement les nouvelles IP détectées.
  • Send email on changes : notifier par email lors des changements d'état.

Les adresses actives s'affichent en vert, les inactives en rouge, les dernièrement vues avec un timestamp "Last seen". Un équipement qui disparaît du réseau passe en rouge après le délai configuré.

Gestion des VLANs et VRFs dans phpIPAM

Pour les réseaux segmentés avec de nombreux VLANs, phpIPAM propose une gestion intégrée.

Créer les VLANs : Dans Administration → VLANs, créez vos VLANs avec leur numéro, nom et description. Exemple : VLAN 10 (Serveurs production), VLAN 20 (Bureaux), VLAN 30 (DMZ), VLAN 40 (Management).

Associer les sous-réseaux aux VLANs : Lors de la création ou modification d'un sous-réseau, sélectionnez le VLAN correspondant. phpIPAM affiche alors une vue par VLAN permettant de visualiser rapidement tous les sous-réseaux d'un VLAN et leur taux d'occupation.

VRFs (Virtual Routing and Forwarding) : Pour les environnements MPLS ou les réseaux avec des espaces d'adressage qui se chevauchent (même plage IP dans des contextes différents), phpIPAM supporte les VRFs. Dans Administration → VRFs, créez vos VRFs (ex : "Internet", "MPLS-Client-A", "MPLS-Client-B"). Chaque sous-réseau est associé à un VRF, permettant d'avoir la même plage 10.0.0.0/24 dans deux VRFs différents sans conflit dans la base de données.

Vue par VLAN : L'onglet "VLANs" du menu principal affiche un tableau récapitulatif de tous les VLANs avec le nombre de sous-réseaux et d'adresses associés. C'est la vue idéale pour un audit de segmentation réseau.

Intégration avec PowerDNS

L'intégration phpIPAM ↔ PowerDNS permet de créer automatiquement les enregistrements DNS PTR et A/AAAA lorsqu'une adresse IP est ajoutée ou modifiée dans phpIPAM. C'est l'une des fonctionnalités les plus puissantes pour les équipes réseau.

Prérequis : PowerDNS Authoritative Server avec backend MySQL (base de données partagée ou distincte de phpIPAM).

Configuration dans phpIPAM : Administration → PowerDNS integration :

  • Connexion à la base PowerDNS (host, user, password, database).
  • Sélection des zones DNS à gérer (forward zone pour les enregistrements A, reverse zone pour les PTR).
  • Format de nommage automatique (ex : {hostname}.votre-domaine.fr).

Fonctionnement : Lorsqu'un opérateur ajoute l'IP 10.10.0.50 avec le hostname srv-app01 dans phpIPAM, l'outil crée automatiquement :

  • L'enregistrement A : srv-app01.votre-domaine.fr → 10.10.0.50 dans PowerDNS.
  • L'enregistrement PTR : 50.0.10.10.in-addr.arpa → srv-app01.votre-domaine.fr dans la zone reverse.

Cela élimine une source fréquente d'erreurs où l'IP est attribuée mais l'enregistrement DNS est oublié.

API REST phpIPAM — automatiser depuis Ansible

L'API REST de phpIPAM est complète et bien documentée. Elle permet d'intégrer phpIPAM dans n'importe quel outil d'automatisation.

Authentification et premier appel :

# Créer une application API dans phpIPAM : Administration → API → Add API key
# Paramètres : name=ansible, app_id=ansible, permissions=RW, security=ssl_with_app_code

# Obtenir un token
TOKEN=$(curl -s -X POST \
  -H "Content-Type: application/json" \
  -u admin:VotreMotDePasse \
  "https://ipam.votre-domaine.fr/api/ansible/user/" | python3 -c "import json,sys; print(json.load(sys.stdin)['data']['token'])")

echo "Token: $TOKEN"

Récupérer les sous-réseaux disponibles :

curl -H "token: $TOKEN" "https://ipam.votre-domaine.fr/api/ansible/subnets/cidr/10.10.0.0%2F24/"

Obtenir la prochaine IP libre dans un sous-réseau :

SUBNET_ID=42
curl -H "token: $TOKEN" "https://ipam.votre-domaine.fr/api/ansible/subnets/$SUBNET_ID/first_free/"

Exemple de module Ansible pour phpIPAM :

- name: Obtain next free IP from phpIPAM
  uri:
    url: "https://ipam.votre-domaine.fr/api/ansible/subnets/{{ subnet_id }}/first_free/"
    method: GET
    headers:
      token: "{{ phpipam_token }}"
    return_content: yes
  register: next_ip

- name: Register IP in phpIPAM
  uri:
    url: "https://ipam.votre-domaine.fr/api/ansible/addresses/"
    method: POST
    headers:
      token: "{{ phpipam_token }}"
    body_format: json
    body:
      ip: "{{ next_ip.json.data }}"
      subnetId: "{{ subnet_id }}"
      hostname: "{{ vm_name }}"
      description: "Déployé par Ansible le {{ ansible_date_time.date }}"
  register: ipam_result

Cette intégration permet de provisionner des VMs (via VMware vSphere ou Proxmox) avec une IP automatiquement réservée dans phpIPAM, sans intervention manuelle.

Gestion des droits utilisateurs dans phpIPAM

phpIPAM propose un système de contrôle d'accès granulaire adapté aux organisations avec plusieurs équipes.

Modèle de permissions : Les droits sont gérés à deux niveaux :

  • Niveau section : chaque section peut avoir des permissions distinctes (lecture seule, lecture/écriture, administration) pour chaque groupe d'utilisateurs.
  • Niveau sous-réseau : les permissions peuvent être affinées par sous-réseau.

Créer des groupes d'utilisateurs : Administration → Groups :

  • Admins : accès total à toutes les sections et à l'administration.
  • Helpdesk : lecture sur toutes les sections, écriture sur la section "Bureaux" uniquement.
  • Réseau : lecture/écriture sur toutes les sections techniques, pas d'accès à l'administration.
  • Readonly : lecture seule sur toutes les sections (pour les auditeurs).

Intégration LDAP/Active Directory : phpIPAM peut s'authentifier contre Active Directory ou un annuaire LDAP. Administration → Authentication → LDAP. Configurez l'URL LDAP, le DN de liaison, et le filtre de groupe pour mapper automatiquement les groupes AD aux groupes phpIPAM. Cela évite de gérer des comptes locaux séparés et facilite la révocation d'accès lors du départ d'un collaborateur.

Sauvegarder phpIPAM

La base de données phpIPAM contient l'intégralité de votre plan d'adressage. Sa sauvegarde régulière est indispensable.

Sauvegarde de la base MariaDB :

#!/bin/bash
# /opt/scripts/backup-phpipam.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/var/backups/phpipam
mkdir -p $BACKUP_DIR

mysqldump -u phpipam -p'VotreMotDePasseSécurisé' phpipam | gzip > $BACKUP_DIR/phpipam_$DATE.sql.gz

# Conserver 30 jours de sauvegardes
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

echo "Sauvegarde phpIPAM : $BACKUP_DIR/phpipam_$DATE.sql.gz"
# Planifier en cron
echo "0 2 * * * root /opt/scripts/backup-phpipam.sh >> /var/log/phpipam-backup.log 2>&1" | sudo tee /etc/cron.d/phpipam-backup

Sauvegarde des fichiers de configuration :

tar -czf $BACKUP_DIR/phpipam-config_$DATE.tar.gz \
  /var/www/phpipam/config.php \
  /etc/apache2/sites-available/phpipam.conf

Test de restauration : Documentez et testez régulièrement la procédure de restauration sur un environnement de test. Une sauvegarde non testée est une sauvegarde dont on ne connaît pas la fiabilité.

Personnaliser les champs et les rapports dans phpIPAM

phpIPAM propose des fonctionnalités de personnalisation avancées qui permettent d'adapter l'outil aux besoins spécifiques de chaque organisation.

Champs personnalisés (Custom Fields) : Administration → Custom Fields permet d'ajouter des champs supplémentaires aux adresses IP, sous-réseaux, sections et VLAN. Exemples utiles :

  • Pour les adresses : "Propriétaire applicatif", "Date de mise en service", "Contrat de maintenance", "Niveau de criticité".
  • Pour les sous-réseaux : "Zone de sécurité", "Responsable réseau", "Date de dernier audit".

Ces champs apparaissent dans les formulaires de création/modification et sont exportables en CSV pour les rapports d'inventaire.

Tags et catégories : phpIPAM permet de taguer les adresses IP avec des catégories colorées (ex : "Serveur", "Imprimante", "Caméra IP", "Équipement réseau", "Workstation"). Ces tags facilitent le filtrage et la recherche dans les grands réseaux.

Rapports intégrés : Le menu Rapports (si activé) offre plusieurs vues agrégées : liste de toutes les adresses avec leurs propriétaires, sous-réseaux par taux d'occupation, adresses actives par VLAN, IP inutilisées depuis plus de 6 mois. Ces rapports peuvent être exportés en CSV ou imprimés depuis le navigateur.

Widgets du tableau de bord : La page d'accueil phpIPAM est un tableau de bord personnalisable avec des widgets : statistiques globales (total IP, % utilisées), dernières modifications, alertes de sous-réseaux proches de la saturation, adresses les plus récemment ajoutées. Ce tableau de bord est idéal pour un affichage en mode "NOC screen" sur un écran de salle réseau.

Export et API pour les rapports automatisés :

# Exemple : générer un rapport CSV hebdomadaire des IP actives via l'API
#!/bin/bash
TOKEN=$(curl -s -X POST -u admin:password https://ipam.votre-domaine.fr/api/ansible/user/ | python3 -c "import json,sys; print(json.load(sys.stdin)['data']['token'])")

# Récupérer toutes les adresses actives
curl -H "token: $TOKEN" "https://ipam.votre-domaine.fr/api/ansible/addresses/" | \
  python3 -c "
import json,sys,csv
data = json.load(sys.stdin)['data']
writer = csv.DictWriter(sys.stdout, fieldnames=['ip','hostname','description','lastSeen'])
writer.writeheader()
for addr in data:
    writer.writerow({k: addr.get(k,'') for k in ['ip','hostname','description','lastSeen']})
" > /var/reports/ipam-active-$(date +%Y%m%d).csv

Intégration avec les outils de monitoring : phpIPAM peut alimenter vos outils de monitoring (Zabbix, Nagios, Icinga) avec la liste des équipements à surveiller. Via l'API, il est possible d'extraire automatiquement les adresses IP actives et de les importer dans Zabbix comme hôtes à monitorer, assurant ainsi une synchronisation entre l'IPAM et le système de supervision.

Pour aller plus loin dans la gestion de votre réseau, consultez notre guide sur la segmentation réseau et les VLANs et notre article sur le monitoring réseau avec Zabbix. La gestion des accès réseau est également abordée dans notre guide NAC 802.1X et dans notre article sur la gestion DHCP sous Linux.

Documentation officielle : Installation officielle phpIPAM et dépôt GitHub phpIPAM.

Questions fréquentes sur phpIPAM

phpIPAM supporte-t-il l'IPv6 ?

Oui, phpIPAM supporte nativement IPv6 depuis ses premières versions. Vous pouvez créer des sous-réseaux IPv6 (ex : 2001:db8::/32, fd00::/8), gérer les adresses IPv6 individuelles, effectuer des scans de découverte en IPv6 (via fping6), et générer des enregistrements AAAA dans PowerDNS. La vue des sous-réseaux IPv6 affiche le taux d'utilisation de la même façon que pour IPv4. Pour les environnements dual-stack, un même équipement peut avoir une adresse IPv4 et une adresse IPv6 liées dans phpIPAM.

Quelle est la différence entre phpIPAM et NetBox ?

NetBox et phpIPAM sont les deux IPAM open source les plus populaires. NetBox (écrit en Python/Django) est plus récent, propose une gestion des équipements (racks, baies, câblage) en plus de l'IPAM, et dispose d'une API REST plus moderne. phpIPAM (PHP/MariaDB) est plus léger, plus simple à installer, et a une interface web plus accessible pour les équipes moins techniques. Pour une organisation qui cherche uniquement un IPAM sans gestion du datacenter physique, phpIPAM est souvent le meilleur choix. Pour une gestion complète du datacenter (DCIM + IPAM), NetBox est à privilégier.

Comment phpIPAM gère-t-il les conflits d'adresses IP ?

phpIPAM empêche l'ajout d'une adresse IP déjà existante dans un sous-réseau donné et dans le même VRF — une contrainte de base de données garantit l'unicité. De plus, la fonctionnalité de scan de découverte peut détecter des adresses actives non enregistrées dans phpIPAM (équipements non documentés) et des adresses enregistrées comme libres mais qui répondent au ping (potentiel conflit avec un équipement en DHCP non déclaré). Des alertes par email peuvent être configurées pour ces situations.

phpIPAM peut-il s'intégrer avec Terraform pour le provisioning cloud ?

Oui, il existe un provider Terraform officiel pour phpIPAM (lord-kyron/phpipam sur le Terraform Registry). Il permet de réserver automatiquement une IP dans phpIPAM lors du provisioning d'une ressource cloud (VM Azure, instance AWS, pod Kubernetes). Le workflow typique : Terraform appelle phpIPAM via son provider pour obtenir la prochaine IP libre, l'assigne à la ressource créée, et enregistre l'IP comme utilisée dans phpIPAM. C'est l'intégration idéale pour les infrastructures Infrastructure-as-Code.

phpIPAM peut-il envoyer des alertes quand un sous-réseau est presque plein ?

Oui. Dans les paramètres de chaque sous-réseau, activez "Send warning email when subnet is X% full". phpIPAM peut envoyer automatiquement un email d'alerte lorsque le taux d'occupation dépasse un seuil configurable (par défaut 80%). Ces alertes nécessitent la configuration d'un serveur SMTP dans Administration → Settings → Email. Combiné avec le scan automatique, phpIPAM peut ainsi alerter proactivement les équipes réseau avant qu'un sous-réseau ne soit saturé, évitant des interruptions de service lors du provisioning de nouvelles machines.

Besoin d'un accompagnement expert ?

Nos consultants sécurisent et optimisent votre infrastructure.

Contacter nos experts →

À retenir

  • phpIPAM remplace avantageusement les tableurs Excel pour la gestion IP : vue temps réel, découverte automatique, audit trail et API REST.
  • L'installation sur Debian 12 est simple (Apache + PHP + MariaDB) et la mise à jour peut se faire via git pull.
  • La découverte réseau automatique (fping toutes les 15 minutes) maintient à jour l'état réel des IP sans intervention manuelle.
  • L'intégration PowerDNS crée automatiquement les enregistrements DNS (A et PTR) lors de l'attribution d'une adresse IP.
  • L'API REST permet l'intégration avec Ansible, Terraform et tout outil d'automatisation pour un provisioning entièrement automatisé.