DHCP = D<\/mark>ynamic H<\/mark>ost C<\/mark>onfiguration P<\/mark>rotocol<\/p>\n\n\n\n
Le DHCP sera activ\u00e9 sur la VM srvlan pour la zone LAN.<\/p>\n\n\n\n\n\n
Il est aujourd'hui pr\u00e9conis\u00e9 d'utiliser Kea DHCP \u00e0 la place d'ISC DHCP qui n'est plus maintenu.<\/p>\n\n\n\n
Il permet \u00e0 un h\u00f4te qui se connecte sur un r\u00e9seau local d'obtenir automatiquement sa configuration IP, ceci pour une dur\u00e9e d\u00e9termin\u00e9e appel\u00e9e bail DHCP.<\/p>\n\n\n\n
But, faciliter l'affectation des adresses IP sur un r\u00e9seau.<\/p>\n\n\n\n
Les h\u00f4tes enregistr\u00e9s via un serveur DHCP peuvent aussi \u00eatre ajout\u00e9s dynamiquement \u00e0 un serveur DNS.<\/p>\n\n\n\n
DHCP repr\u00e9sente donc une suite logique au DNS dans la construction du r\u00e9seau local virtuel.<\/p>\n\n\n\n
Le DHCP repose sur des requ\u00eates UDP \u00e9mises par les clients et trait\u00e9es par le serveur.<\/p>\n\n\n\n
Exemple d'un \u00e9change de requ\u00eates client\/serveur :<\/p>\n\n\n\n
Les requ\u00eates UDP circulent sur les ports 67 et 68.<\/p>\n\n\n\n
Le client au final re\u00e7oit une confirmation de son IP temporaire (bail)<\/em> ainsi que souvent en compl\u00e9ment l'IP de sa passerelle ainsi que les IP de ses serveurs DNS.<\/p>\n\n\n\n
Nota : Si pas de serveur DHCP, le client s'attribue une adresse IP dans la plage 169.254.0.0\/16.<\/em><\/p>\n\n\n\n
Le serveur DHCP Kea <\/mark>utilis\u00e9 ci-dessous est issu de l'organisme d\u00e9j\u00e0 cr\u00e9ateur du serveur DNS BIND 9 soit l'Internet Software Consortium (ISC)<\/em>.<\/p>\n\n\n\n
Installez ce paquet pour g\u00e9rer la zone LAN en IPv4 :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo apt install kea-dhcp4-server<\/pre>\n\n\n\nLes d\u00e9pendances suivantes ont \u00e9t\u00e9 ajout\u00e9es :<\/p>\n\n\n\n
V\u00e9rifiez le statut du service :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo systemctl status kea-dhcp4-server<\/pre>\n\n\n\nRetour normal :<\/p>\n\n\n\n
\u25cf kea-dhcp4-server.service - Kea IPv4 DHCP daemon\n Loaded: ...service; enabled<\/mark>; preset: enabled)\n Active: active (running<\/mark>) since Tue 2024-...\n Docs: man:kea-dhcp4(8)\n Main PID: 2412 (kea-dhcp4)\n Tasks: 5 (limit: 1077)\n Memory: 4.6M\n CPU: 53ms\n CGroup: \/system.slice\/kea-dhcp4-server.service\n \u2514\u25002412 \/usr\/sbin\/kea-dhcp4 -c \/etc...\n\n...\nf\u00e9vr.. srvlan kea-dhcp4[...]: INFO DHCP4_STARTED<\/mark><\/code><\/pre>\n\n\n\n
Le service est d\u00e9marr\u00e9 et activ\u00e9 par d\u00e9faut (enabled)<\/em>.<\/p>\n\n\n\n
2.2 - Configuration<\/em><\/h4>\n\n\n\n
Le fichier de configuration kea-dhcp4.conf se trouve dans le dossier \/etc\/kea\/.<\/p>\n\n\n\n
Sauvegardez celui-ci en le renommant ainsi :<\/p>\n\n\n\n
[srvlant@srvlan:~$] cd \/etc\/kea\n\n[srvlant@srvlan:~$] sudo mv kea-dhcp4.conf kea-dhcp4.conf_save<\/pre>\n\n\n\nCr\u00e9ez ensuite un nouveau fichier kea-dhcp4.conf :<\/p>\n\n\n\n
[srvlant@srvlan:~$] sudo nano kea-dhcp4.conf<\/pre>\n\n\n\net entrez ce qui suit en respectant le format JSON :<\/p>\n\n\n\n
\/\/ Serveur DHCP Kea\n\/\/ Configuration de base IPv4\n\n{\n\"Dhcp4\": {\n \/\/ Interface r\u00e9seau enp0s8 en \u00e9coute DHCP.\n \"interfaces-config\": {\n \"interfaces\": [\"enp0s8\"]\n },\n\t\n \/\/ Serveur en autorit\u00e9 DHCP pour la zone LAN.\n \"authoritative\": true,\n\t\n \/\/ Pas de MAJ dynamique du serveur DNS Bind9.\n \"ddns-send-updates\" : false,\n\n \/\/ Position du fichier contenant les baux DHCP.\n \"lease-database\": {\n \"type\": \"memfile\",\n \"persist\": true,\n \"name\": \"\/var\/lib\/kea\/kea-leases4.csv\",\n \"lfc-interval\": 3600\n },\n\n \/\/ Bail (renew=50%,rebind=87.5%,valid=100%=8H).\n \"renew-timer\": 14400,\n \"rebind-timer\": 27720,\n \"valid-lifetime\": 28800,\n\n \"option-data\": [\n\t\/\/ Serveur DNS propos\u00e9 aux clients DHCP.\n {\n \"name\": \"domain-name-servers\",\n \"data\": \"192.168.3.1\"\n },\n \n\t\/\/ Domaine propos\u00e9 aux clients pour\n\t\/\/ r\u00e9soudre les noms d'h\u00f4tes via le DNS.\n {\n \"name\": \"domain-search\",\n \"data\": \"intra.loupipfire.fr\"\n }\n ],\n\n \/\/ Plage d'adresses IP pour la zone LAN.\n \"subnet4\": [\n {\n \"subnet\": \"192.168.3.0\/24\",\n \"pools\": [ { \"pool\": \"192.168.3.30 - 192.168.3.50\" } ],\n \"option-data\": [\n {\n \"name\": \"routers\",\n \"data\": \"192.168.3.1\"\n }\n ],\n \n \/\/ IP et noms d'h\u00f4tes r\u00e9serv\u00e9s.\n \"reservations\": [\n {\n \"hw-address\": \"e2:f0:31:2a:b6:05\",\n \"ip-address\": \"192.168.3.20\",\n \"hostname\": \"ctn1\"\n }\n ]\t\t\n }\n ]\n}\n}<\/code><\/pre>\n\n\n\n
Remarques :<\/p>\n\n\n\n
- La carte enp0s8, situ\u00e9e c\u00f4t\u00e9 LAN, sera surveill\u00e9e par le serveur DHCP.<\/p>\n\n\n\n
- A 50% de la dur\u00e9e du bail, la s\u00e9quence de prolongation\/renouvellement de celui-ci d\u00e9butera. <\/p>\n\n\n\n
- L'IP fixe r\u00e9serv\u00e9e pour ctn1 se situe en dehors de la plage des IP d\u00e9di\u00e9e aux autres clients.<\/p>\n\n\n\n
- Attention, l'adresse <\/mark>MAC de ctn1 actuellement dynamique devra \u00eatre d\u00e9clar\u00e9e fixe ci-dessous.<\/p>\n\n\n\n
Red\u00e9marrez le service DHCP et v\u00e9rifiez son statut :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo systemctl restart kea-dhcp4-server\n[srvlan@srvlan:~$] sudo systemctl status kea-dhcp4-server <\/pre>\n\n\n\nRetour du statut : <\/p>\n\n\n\n
\u25cf kea-dhcp4-server.service - Kea IPv4 DHCP daemon\n Loaded: ...service; enabled<\/mark>; preset: enabled)\n Active: active (running<\/mark>) since Tue 2024-...\n Docs: man:kea-dhcp4(8)\n Main PID: 3638 (kea-dhcp4)\n Tasks: 5 (limit: 1077)\n Memory: 3.7M\n CPU: 40ms\n CGroup: \/system.slice\/kea-dhcp4-server.service\n \u2514\u25003638 \/usr\/sbin\/kea-dhcp4 -c \/etc...\n\nf\u00e9vr.. DHCPSRV_CFGMGR...IFACE listening ... enp0s8<\/mark>\nf\u00e9vr.. DHCPSRV_CFGMGR_SOCKET_ ... socket type raw<\/mark>\nf\u00e9vr.. DHCPSRV_CFGMGR_NEW_SUBNET... 192.168.3.0<\/mark> ...\nf\u00e9vr.. DHCP4_CONFIG_COMPLETE DHCP... DDNS: disabled<\/mark>\nf\u00e9vr.. DHCPSRV_MEMFILE_DB ...kea-leases4.csv<\/mark> ...\nf\u00e9vr.. DHCPSRV_MEMFILE_LEASE...kea-leases4.csv.2\nf\u00e9vr.. DHCPSRV_MEMFILE_LEASE...kea-leases4.csv\nf\u00e9vr.. DHCPSRV_MEMFILE_LFC... Cleanup ... 3600 sec<\/mark>\nf\u00e9vr.. DHCP4_MULTI_THREADING_INFO enabled: no, ...\nf\u00e9vr.. DHCP4_STARTED Kea DHCPv4 server ... started<\/mark><\/code><\/pre>\n\n\n\n
Celui-ci ne montre pas d'erreur, le service DHCP sera lanc\u00e9 automatiquement au boot de srvlan.<\/p>\n\n\n\n
V\u00e9rifiez l'utilisation par le service du port UDP 67 :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo ss -anup | grep dhcp<\/pre>\n\n\n\nRetour : <\/p>\n\n\n\n
UN... 0 0 192.168.3.1:67<\/mark> 0.0.0.0:* users:((\"kea-dhcp4<\/mark>\"...))<\/code><\/pre>\n\n\n\n
3 - Gestion des logs du service DHCP<\/h3>\n\n\n\n
3.1 - Cr\u00e9ation d'un fichier de stockage des log<\/em>s<\/h4>\n\n\n\n
Editez le fichier de configuration kea-dhcp4-server :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo nano \/etc\/kea\/kea-dhcp4.conf<\/pre>\n\n\n\net entrez ce qui suit sous la section subnet4 :<\/p>\n\n\n\n
\"subnet4\": [\n ... \n ],<\/mark>\n\n\n \/\/ Gestion des logs du serveur DHCP.<\/mark>\n \"loggers\": [\n {\n \"name\": \"kea-dhcp4\",\n \"output_options\": [\n {\n \"output\": \"\/var\/log\/kea\/kea-dhcp4.log<\/mark>\",\n \"pattern\": \"%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\\n\"\n }\n ],\n \"severity\": \"INFO\",\n \"debuglevel\": 0\n }\n ]\n\n\n\/\/ Ci-dessous, accolades existantes\n}\n}<\/code><\/pre>\n\n\n\n
Ne pas oublier d'ajouter une virgule derri\u00e8re le crochet de fin de section subnet4.<\/p>\n\n\n\n
Red\u00e9marrez le serveur DHCP :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo systemctl restart kea-dhcp4-server\n[srvlan@srvlan:~$] sudo systemctl status kea-dhcp4-server <\/pre>\n\n\n\net affichez le contenu du fichier kea-dhcp4.log qui a \u00e9t\u00e9 cr\u00e9\u00e9 dans le dossier \/var\/log\/kea\/.<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo cat \/var\/log\/kea\/kea-dhcp4.log<\/pre>\n\n\n\n4 - Modification de la configuration DNS statique<\/h3>\n\n\n\n
Ouvrez le fichier DNS de zone directe intra.loupipfire.fr :<\/p>\n\n\n\n
[srvlan@srvlan:~$] cd \/etc\/bind\n[srvlan@srvlan:~$] sudo nano db.intra.loupipfire.fr.directe <\/pre>\n\n\n\net supprimez ou commentez (;<\/mark>)<\/em> les 4 lignes suivantes :<\/p>\n\n\n\n
debian12-vm1 IN A 192.168.3.2\ndebian12-vm2 IN A 192.168.3.4\nctn1 IN A 192.168.3.6\nctn2 IN A 192.168.3.8<\/code><\/pre>\n\n\n\n
Ouvrez le fichier DNS de zone inverse intra.loupipfire.fr :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo nano db.intra.loupipfire.fr.inverse <\/pre>\n\n\n\net supprimez ou commentez (;<\/mark>)<\/em> les 4 lignes suivantes :<\/p>\n\n\n\n
2 IN PTR debian12-vm1.intra.loupipfire.fr. \n4 IN PTR debian12-vm2.intra.loupipfire.fr.\n6 IN PTR ctn1.intra.loupipfire.fr.\n8 IN PTR ctn2.intra.loupipfire.fr.<\/code><\/pre>\n\n\n\n
Relancez le service DNS :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo systemctl restart bind9<\/pre>\n\n\n\nNota : Ne modifiez pas les lignes des h\u00f4tes srvlan\/ovs.<\/em><\/p>\n\n\n\n
5 - Tests de bon fonctionnement du DHCP<\/h3>\n\n\n\n
5.1 - Pr\u00e9paration<\/em><\/h4>\n\n\n\n
Au pr\u00e9alable, \u00e9ditez le fichier apparmor suivant :<\/p>\n\n\n\n
[srvlan@srvlan:~$] cd \/etc\/apparmor.d\n[srvlan@srvlan:~$] sudo nano usr.sbin.kea-dhcp4<\/pre>\n\n\n\net ajoutez ce contenu \u00e0 la fin de celui-ci :<\/p>\n\n\n\n
# Section ajout\u00e9e pour tracer les messages DHCP\n owner \/var\/log\/kea\/kea-dhcp4.packets.log<\/mark> rw,\n owner \/var\/log\/kea\/kea-dhcp4.packets.log.[0-9]* rw,\n owner \/var\/log\/kea\/kea-dhcp4.packets.log.lock rwk,\n\n\/\/ Ci-dessous, accolade existante\n}<\/code><\/pre>\n\n\n\n
Ceci permettra de cr\u00e9er un fichier kea-dhcp4.packets.log qui stockera les messages DHCP clients <- -> serveur.<\/p>\n\n\n\n
Il est parall\u00e8lement n\u00e9cessaire de modifier cet autre fichier apparmor :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo nano usr.sbin.kea-lfc<\/pre>\n\n\n\nen ajoutant ce contenu sous la ligne \"owner \/var\/log\/kea\/kea-dhcp6.log w,\" :<\/p>\n\n\n\n
owner \/var\/log\/kea\/kea-dhcp4.packets.log w,<\/code><\/pre>\n\n\n\n
Editez ensuite le fichier de configuration du serveur :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo nano \/etc\/kea\/kea-dhcp4.conf<\/pre>\n\n\n\net ajoutez ce contenu \u00e0 l'int\u00e9rieur de la section loggers :<\/p>\n\n\n\n
\/ Gestion des logs du serveur DHCP.\n \"loggers\": [\n {\n \"name\": \"kea-dhcp4\",\n ...\n },<\/mark>\n\n {\n \"name\": \"kea-dhcp4.packets\",\n \"output_options\": [\n {\n \"output\": \"\/var\/log\/kea\/kea-dhcp4.packets.log<\/mark>\",\n \"maxver\": 3\n }\n ],\n \"severity\": \"DEBUG\",\n \"debuglevel\": 99\n }\n\n\/\/ Ci-dessous, crochet et accolades existants\n ]\n}\n}<\/code><\/pre>\n\n\n\n
Ne pas oublier d'ajouter une virgule derri\u00e8re l'accolade de fin du name pr\u00e9c\u00e9dent.<\/p>\n\n\n\n
Red\u00e9marrez les services AppArmor et DHCP :<\/p>\n\n\n\n
[srvlan@srvlan:~$] sudo systemctl restart apparmor\n[srvlan@srvlan:~$] sudo systemctl status apparmor\n\n[srvlan@srvlan:~$] sudo systemctl restart kea-dhcp4-server\n[srvlan@srvlan:~$] sudo systemctl status kea-dhcp4-server <\/pre>\n\n\n\nUn fichier vide kea-dhcp4.packets.log a \u00e9t\u00e9 cr\u00e9\u00e9 dans le dossier \/var\/log\/kea\/.<\/p>\n\n\n\n
Ouvrez \u00e0 pr\u00e9sent un second terminal et connectez-vous en tant que root (Cde : su root)<\/em>.<\/p>\n\n\n\n
Entrez la Cde de tra\u00e7age qui permettra d'observer en temps r\u00e9el les messages DHCP \u00e9chang\u00e9s :<\/p>\n\n\n\n
[root@srvlan:~#] tail -f \/var\/log\/kea\/kea-dhcp4.packets.log<\/pre>\n\n\n\n5.2 - Test depuis les VM debian12-vm1 et 2<\/em><\/h4>\n\n\n\n
R\u00e9f\u00e9rez-vous au M\u00e9mento 4.1<\/a> pour modifier les param\u00e8tres r\u00e9seau.<\/p>\n\n\n\n
- VM debian12-vm1<\/p>\n\n\n\n
Ajustez la M\u00e9thode de l'onglet Param\u00e8tres IPv4 sur Automatique (DHCP).<\/p>\n\n\n\n
Supprimez ensuite l'adresse IP statique et enregistrez.<\/p>\n\n\n\n
Red\u00e9marrez la VM Debian :<\/p>\n\n\n\n
[client-linux@debian12-vm1:~$] sudo reboot<\/pre>\n\n\n\net contr\u00f4lez l'affectation d'une nouvelle adresse IP :<\/p>\n\n\n\n
[client-linux@debian12-vm1 :~$ ] ip address<\/pre>\n\n\n\nqui doit faire partie de la plage DHCP du serveur DHCP.<\/p>\n\n\n\n
D\u00e9marrez Firefox et v\u00e9rifiez le bon acc\u00e8s \u00e0 Internet.<\/p>\n\n\n\n
- VM srvlan
V\u00e9rifiez que le terminal de tra\u00e7age contient ces lignes :<\/p>\n\n\n\n \n \n5.3 - Test depuis le conteneur Podman ctn1<\/em><\/h4>\n\n\n\n
Pour affecter \u00e0 ctn1 une adresse MAC fixe et le d\u00e9clarer client DHCP, \u00e9ditez ce script d'ovs :<\/p>\n\n\n\n
[switch@ovs:~$] sudo nano \/root\/networknamespace.sh<\/pre>\n\n\n\net remplacez la ligne ci-dessous concernant ctn1 :<\/p>\n\n\n\n
## Activation des extr\u00e9mit\u00e9s vctn1\/2 et lo c\u00f4t\u00e9 nsctn1...\n...\n...\nip netns exec nsctn1 ip link set vctn1 up \n...<\/code><\/pre>\n\n\n\n
par celle-ci :<\/p>\n\n\n\n
ip netns exec nsctn1 ip link set vctn1 address e2:f0:31:2a:b6:05<\/mark> up <\/code><\/pre>\n\n\n\n
Nota : L'adresse MAC doit \u00eatre celle entr\u00e9e ci-dessus dans le fichier kea-dhcp4.conf de srvlan.<\/em><\/p>\n\n\n\n
Commentez ensuite la ligne affectant une IP fixe \u00e0 ctn1 :<\/p>\n\n\n\n
## Ajout adresses IP extr\u00e9mit\u00e9s vctn1\/2 c\u00f4t\u00e9 nsctn1...\n#<\/mark>ip netns exec nsctn1 ip addr add 192.168.3.6\/24 dev vctn1\n...<\/code><\/pre>\n\n\n\n
et ajoutez ceci \u00e0 la fin du fichier juste avant exit 0 :<\/p>\n\n\n\n
## D\u00e9claration de l'interface vctn1 comme client DHCP.\nip netns exec nsctn1 dhclient -4<\/mark> vctn1\n<\/code><\/pre>\n\n\n\n
Puis rebootez la VM ovs et contr\u00f4lez le r\u00e9sultat :<\/p>\n\n\n\n
[switch@ovs:~$] sudo reboot\n\n[switch@ovs:~$] sudo podman exec -it ctn1 bash\n\nStarting OpenBSD Secure Shell server: sshd.\nroot@...:\/# ip address<\/pre>\n\n\n\nLe conteneur doit avoir re\u00e7ue l'adresse IP 192.168.3.20.<\/p>\n\n\n\n
6 - Bilan<\/h3>\n\n\n\n
Le DHCP remplit son r\u00f4le mais la r\u00e9solution DNS locale sur les VM debian12-vm* et les conteneurs ctn* est perdue suite aux modifications du DNS statique. <\/p>\n\n\n\n
Il est, pour corriger cela et disposer \u00e0 l'avenir d'une modification automatique des fichiers DNS, n\u00e9cessaire de mettre en place un DNS dynamique.<\/p>\n\n\n
\n<\/figure><\/div>\n\n\n
Nouvelle \u00e9tape franchie.
Le m\u00e9mento 7.3 vous attend \u00e0
pr\u00e9sent pour modifier le DNS statique
en DNS dynamique. <\/p>\n\n\n\n