Développé par Koriphi, dhcpp est un démon réseau multithreadé Asio, extensible par scripts Lua 5.4 et supportant de multiples backends de stockage dynamiques.
# Service Koriphi dhcpp sous Debian/Ubuntu root@koriphi-node1:~# systemctl start dhcpp.service 2026-11-03 08:10:00.001 INFO [core] Démarrage de Koriphi dhcpp Engine v1.0.0 (C++17 / Asio)... 2026-11-03 08:10:00.004 INFO [network] Socket UDP 0.0.0.0:67 initialisée (IP_PKTINFO actif) 2026-11-03 08:10:00.008 SUCCESS Backend SQLite ouvert : /var/lib/dhcpp/leases.db 2026-11-03 08:10:00.010 DEBUG Workers Asio #1, #2, #3, #4 actifs et prêts à recevoir. 2026-11-03 08:10:02.145 INFO DHCPDISCOVER [ens18] MAC: 00:11:22:33:44:59 -> DHCPOFFER 192.168.1.100 (Bail: 86400s)
Découvrez les piliers d'ingénierie qui font de dhcpp un outil puissant pour les réseaux d'entreprise.
Distribution de la charge de travail UDP sur un pool configurable de workers Asio. Évite tout blocage I/O et traite des milliers de requêtes par seconde.
Fichiers de paramétrage intuitifs et structurés (dhcpp.yaml) pour gérer facilement les sous-réseaux, baux et options spécifiques.
Exécution de scripts Lua en temps réel sur les événements pre_request et on_lease_request pour personnaliser l'attribution IP.
Stockage ultra-rapide In-Memory ou persistance robuste sur SQLite, PostgreSQL ou MySQL avec mécanisme de reconnexion automatique.
Matching avancé sur les préfixes d'adresses MAC, les identifiants d'Agent Relais (Circuit ID / Remote ID) et drapeaux case-insensitive.
Paquet .deb prêt pour le déploiement avec script de post-installation, utilisateur système et intégration native Systemd.
Téléchargez le paquet pré-compilé pour Linux amd64. Il installe le binaire /usr/bin/dhcpp, les fichiers exemple sous /etc/dhcpp/ et configure le service systemd.
# 1. Télécharger et installer le paquet .deb wget https://dl.koriphi.com/dhcpp_1.0.0_amd64.deb sudo dpkg -i dhcpp_1.0.0_amd64.deb sudo apt-get install -f # 2. Démarrage du service Koriphi sudo systemctl enable --now dhcpp.service # 3. Vérification des journaux système sudo journalctl -u dhcpp.service -f
Explorez la structure des fichiers YAML, la gestion des backends SQL et l'écriture de hooks Lua embarqués.
/etc/dhcpp/dhcpp.yaml
Spécification des paramètres d'écoute, des pools d'adresses et du nombre de threads travailleurs (workers).
Le fichier dhcpp.yaml constitue le cœur de configuration du serveur Koriphi. Il définit les interfaces réseau associées à la socket UDP, la gestion du logging, les pools d'adresses d'allocation et les durées de baux.
# Configuration principale du serveur Koriphi dhcpp server: name: "core-dhcp-node1" workers: 4 # Nombre de threads travailleurs Asio interface: ["ens18", "ens19"] # Interfaces réseau autorisées log: file: "/var/log/dhcpp/server.log" level: "debug" # Options: debug, info, warning, error subnets: - name: "lan-corpo" network: "192.168.1.0/24" range_start: "192.168.1.100" range_end: "192.168.1.200" lease_time: 86400 # Durée de bail par défaut (secondes) router: "192.168.1.1" dns: - "8.8.8.8" - "1.1.1.1"
io_context.run(). Recommandé : égal au nombre de cœurs CPU.
0.0.0.0:67.
Configuration des backends In-Memory, SQLite, MySQL et PostgreSQL pour la persistance des baux.
dhcpp s'appuie sur une architecture polymorphe de backends. Vous pouvez choisir d'enregistrer vos baux en mémoire vive (pour des performances d'allocation pures) ou dans un fichier de base de données relationnelle.
backends: # 1. Backend In-Memory (Haute vitesse) - name: "memory_fast" type: "memory" # 2. Backend SQLite (Persistance locale) - name: "sqlite_local" type: "sqlite" database_file: "/var/lib/dhcpp/leases.db" hooks: "/etc/dhcpp/scripts/sqlite_sync.lua" # 3. Backend PostgreSQL (Cluster Entreprise) - name: "pg_cluster" type: "postgresql" db_host: "127.0.0.1" db_port: 5432 db_user: "dhcp_admin" db_password: "SecretPass123" database_file: "dhcp_db"
mysql_ping / PQreset) en cas de coupure réseau avec le serveur de base de données.
Filtrage de paquets, expressions régulières sur Option 82 et déclencheurs Lua en temps réel.
Les handlers permettent de router et de filtrer les requêtes clientes selon des critères précis (adresse MAC, regex sur Circuit-ID Option 82, ou interface physique) tout en exécutant du code Lua embarqué.
-- Hook Lua exécuté lors de l'attribution d'un bail function on_lease_request(request, response) local mac = request:clientMacAddress() local circuit_id = request:getOption82CircuitId() -- Interrogation dynamique de la base de données SQLite local results = db_query("SELECT ip, router FROM static_leases WHERE mac = '" .. mac .. "'") if #results > 0 then local assigned_ip = results[1][1] response:setIpAddress(assigned_ip) print("[Lua Hook Koriphi] Bail statique affecté : " .. assigned_ip) else print("[Lua Hook Koriphi] Allocation dynamique pour MAC : " .. mac) end end
handlers: - name: "huawei_switches" match: macaddress: ["00:11:23:04:ed:22", "/34:1E:2D.*/i"] opt82_circuit_id: "/GigabitEthernet0/1/[0-9]+" backend: "sqlite_local" hooks: "/etc/dhcpp/scripts/opt82_filter.lua"