Outils pour utilisateurs

Outils du site


Ceci est une ancienne révision du document !


Un serveur DHCP

Nous avons déjà vu ailleurs une installation minimale du serveur «kea-dhcp4-server», le remplaçant du vénérable «isc-dhcp-server» qui n'est plus maintenu. Nous allons la reprendre dans une configuration un peu plus approfondie, pour répondre aux besoins d'un réseau (virtuel) construit comme ceci: Réseau configuré avec DHCP Sur le LAN vert, tous les nœuds devront être configués via DHCP.L'imprimante, la station de l'administrateur et le NAS devront récupérer toujours la même adresse. Les clients recevront une adresse quelconque, il pourra y avoir jusqu’à 20 clients simultanés, mais la salle étant en libre service, les clients ne seront pas forcément toujours les mêmes.

Nous allons installer et configurer sur le routeur/DHCP kea-dhcp4-server pour répondre au besoin.

Plan d'adressage

Le routeur/DHCP dispose déjà de l'adresse 192.168.61.1 Décidons que:

  • Le NAS recevra toujours l'adresse 192.168.61.2;
  • l'imprimante, l'adresse 192.168.61.3;
  • la station de l'administrateur l'adresse 192.168.61.254;
  • les clients pourront recevoir une adresse dans l'étendue 192.168.61.16 - 192.168.61.127, ce qui sera largement suffisant:
    • pour 20 clients simultanés;
    • pour assurer une éventuelle augmentation de prises clients en ajoutant un switch ou en remplaçant l’existant par un 48 ports, par exemple.

Et il restera quelques adresses basses et hautes si besoin est pour installer d'autres nœuds nécessitant une adresse fixe.

Les contraintes

Elles ne sont pas bien nombreuses, il est juste nécessaire de connaître les adresses MAC des nœuds nécessitant une adresse prédéfinie.

Ainsi:

  • le NAS dispose de l'adresse MAC 52:54:00:d2:9a:0e (on la trouve généralement inscrite sur une étiquette collée à l'arrière du NAS);
  • l'imprimante dispose de l'adresse MAC 52:54:00:05:7d:32 (idem, étiquette, dos…)
  • la station de l'administrateur: 52:54:00:b4:2e:40 (il est assez grand pour la trouver tout seul).

Les plus curieux auront remarqué que les 3 octets significatif du constructeur sont les mêmes pour chaque nœud décrit. Rappelons-nous que ce sont des nœuds virtuels générés par QEMU, c'est donc normal).

Configuration de Kea

Reprenons en l'améliorant le fichier déjà utilisé:

{
    "Dhcp4": {
        "control-socket": {
            "socket-type": "unix",
            "socket-name": "/run/kea/kea4-ctrl-socket"
        },
        "interfaces-config": {
            "interfaces": ["enp7s0"]
        },
        "valid-lifetime": 3600,
        "renew-timer": 1800,
        "rebind-timer": 2700,
        "authoritative": true,
        "lease-database": {
            "type": "memfile",
            "persist": true,
            "name": "/var/lib/kea/kea-leases4.csv",
            "lfc-interval": 3600
        },
        "subnet4": [
            {
                "subnet": "192.168.61.0/24",
                "pools": [{"pool": "192.168.61.100 - 192.168.61.120"}],
                "option-data": [
                    {
                        "name": "routers",
                        "data": "192.168.61.1"
                    },
                    {
                        "name": "domain-search",
                        "data": "home.nain-t.net"
                    },
                    {
                        "name": "domain-name-servers",
                        "data": "192.168.61.1"
                     }
                ],
                "reservations": [
                    {
                        "hw-address": "52:54:00:d2:9a:0e",
                        "ip-address": "192.168.61.2"
                    },
                    {
                        "hw-address": "52:54:00:05:7d:32",
                        "ip-address": "192.168.61.3"
                    },
                    {
                        "hw-address": "52:54:00:b4:2e:40",
                        "ip-address": "192.168.61.254"
                    }
                ]
            }
        ],
        "loggers": [
            {
                "name": "kea-dhcp4.leases",
                "output_options": [
                   {
                        "output": "/var/log/kea/kea-dhcp4.log",
                        "pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\n",
                        "maxsize": 2048000,
                        "maxver": 4
                   }
                ],
                "severity": "DEBUG",
                "debuglevel": 55
            }
        ]
    }
}
Notons que le serveur va stocker les baux distribués dans un fichier au format «csv» (Comma-Separated Values), donc facilement lisible si besoin.

