Ceci est une ancienne révision du document !
Table des matières
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:
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 secondsVoyons 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