phpIPAM : cartographier son réseau en self-hosted

Bannière : phpIPAM, gestion d'adresses IP self-hosted

Dès qu'un réseau dépasse une poignée d'appareils — plusieurs VLAN, des serveurs, des objets connectés, des caméras — le classique tableur "qui a quelle IP" devient vite intenable. phpIPAM est un outil open source de gestion d'adresses IP (IPAM) qui centralise sous-réseaux, VLAN et appareils dans une interface web claire, avec historique et API. C'est l'outil que j'utilise en interne pour garder une vue à jour de mon propre réseau, et que je déploie chez mes clients dès que le parc dépasse une dizaine d'équipements.

Pré-requis : Docker et Docker Compose installés, ainsi qu'un accès à votre serveur/NAS en ligne de commande.

1. Architecture

phpIPAM se déploie en trois conteneurs : une base MariaDB, l'interface web, et un conteneur "cron" chargé des tâches planifiées (scans réseau automatiques, notamment). Voici le docker-compose.yml :

docker-compose.yml
services:
  phpipam-db:
    image: mariadb:11
    container_name: phpipam-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: change-moi
    volumes:
      - ./db-data:/var/lib/mysql

  phpipam-web:
    image: phpipam/phpipam-www:latest
    container_name: phpipam-web
    restart: unless-stopped
    ports:
      - "8083:80"
    environment:
      IPAM_DATABASE_HOST: phpipam-db
      IPAM_DATABASE_PASS: change-moi
      IPAM_TRUST_X_FORWARDED: "true"
    dns:
      - 192.168.1.1 # votre routeur/DNS local, voir section 3
    depends_on:
      - phpipam-db

  phpipam-cron:
    image: phpipam/phpipam-cron:latest
    container_name: phpipam-cron
    restart: unless-stopped
    environment:
      IPAM_DATABASE_HOST: phpipam-db
      IPAM_DATABASE_PASS: change-moi
      SCAN_INTERVAL: 1h
    dns:
      - 192.168.1.1
    depends_on:
      - phpipam-db

2. Premier lancement

Démarrez la stack, puis suivez l'assistant d'installation web :

terminal
$ docker compose up -d
# Interface disponible sur http://<IP_SERVEUR>:8083

L'assistant "New phpipam installation" crée le schéma de base automatiquement. Une fois terminé, ajoutez la variable IPAM_DISABLE_INSTALLER=1 au service phpipam-web et relancez — cela évite de relancer accidentellement l'installeur, qui écraserait la base existante.

Piège rencontré : sans le DNS explicite (dns: pointant vers votre routeur/résolveur local) sur les deux conteneurs phpipam-web et phpipam-cron, les scans réseau ne résolvent aucun nom d'hôte — vous récupérez des IP nues sans nom de machine, bien moins utile au quotidien.

3. Configurer le scan réseau automatique

  1. Dans Administration → Sections/Subnets, activez le scan sur les sous-réseaux à surveiller.
  2. Le conteneur phpipam-cron exécute le scan selon l'intervalle défini (SCAN_INTERVAL).
  3. Les nouveaux appareils détectés apparaissent en attente de validation, avec leur adresse MAC et, si la résolution DNS fonctionne, leur nom d'hôte.

4. Derrière un reverse proxy

Si phpIPAM est exposé via un reverse proxy (Nginx, Traefik, ou celui de votre NAS), la variable IPAM_TRUST_X_FORWARDED=true est indispensable : sans elle, l'application ne fait pas confiance à l'en-tête X-Forwarded-For et peut mal interpréter les adresses IP des visiteurs dans ses journaux.

5. Astuce : un champ personnalisé pour stocker les ports scannés

Si vous couplez phpIPAM à un scanner de ports externe (via son API), le champ description standard est trop court pour stocker une liste de ports (environ 250 caractères en pratique). Créez plutôt un champ personnalisé de type Text (et non Varchar) dans Administration → IP related management → Custom fields : la limite de taille disparaît.

L'API REST de phpIPAM permet d'automatiser entièrement la mise à jour des fiches IP depuis un outil tiers (n8n, un script Python, etc.) — pratique pour transformer un scan de ports périodique en inventaire toujours à jour, sans ressaisie manuelle.

Conclusion

phpIPAM ne demande que quelques minutes à mettre en place et change vraiment la donne dès que le réseau grandit : fini les conflits d'IP découverts par hasard et les tableurs qui traînent. C'est un des premiers outils que j'installe lors d'un audit d'infrastructure chez un client.

R
Raph — Chronoassistance25 ans d'expérience en informatique, cybersécurité et infrastructure.