Nous offrons bien peu de choses aux clients:

  • une adresse IP, fixée ou non, dans le réseau 192.168.61.0/24 (subnet),
  • le nom du sous-domaine, (domain-search),
  • l'adresse d'un serveur DNS (domain-name-servers),
  • l'adresse de la passerelle (routers)

Pour le plaisir de suivre les actions, le paragraphe «loggers» va permettre de créer un fichier de logs contenant les informations sur les baux actifs ou non.

L'espion de service

Nous finalisons la mise en place du NAS sur le réseau. C'est un NAS qui fonctionne bien évidemment sous GNU/Linux (il est virtuel). Nous connaissons son adresse MAC qui est écrite sur sa face arrière (virtuelle) et qui est: 52:54:00:d2:9a:0e. À sa première mise en route:

Whireshark est à l'affût du protocole UDP sur le port 67. À première vue nous avons ceci:

No.  Time           Source         Destination      Info
 1   0.000000000    0.0.0.0        255.255.255.255  DHCP Discover - Transaction ID 0x175f7d6c
 2   0.017518975    192.168.61.1   192.168.61.2     DHCP Offer    - Transaction ID 0x175f7d6c
 3   0.017914980    0.0.0.0        255.255.255.255  DHCP Request  - Transaction ID 0x175f7d6c
 4   0.018377975    192.168.61.1   192.168.61.2     DHCP ACK      - Transaction ID 0x175f7d6c
 5   1782.689463270 192.168.61.2   192.168.61.1     DHCP Request  - Transaction ID 0x175f7d6c
 6   1782.691640998 192.168.61.1   192.168.61.2     DHCP ACK      - Transaction ID 0x175f7d6c

Jusque là, c'est comme dans les livres. Regardons le détail du DHCP Discover:

Discover

Dynamic Host Configuration Protocol (Discover)
    Message type: Boot Request (1)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x175f7d6c
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 0.0.0.0
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: RealtekU_d2:9a:0e (52:54:00:d2:9a:0e)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Discover)
        Length: 1
        DHCP: Discover (1)
    Option: (12) Host Name
        Length: 3
        Host Name: nas
    Option: (55) Parameter Request List
        Length: 13
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (28) Broadcast Address
        Parameter Request List Item: (2) Time Offset
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (15) Domain Name
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (119) Domain Search
        Parameter Request List Item: (12) Host Name
        Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
        Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
        Parameter Request List Item: (26) Interface MTU
        Parameter Request List Item: (121) Classless Static Route
        Parameter Request List Item: (42) Network Time Protocol Servers
    Option: (61) Client identifier
        Length: 19
        IAID: 00d29a0e
        DUID Type: link-layer address plus time (1)
        Hardware type: Ethernet (1)
        Time: 795954794
        Link layer address: 52:54:00:d2:9a:0e
    Option: (255) End
        Option End: 255
À ce niveau, le client ne connaît pas son adresse IP ni celle du serveur (0.0.0.0). Il ne sait pas s'il y a un relai.

Il transmet son adresse MAC et son nom dans l'option 12: «host Name» l'option(«52:54:00:d2:9a:0e» et «nas»)

L'option 55 «Parameter Request List» contient «la liste des paramètres demandés». Il y en a beaucoup, nous savons déjà que le serveur ne saura pas tous les lui fournir.

L'option 61 «Client identifier» nécessite quelques mots d'explication. L'adresse MAC seule pourrait suffire à identifier le client, mais pour compliquer les choses, il contient d'autres informations. Quelques détails dans les RFC4361, RFC6842 et RFC3315 car cette options est venue avec DHCPv6. C'est le client qui construit cet identifiant. Il envoie dans cette option 61:

  • son IAID (Identity Association Identifier), qui n'est autre que les 4 derniers octets de son adresse MAC , ici 00:d2:9a:0e,
  • son DUID (DHCP Unique Identifier) qui vaut 00:01,
  • un timestamp qui vaut: 2f:71:4e:6a,
  • et encore son adresse MAC: 52:54:00:d2:9a:0e.

Au final, ce «client identifier» va être ff : 00:d2:9a:0e : 00:01 : 00:01 : 2f:71:4e:6a : 52:54:00:d2:9a:0e Et dans le fichier de logs du serveur, la ligne suivante:

