Ecosystem Koriphi dhcpp Engine v1.0.0 (C++17)

Serveur DHCP C++17
Haute Performance

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.

Asio Multi-Worker Hooks Lua 5.4 SQLite / SQL / RAM Verification ICMP
systemctl status dhcpp.service — Koriphi Core
# 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)
Performances & Modularité

Architecture C++17 Moderne

Découvrez les piliers d'ingénierie qui font de dhcpp un outil puissant pour les réseaux d'entreprise.

Multi-Threading Asio

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.

Configuration YAML

Fichiers de paramétrage intuitifs et structurés (dhcpp.yaml) pour gérer facilement les sous-réseaux, baux et options spécifiques.

Hooks Lua 5.4 Embarqués

Exécution de scripts Lua en temps réel sur les événements pre_request et on_lease_request pour personnaliser l'attribution IP.

Backends Polymorphes

Stockage ultra-rapide In-Memory ou persistance robuste sur SQLite, PostgreSQL ou MySQL avec mécanisme de reconnexion automatique.

Filtrage Regex & Opt 82

Matching avancé sur les préfixes d'adresses MAC, les identifiants d'Agent Relais (Circuit ID / Remote ID) et drapeaux case-insensitive.

Paquet Debian & Systemd

Paquet .deb prêt pour le déploiement avec script de post-installation, utilisateur système et intégration native Systemd.

Paquet Officiel Debian / Ubuntu

Télécharger dhcpp v1.0.0

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.

Empreinte SHA-256
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Architecture x86_64 / amd64
Taille ~412 KB
Licence Open Source (MIT)
Compatibilité Debian 11+, Ubuntu 20+
Commandes d'installation
# 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
Guide Technique Officiel

Documentation & Architecture dhcpp

Explorez la structure des fichiers YAML, la gestion des backends SQL et l'écriture de hooks Lua embarqués.

Thématiques Principales
Fichier par défaut
/etc/dhcpp/dhcpp.yaml

Structure du fichier 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.

dhcpp.yaml — Server Block
# 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"
workers (Multi-threading) Détermine le nombre de threads exécutant la boucle d'événements io_context.run(). Recommandé : égal au nombre de cœurs CPU.
interface (IP_PKTINFO) Filtre les paquets entrants pour n'accepter que les interfaces spécifiées tout en maintenant la socket liée sur 0.0.0.0:67.

Moteurs de Stockage & Backends

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.

dhcpp.yaml — Backends Block
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"
Reconnexion Automatique : Les backends SQL intégrés en C++17 embarquent un mécanisme automatique de reconnexion (mysql_ping / PQreset) en cas de coupure réseau avec le serveur de base de données.

Handlers & Event Hooks Lua

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é.

/etc/dhcpp/scripts/opt82_filter.lua
-- 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
Matching Regex (dhcpp.yaml)
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"