Outils pour utilisateurs

Outils du site


Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
050-manips-ipv4:030-config-ipv4 [le 05/04/2025 à 16:40] – supprimée - modification externe (Date inconnue) 127.0.0.1050-manips-ipv4:030-config-ipv4 [le 05/04/2025 à 16:40] (Version actuelle) – ↷ Page déplacée de 050_profondeurs:030-config-ipv4 à 050-manips-ipv4:030-config-ipv4 prof
Ligne 1: Ligne 1:
 +====== La configuration IPv4 ======
 +Tout nœud présent sur un réseau doit disposer d'une configuration IP complète et cohérente. Au minimum une adresse IP et un masque de réseau, chaque nœud du même réseau devant avoir une partie commune, celle qui représente justement le réseau.
  
 +Plusieurs méthodes sont possibles pour réaliser cette configuration, allant de la plus transparente à la plus professionnelle.
 +===== Zeroconf =====
 +Sous ce terme plus ou moins générique se cachent des systèmes destinés à attribuer une configuration IP à chaque nœud du LAN de façon totalement transparente pour les utilisateurs. Dans les distributions GNU/Linux, c'est le démon ''Avahi'' qui se charge de cette tâche, ainsi d'ailleurs que la gestion des relations entre IP et nom des nœuds.
 +
 +Comme ce démon ne possède pas le pouvoir de divination, il est contraint de lancer des diffusions (broadcast) périodiques pour tenir à jour le système. C'est une solution que nous n'étudierons pas ici. Si l'on s'intéresse aux réseaux, on cherche à maîtriser ce qu'il se passe sur le notre 8-)
 +===== Configuration manuelle =====
 +Comme indiqué, ''demoserver'' dispose d'une configuration manuelle. Ce qui suit est spécifique à Debian et dérivées, mais les autres systèmes disposent tous d'un moyen de configuration manuelle.
 +<html><pre class="code">
 +
 +source /etc/network/interfaces.d/*
 +
 +# The loopback network interface
 +auto lo
 +iface lo inet loopback
 +
 +<span class="hly">allow-hotplug <b>enp7s0</b>
 +iface <b>enp7s0</b> inet static
 +  <span class="bhlg">address 192.168.61.1/24</span>
 +</pre></html>
 +
 +En une seule ligne, nous fournissons l'adresse du nœud et le masque de réseau en notation CIDR.
 +
 +Autrefois, les interfaces réseaux de type Ethernet se nommaient ''eth//n//'' //n// variant de 0 à un certain nombre, suivant la quantité d'interfaces installées sur la machine. C'était simple, c'était lisible, mais sa avait un inconvénient (très mineur la plupart du temps). Les interfaces étaient numérotées dans l'ordre de leur découverte par le kernel, ce qui pouvait faire que l'interface nommée ''eth0'' puisse éventuellement se retrouver renommée en ''eth1'' si l'on ajoute un nouveau périphérique Ethernet dans la machine. Tout le monde faisant ça touis les jours, il était urgent de trouver une parade.
 +
 +Désormais le nom est calculé en fonction de plusieurs critères. C'est ''udev'', le gestionnaire de périphériques du kernel qui nomme les interfaces. L'avantage des logiciels libres, c'est que le code source est accessible et qu'on y troude quelque chose de ce genre:
 +<code>
 +* Two character prefixes based on the type of interface:
 +   en -- ethernet
 +   sl -- serial line IP (slip)
 +   wl -- wlan
 +   ww -- wwan
 + *
 + * Type of names:
 +   b<number>                             -- BCMA bus core number
 +   ccw<name>                             -- CCW bus group name
 +   o<index>[d<dev_port>                -- on-board device index number
 +   s<slot>[f<function>][d<dev_port>    -- hotplug slot index number
 +   x<MAC>                                -- MAC address
 +   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
 +                                         -- PCI geographical location
 +   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
 +                                         -- USB port number chain
 +</code>
 +Bref, tout ceci fait que notre interface se nomme bien intuitivement ''enp7s0''
 +
 +===== DHCP =====
 +[[https://fr.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol|Dynamic Host Configuration Protocol]], voilà du sérieux... Il faut un serveur DHCP sur le réseau. Il se trouve que généralement les «box» d'accès à l'internet embarquent ce serveur, naturellement configuré par défaut, mais qu'il est possible de modifier. Par exemple, la Freebox Révolution permet de faire quasiment tout ce qu'il est possible de faire avec un serveur DHCP de qualité professionnelle comme ''isc-dhcp-server'' ou son successeur ''kea-dhcpv4-server''. Bien que [[https://www.isc.org/dhcp/|Internet Systems Consortium]] ait annoncé la fin de la maintenance de ce serveur depuis 2022, Il est toujours présent dans la distribution Debian actuelle «Bookworm» (Février 2025), il l'est encore dans la «Trixie» (actuellement au stade «Testing»). ISC propose donc désormais son successeur «kea» qui, du reste, est également fourni dans la version Debian «Bookwarm». Mais ici, nous nous bornerons à énumérer les fonctions élémentaires d'un serveur DHCP.  Une installation détaillée sera étudiée plus loin.
 +==== Le client ====
 +
 +Ce protocole nécessite un logiciel serveur sur le réseau local et des logiciels clients sur les autres nœuds. Pour l'instant, ce logiciel serveur n'est pas installé. Voyons avec notre sniffeur favori ce qu'il se passe si un client démarre:
 +<code>
 +1 0.000000000    0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0xc356da15
 +2 7.278755900    0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0xc356da15
 +3 22.288572403   0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0xc356da15
 +4 35.326945321   0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0xc356da15
 +5 52.906541227   0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0xc356da15
 +...
 +</code>
 +Quelqu'un qui n'a pas d'adresse IP (0.0.0.0) diffuse (255.255.255.255) une demande de découverte de serveur DHCP. Il n'y en a pas, le client essaye encore... et encore...
 +
 +Voyons dans le détail l'une quelconque de ces trames:
 +<html><pre class="code">
 +<span class="hlw">Ethernet II, Src: RealtekU_b7:66:81 (52:54:00:b7:66:81), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
 +    <b>Destination: Broadcast (ff:ff:ff:ff:ff:ff)</b>
 +        Address: Broadcast (ff:ff:ff:ff:ff:ff)
 +        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
 +        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
 +    Source: RealtekU_b7:66:81 (52:54:00:b7:66:81)
 +        Address: RealtekU_b7:66:81 (52:54:00:b7:66:81)
 +        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
 +        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
 +    Type: IPv4 (0x0800)</span>
 +<span class="hly">Internet Protocol Version 4, <b>Src: 0.0.0.0, Dst: 255.255.255.255</b>
 +    0100 .... = Version: 4
 +    .... 0101 = Header Length: 20 bytes (5)
 +    Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
 +        0001 00.. = Differentiated Services Codepoint: Unknown (4)
 +        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
 +    Total Length: 328
 +    Identification: 0x0000 (0)
 +    000. .... = Flags: 0x0
 +        0... .... = Reserved bit: Not set
 +        .0.. .... = Don't fragment: Not set
 +        ..0. .... = More fragments: Not set
 +    ...0 0000 0000 0000 = Fragment Offset: 0
 +    Time to Live: 128
 +    <b>Protocol: UDP (17)</b>
 +    Header Checksum: 0x3996 [validation disabled]
 +    Source Address: 0.0.0.0
 +    Destination Address: 255.255.255.255</span>
 +<span class="hlg"><b>User Datagram Protocol, Src Port: 68, Dst Port: 67</b>
 +    Source Port: 68
 +    Destination Port: 67
 +    Length: 308
 +    Checksum: 0x7714 [unverified]
 +    UDP payload (300 bytes)</span>
 +<span class="hlb">Dynamic Host Configuration Protocol (Discover)
 +    Message type: Boot Request (1)
 +    Hardware type: Ethernet (0x01)
 +    Hardware address length: 6
 +    Hops: 0
 +    Transaction ID: 0xc356da15
 +    Seconds elapsed: 53
 +    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
 +    <b>Client MAC address: RealtekU_b7:66:81 (52:54:00:b7:66:81)</b>
 +    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
 +        <b>DHCP: Discover (1)</b>
 +    Option: (50) Requested IP Address (192.168.61.101)
 +        Length: 4
 +        Requested IP Address: 192.168.61.101
 +    Option: (12) Host Name
 +        Length: 11
 +        Host Name: democlient1
 +    <b>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</b>
 +    Option: (61) Client identifier
 +        Length: 19
 +        IAID: 00b76681
 +        DUID Type: link-layer address plus time (1)
 +        Hardware type: Ethernet (1)
 +        Time: 741453611
 +        Link layer address: 52:54:00:7b:28:d0
 +    Option: (255) End
 +        Option End: 255
 +    Padding: 00</span>
 +</pre></html>
 +  * Couche Ethernet, c'est logiquement du broadcast MAC ff:ff:ff:ff:ff:ff
 +  * Couche IP c'est non moins logiquement du broadcast IP 255.255.255.255, nous apprenons que c'es UDP qui va être utilisé par l'application;
 +  * côté UDP donc, nous découvrons les ports utilisés: 68 par le client et 67 par le serveur;
 +  * enfin, l'application cliente indique son adresse MAC , et réclame une liste impressionnante de paramètres. Le pauvre ne sait pas du tout dans quel environnement il se trouve et cherche à savoir...
 +
 +Mais personne ne lui répond :-/
 +==== Le serveur ====
 +Installons un logiciel serveur sur ''demoserver''. Pourquoi pas le ''kea-dhcp4-server'' de chez ISC puisque isc-dhcp-server n'est plus maintenu.
 +
 +  apt install kea-dhcp4-server
 +
 +Une fois finie l'installation, il faut effectuer un minimum de configuration. Ce serveur utilise un fichier au format JSON (c'est pour faciliter les erreurs de syntaxe :-/ ).
 +
 +Voici un fichier minimum ''/etc/kea/kea-dhcp4.conf'':
 +<html><pre class="code">
 +{
 +    "Dhcp4": {
 +<span class="hly">        "interfaces-config": {
 +            "interfaces": [
 +                "enp7s0"
 +            ]
 +        }</span>
 +<span class="hlg">        "valid-lifetime": 360,
 +        "renew-timer": 180,
 +        "rebind-timer": 350,
 +        "authoritative": true,</span>
 +        "lease-database": {
 +            "type": "memfile",
 +            "persist": true,
 +            "name": "/var/lib/kea/kea-leases4.csv",
 +            "lfc-interval": 3600
 +        },
 +        "subnet4": [
 +            {
 +<span class="hlb">                "subnet": "192.168.61.0/24",
 +                "pools": [
 +                    {
 +                        "pool": "192.168.61.100 - 192.168.61.120"</span>
 +                    }
 +                ],
 +            }
 +        ]
 +    }
 +}
 +</pre></html>
 +  * en jaune, la ou les interfaces par lesquelles le serveur doit rester à l'écoute. ici ''enp7s0'';
 +  * en vert des grandeurs temporelles concernant la validité du bail attribué:
 +      * durée de vie de 360 secondes (très peu, pour la manip. Dans la pratique, c'est à évaluer en fonction du besoin);
 +      * durée à partir de laquelle le client commence à demander un renouvellement; (généralement au milieu de la durée de vie);
 +      * durée à partir de laquelle le client doit commencer à s'affoler s'il n'a toujours pas de réponse et refaire une recherche de serveur.
 +  * en bleu le réseau concerné, ici bien entendu ''192.168.61.0/24'';
 +  * la réserve d'adresses dont le serveur dispose pour configurer ses clients, ici de ''192.168.61.100'' à ''192.168.60.120'', ce qui est pour l'instant suffisant, mais qui peut être étendu dans la limite du réseau défini.
 +
 +Il faut (re)démarrer le serveur:
 +  systemctl restart kea-dhcp4-server.service
 +et s'assurer qu'il a bien démarré. La moindre erreur de syntaxe dans le fichier JSON étant fatale.
 +==== Retour sur le client ====
 +Voyons maintenant ce qu'il se passe:
 +<code>
 +1 0.000000000    0.0.0.0               255.255.255.255       DHCP     342    DHCP Discover - Transaction ID 0x9c1733a
 +2 0.001231474    192.168.61.1          192.168.61.101        DHCP     350    DHCP Offer    - Transaction ID 0x9c1733a
 +3 0.001655257    0.0.0.0               255.255.255.255       DHCP     347    DHCP Request  - Transaction ID 0x9c1733a
 +4 0.002352680    192.168.61.1          192.168.61.101        DHCP     350    DHCP ACK      - Transaction ID 0x9c1733a
 +</code>
 +Clairement, ça se passe beaucoup mieux. Voyons ce que le serveur offre:
 +<html><pre class="code">
 +Dynamic Host Configuration Protocol (Offer)
 +    Message type: Boot Reply (2)
 +    Hardware type: Ethernet (0x01)
 +    Hardware address length: 6
 +    Hops: 0
 +    Transaction ID: 0x09c1733a
 +    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
 +    <span class="hly">Your (client) IP address: 192.168.61.101</span>
 +    Next server IP address: 0.0.0.0
 +    Relay agent IP address: 0.0.0.0
 +    Client MAC address: RealtekU_b7:66:81 (52:54:00:b7:66:81)
 +    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
 +        <span class="hly">Subnet Mask: 255.255.255.0</span>
 +    Option: (12) Host Name
 +        Length: 11
 +        <span class="hly">Host Name: democlient1</span>
 +    Option: (51) IP Address Lease Time
 +        Length: 4
 +        <span class="hly">IP Address Lease Time: (360s) 6 minutes</span>
 +    Option: (54) DHCP Server Identifier (192.168.61.1)
 +        Length: 4
 +        <span class="hly">DHCP Server Identifier: 192.168.61.1</span>
 +    Option: (58) Renewal Time Value
 +        Length: 4
 +        <span class="hly">Renewal Time Value: (180s) 3 minutes</span>
 +    Option: (59) Rebinding Time Value
 +        Length: 4
 +        <span class="hly">Rebinding Time Value: (350s) 5 minutes, 50 seconds</span>
 +    Option: (61) Client identifier
 +        Length: 19
 +        IAID: 00b76681
 +        DUID Type: link-layer address plus time (1)
 +        Hardware type: Ethernet (1)
 +        Time: 741453611
 +        Link layer address: 52:54:00:7b:28:d0
 +    Option: (255) End
 +        Option End: 255
 +</pre></html>
 +
 +Le serveur fournit une adresse et les paramètres du bail alloué, mais ne répond bien sûr pas aux autres requêtes. 
 +
 +Le client ayant déjà un nom, en l’absence de directive particulière, il confirme ce nom.
 +
 +En laissant tourner wireshark, nous observons dans la suite:
 +      1     192.168.61.101        192.168.61.1          DHCP         DHCP Request 
 +      2     192.168.61.1          192.168.61.101        DHCP         DHCP ACK 
 +Pas la peine d'aller voir en profondeur, ici le client a déjà son adresse ''192.168.61.101'' et interroge directement le serveur ''192.168.61.1'' qui lui renouvelle son bail dans les mêmes conditions.
 +
 +Tout le processus sera étudié dans le détail dans le chapitre des [[090_applicatifs:start|Protocoles applicatifs]]. Entre temps, nous aurons ajouté quelques services, amélioré les configurations pour avoir quelque chose de plus proche d'un réseau en production.
 +
 +===== Un coup d'œuil sur le client =====
 +Debian utilise par défaut ''isc-dhcp-client'', ce qui est d'autant plus cohérent que nous utilisons le serveur issu également de chez ISC. 
 +
 +Il existe un fichier de configuration dans ''/etc/dhcp/dhcp.conf''. Sans entrer dans les détails qui seront largement développés dans l'installation pratique d'un serveur DNS, voici l'allure générale ce ce fichier:
 +<html><pre class="code">
 +option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
 +<span class="hly">send host-name = gethostname();</span>
 +<span class="hlg">request subnet-mask, broadcast-address, time-offset, routers,
 + rfc3442-classless-static-routes, ntp-servers;</span>
 +</pre></html>
 +Simplement, nous remarquons que le client envoie au serveur son «hostname» et lui réclame un certain nombre de paramètres. Bien sûr une adresse IP, un masque, une adresse de broadcast, un décalage horaire et les adresses de passerelles (routeurs).
 +
 +Ce client stocke les baux qu'il reçoit dans le fichier ''/var/lib/dhcp/dhclient.enp1s0.leases''. Nous y trouvons une liste mise à jour à chaque nouveau bail reçu.
 +
 +Pour l'instant, contentons-nous d'une lecture rapide du dernier bail reçu:
 +<html><pre class="code">
 +lease {
 +  interface "enp1s0";
 +  fixed-address 192.168.61.100;
 +  option subnet-mask 255.255.255.0;
 +  option dhcp-lease-time 360;
 +  option routers 192.168.61.1;
 +  option dhcp-message-type 5;
 +  option dhcp-server-identifier 192.168.61.1;
 +  option dhcp-renewal-time 180;
 +  option dhcp-rebinding-time 350;
 +  option host-name "democlient1";
 +  option dhcp-client-identifier ff:0:b7:66:81:0:1:0:1:2c:31:af:2b:52:54:0:7b:28:d0;
 +<span class="hly">  renew 0 2025/03/02 19:01:25;
 +  rebind 0 2025/03/02 19:04:33;
 +  expire 0 2025/03/02 19:04:43;</span>
 +}
 +</pre></html>
 +En regardant ce bail, nous pouvons voir que le serveur n'a pas répondu à toutes les demandes. En revanche, les les dates pour la demande de renouvellement, de recherche d'un nouveau serveur DHCP et celle de l'expiration de ce bail sont imposées par le serveur.
La configuration IPv4: Dernière modification le: 01/01/1970 à 00:00 par