2025-03-21 17:44:44.266 INFO  DHCP4_LEASE_ALLOC [hwtype=1 52:54:00:d2:9a:0e],
cid=[ff:00:d2:9a:0e:00:01:00:01:2f:71:4e:6a:52:54:00:d2:9a:0e],
tid=0x3e1c8135: lease 192.168.61.2 has been allocated for 3600 seconds
Voyons maintenant si l'offre est intéressante.

Offer

Dynamic Host Configuration Protocol (Offer)
    Message type: Boot Reply (2)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x175f7d6c
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.61.2
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: RealtekU_d2:9a:0e (52:54:00:d2:9a:0e)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Offer)
        Length: 1
        DHCP: Offer (2)
    Option: (1) Subnet Mask (255.255.255.0)
        Length: 4
        Subnet Mask: 255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.61.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.61.1
    Option: (12) Host Name
        Length: 3
        Host Name: nas
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (3600s) 1 hour
    Option: (54) DHCP Server Identifier (192.168.61.1)
        Length: 4
        DHCP Server Identifier: 192.168.61.1
    Option: (58) Renewal Time Value
        Length: 4
        Renewal Time Value: (1800s) 30 minutes
    Option: (59) Rebinding Time Value
        Length: 4
        Rebinding Time Value: (2700s) 45 minutes
    Option: (61) Client identifier
        Length: 19
        IAID: 00d29a0e
        DUID Type: link-layer address plus time (1)
        Hardware type: Ethernet (1)
        Time: 795954794
        Link layer address: 52:54:00:d2:9a:0e
    Option: (119) Domain Search
        Length: 17
        FQDN: home.nain-t.net
    Option: (255) End
        Option End: 255
Le serveur propose tout ce qu'il est en mesure de proposer:

  • Une adresse IP : 192.168.61.2 (notons que c'est bien celle que nous voulons attribuer au NAS),
  • le masque de sous-réseau: 255.255.255.0 ce qui en CIDR donne bien /24,
  • l'adresse du routeur: 192.168.61.1,
  • l'adresse du résolveur DNS: 192.168.61.1,
  • la durée de vie du bail: 1 heure,
  • l'adresse du serveur DHCP: 192.168.61.1 (il est multifonctions),
  • la durée avant demande de renouvellement du bail: 30 minutes,
  • la durée avant que le client ne commence à s'affoler: 45 minutes.

Le serveur confirme le CID proposé par le client. Il n'a normalement pas à le modifier en quoi que ce soit. Le client va probablement accepter (a-t-il vraiment le choix ?)

Request

Dynamic Host Configuration Protocol (Request)
    Message type: Boot Request (1)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x175f7d6c
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 0.0.0.0
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: RealtekU_d2:9a:0e (52:54:00:d2:9a:0e)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Request)
        Length: 1
        DHCP: Request (3)
    Option: (54) DHCP Server Identifier (192.168.61.1)
        Length: 4
        DHCP Server Identifier: 192.168.61.1
    Option: (50) Requested IP Address (192.168.61.2)
        Length: 4
        Requested IP Address: 192.168.61.2
    Option: (12) Host Name
        Length: 3
        Host Name: nas
    Option: (55) Parameter Request List
        Length: 13
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (28) Broadcast Address
        Parameter Request List Item: (2) Time Offset
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (15) Domain Name
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (119) Domain Search
        Parameter Request List Item: (12) Host Name
        Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
        Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
        Parameter Request List Item: (26) Interface MTU
        Parameter Request List Item: (121) Classless Static Route
        Parameter Request List Item: (42) Network Time Protocol Servers
    Option: (61) Client identifier
        Length: 19
        IAID: 00d29a0e
        DUID Type: link-layer address plus time (1)
        Hardware type: Ethernet (1)
        Time: 795954794
        Link layer address: 52:54:00:d2:9a:0e
    Option: (255) End
        Option End: 255
Dans cette requête, il accepte bien l'adresse que lui propose le serveur 192.168.61.1, mais persiste à demander tous les autres paramètres inscrits dans la trame «Discover». Mais le serveur ne sait pas faire de miracles et termine momentanément le dialogue en répétant:

Ack

Dynamic Host Configuration Protocol (ACK)
...
    Your (client) IP address: 192.168.61.2
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
...
    Option: (53) DHCP Message Type (ACK)
        Length: 1
        DHCP: ACK (5)
    Option: (1) Subnet Mask (255.255.255.0)
        Length: 4
        Subnet Mask: 255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.61.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.61.1
    Option: (12) Host Name
        Length: 3
        Host Name: nas
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (3600s) 1 hour
    Option: (54) DHCP Server Identifier (192.168.61.1)
        Length: 4
        DHCP Server Identifier: 192.168.61.1
    Option: (58) Renewal Time Value
        Length: 4
        Renewal Time Value: (1800s) 30 minutes
    Option: (59) Rebinding Time Value
        Length: 4
        Rebinding Time Value: (2700s) 45 minutes
    Option: (61) Client identifier
        Length: 19
        IAID: 00d29a0e
        DUID Type: link-layer address plus time (1)
        Hardware type: Ethernet (1)
        Time: 795954794
        Link layer address: 52:54:00:d2:9a:0e
    Option: (119) Domain Search
        Length: 17
        FQDN: home.nain-t.net
    Option: (255) End
        Option End: 255
Et le client devra s'en satisfaire, surtout que les paramètres indispensables sont tous fournis pour une connectivité opérationnelle.

Fin de l'histoire

Simulons une panne de DHCP un peu avant que le client demande un renouvellement…

No.Time           Source        Destination      Info
 1 0.000000000    192.168.61.2  192.168.61.1     DHCP Request  - Transaction ID 0x175f7d6c
 2 7.560894138    192.168.61.2  192.168.61.1     DHCP Request  - Transaction ID 0x175f7d6c
 3 1031.735078085 192.168.61.2  255.255.255.255  DHCP Request  - Transaction ID 0x175f7d6c
 4 1041.126556541 192.168.61.2  255.255.255.255  DHCP Request  - Transaction ID 0x175f7d6c
...
64 1902.788046683 192.168.61.2  255.255.255.255  DHCP Request  - Transaction ID 0x175f7d6c
65 1922.817322968 192.168.61.2  255.255.255.255  DHCP Request  - Transaction ID 0x175f7d6c
66 1930.773280705 0.0.0.0       255.255.255.255  DHCP Discover - Transaction ID 0x14b47b39
67 1937.765165131 0.0.0.0       255.255.255.255  DHCP Discover - Transaction ID 0x14b47b39
...

  1. Au début, confient, le client demande le renouvellement de son bail à 192.168.61.1 (trames 1 et 2),
  2. à la 1031eme seconde (un peu plus de la 1/4 heure) le client repasse en broadcast (trames 3 à 65),
  3. à la 1930eme seconde (un peu plus de la 1/2 heure) le client abandonne, perd son adresse IP et repart à la recherche d'un serveur DNS qui veuille bien lui répondre (trames 66 et suivantes).

Ne sortez pas vos mouchoirs, l'histoire se terminera bien lorsque le serveur sera remis en route. Le client récupérera son adresse habituelle.

Les entrailles du serveur

Kea a été configuré pour gérer ses données internes dans un fichier CSV1). Petit coup d'endoscopie:

address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context
192.168.61.2,52:54:00:d2:9a:0e,ff:00:d2:9a:0e:00:01:00:01:2f:71:4e:6a:52:54:00:d2:9a:0e,3600,1742651207,1,0,0,nas,0,
192.168.61.2,52:54:00:d2:9a:0e,ff:00:d2:9a:0e:00:01:00:01:2f:71:4e:6a:52:54:00:d2:9a:0e,3600,1742651207,1,0,0,,2,
192.168.61.2,52:54:00:d2:9a:0e,ff:00:d2:9a:0e:00:01:00:01:2f:71:4e:6a:52:54:00:d2:9a:0e,3600,1742655208,1,0,0,nas,0,
192.168.61.102,52:54:00:b7:66:81,01:52:54:00:b7:66:81,3600,1742656433,1,0,0,democlient1,0,
192.168.61.101,52:54:00:6b:10:96,ff:00:6b:10:96:00:01:00:01:2c:31:af:2b:52:54:00:7b:28:d0,3600,1742656447,1,0,0,democlient2,0,
Nous retrouvons bien «nas», «democlient2» et «democlient2» Il y a toutefois quelque chose de curieux sur «democlient1»: Son CID se borne à son adresse MAC, contrairement aux autres nœuds…

Pour aller plus loin

Kea dhcp server peut utiliser de vraies bases de données relationnelles (MariaDB, PostgreSQL) plutôt qu'un simple fichier CSV. De même, ISC propose un outil de surveillance de plusieurs serveurs: Stork Graphical Management for Kea DHCP. Nécessite une base de données PostgreSQL. Une démonstration en ligne est accessible ici.

1)
Téléchargeable au format ODS pour plus de lisibilité.
Un serveur DHCP: Dernière modification le: 24/03/2025 à 10:25 par prof