LINUX:IPv6-Méthode DHCP

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour aux Notions de réseau


But

Pour l'adressage IPv6, il a deux méthodes qui font appel à un serveur DHCP: Automatique et Automatique(DHCP uniquement).

Souvenons-nous qu'un serveur DHCP en IPv6 ne fournit pas le prefix et la route par défaut. C'est le rôle du routeur.


Ecran

On peut le configurer grâce aux assistants en mode de fenêtrage.


En ligne de commande, on lance l'application:

nmtui

On sélectionne la modification de l'interface désiré. Pour l'IPv6, on sélectionne la méthode "Automatique (DHCP seulement)" afin de forcer la demande à un serveur DHCP.



On valide.

On peut aller vérifier dans le fichier de configuration de NetworkManager "/etc/NetworkManager/system-connections/enp0s25.nmconnection", l'interface étant "enp0s25". Elle est très réduite.


...
[ipv6]
method=dhcp
...

Il reste à redémarrer le service NetworkManager:

systemctl restart NetworkManager.service

ou a redémarrer la machine.


Si nous disposons d'un système de fenêtrage comme sur une station de travail, on peut lancer le paramétrage réseau pour l'interface souhaité, filaire ou Wifi pour le protocole IPv6.



Le fichier de configuration de NetworkManager est identique au cas précédent.


Problème

Après consultation des informations découlant de cette configuration, on constate que la longueur du prefix est de 128 bits et non de 64 bits. De plus, la route par défaut n'est pas présente.

Si on essaye l'autre méthode: Automatique qui doit faire appel à un serveur DHCP s'il est présent sur le réseau local, on constate que le résultat est identique à la situation sans serveur DHCP.


RDISC6

Après déductions, ces problèmes doivent venir du router. Dans notre cas, c'est le modem/routeur de Proximus. Il possède bien un serveur DHCP pour IPv4 mais pas pour IPv6. Ses fonctionnalités pour la méthode Automatique fonctionne sans la présence d'un serveur DHCP pour IPv6.

Nous allons effectuer une requête à ce routeur afin qu'il nous envoie les informations Liées à ce protocole de ces demandes. Il existe un produit qui peut faire cette tâche: Rdisc6

On l'installe en ligne de commande sur notre machine client pour le serveur DHCP:

dnf install rdisc6

On effectue ensuite notre requête; il lui faut indiquer sur quel interface réseau effectuer cette demande:

rdisc6 enp0ds25

Elle envoie cette requête sur le réseau local et attend qu'un ou plusieurs routeurs si présents répondent.

Voici la réponse:


Solicitation de ff02::2 (ff02::2) sur enp0s25...
 
Limite de saut (TTL)      :           64 (      0x40)
Conf. d’adresse par DHCP  :          Non
Autres réglages par DHCP  :          Non
Agent domestique (mobile) :          Non
Préférence du routeur     :        moyen
Proxy (découverte voisin) :          Non
Durée de vie du routeur   :          300 (0x0000012c) secondes
Temps d’atteinte          :        30000 (0x00007530) millisecondes
Temps de retransmission   :  non indiqué (0x00000000)
 Préfixe                  : 2a02:a03f:c92a:aa00::/64
  Sur le lien (on-link)   :          Oui
  Conf. autonome d’adresse:          Oui
  Durée de validité       :        86400 (0x00015180) secondes
  Durée de préférence     :        72000 (0x00011940) secondes
 Route                    : 2a02:a03f:c92a:aa00::/56
  Préférence de route     :        moyen
  Durée de vie de route   :        86400 (0x00015180) secondes
 Serveur DNS récursif     : fdaa:fbbc:bfdd:eef0:ff:f1d0::
  Validité du serveur     :           60 (0x0000003c) secondes
 MTU                      :         1488 octets (valide)
 Adresse source de lien   : A8:6A:BB:88:99:E3
 de fe80::aa6a:bbff:fe88:99e3

C'est bien notre modem/routeur de Proximus; on retrouve son adresse IPv6 Link-Local. Mais on remarque en début de journal, qu'il ne répond pas aux demandes faisant intervenir le protocole DHCP.

La méthode "Automatique (DHCP seulement)" ne fait pas appel aux données du routeur sauf éventuellement des données connexes tel l'adresse du serveur DNS. Notre routeur de Proximus ne le permet pas (option: "Autres réglages par DHCP").

Pour la méthode "Automatique" et si l'option "Conf. d’adresse par DHCP" était active, on verrait apparaître une seconde adresse Unicast Global fournie par le serveur DHCP mais toujours avec la longueur de 128 bits.

Mais nous n'avons pas de second routeur.


Script pour l'adresse de la route par défaut

Je me suis aperçu que le routeur émet son adresse qui est captée par la récolte d'informations liée au voisinage réseau chez notre machine client DHCP en manque de route par défaut.

Nous allons créer un script qui sera exécuté par notre machine client DHCP afin de capturer cette adresse du router et ensuite nous allons exécuter une commande qui va ajouter à la volée cette adresse de route par défaut.


Script n°1

Ce script, très simple, sera placé sur notre machine client DHCP dans le répertoire dédié à cet effet: "/etc/dhcp/dhclient.d"; on le nommera "dr.add1.sh" (comme default-route-add). Voici le script:


#!/bin/bash
# pause pour laisser au voisinage réseau de se remplir
/bin/sleep 60
# détection du remplissage de la route par défaut; si elle existe, on abandonne
DR=`/bin/ip -6 route show default`
if [ "$DR" != "" ]
then
 exit
fi
# détection de la route par voisinage réseau, ajout de la route par défaut
ROUTE=`/bin/ip -6 nei show | /bin/grep "router " | /bin/grep -v ":: dev"`
IP=`/bin/echo $ROUTE | /bin/awk '{printf("%s",$1)}' `
IF=`/bin/echo $ROUTE | /bin/awk '{printf("%s",$3)}' `
/bin/ip -6 route add default via $IP dev $IF

En début, on laisse le temps au système pour récolter les machines voisines. Cette partie peut être améliorée.

Ensuite on vérifie que la route par défaut n'est pas déjà implémentée auquel cas, on ne va pas plus loin. En effet ce script va s'exécuter à chaque fois qu'il y a un changement dans la configuration du réseau, ce qui sera le cas après l'ajout de la route par défaut.

Ceci fait, on passe au travail proprement dit. On récupère l'adresse du routeur détecté et on en extrait son adresse et l'interface de récolte.

Enfin, avec ces deux informations, on ajoute notre route par défaut.


Notons que ce script est conçu pour la présence d'un seul routeur. S'il y en a plus, c'est la première route détectée qui est retenue.


Script n°2

Nous avons améliorer le script afin de tenir compte de toutes les routes découvertes. Mais il est basé sur le même principe.

Dans le répertoire dédié à cet effet: "/etc/dhcp/dhclient.d"; on le nommera "dr.add2.sh" (comme default-route-add). Voici le script:


#!/bin/bash
# pause pour laisser au voisinage réseau de se remplir
/bin/sleep 60
# détection du remplissage des routes par défaut; si elles existent, on abandonne
DR=`/bin/ip -6 route show default`
if [ "$DR" != "" ]
then
 exit
fi
# détection des routes par voisinage réseau, création et exécution du script
/bin/ip -6 nei show | /bin/grep "router " | /bin/grep -v ":: dev" > /tmp/router.txt
/bin/awk '{printf("/bin/ip -6 route add default via %s dev %s metric 10%d\n",$1,$3,NR)}' /tmp/router.txt > /tmp/dr.add.bat
#/bin/awk '{printf("/bin/ip -6 route del default via %s dev %s metric 10%d\n",$1,$3,NR)}' /tmp/router.txt > /tmp/dr.del.bat
#/bin/chmod 700 /tmp/dr.del.bat
/bin/bash /tmp/dr.add.bat
# nettoyage
/bin/rm -f /tmp/dr.add.bat
/bin/rm -f /tmp/router.txt

Il passe ici, non plus par l'utilisation de variables mais par des fichiers créés dans le répertoire temporaire. Le fichier final qui contient les commandes, est exécuté.

Note: En commentaire, le script qui permet de détruire ces routes est laissé.


Evidemment on n'implémente qu'un des deux scripts.


Vérifications

IFCONFIG

La commande de ligne après filtrage pour notre interface et limitée à IPv6 et l'adresse MAC:

ifconfig

donne:


inet6 fe80::21c:c0ff:feaf:f1db  prefixlen 64  scopeid 0x20<link>
inet6 2a02:a03f:c92a:aa00:202c:e444:51b5:9c16  prefixlen 128  scopeid 0x0<global>
ether 00:1c:c0:af:f1:db  txqueuelen 1000  (Ethernet)

La longueur du prefix est de 128 bits mais cette situation ne semble pas poser de problème.

Concernant l'adresse IPv6, on est bien dans la tranche configurée au niveau du serveur DHCP: 2a02:a03f:c92a:aa00:202c:e444:51b5:9c16


ROUTE

Visualisons les routes avec la commande:

route -6n

qui donne:


Table de routage IPv6 du noyau
Destination                                 Next Hop                   Flag Met  Ref  Use If
2a02:a03f:c92a:aa00:202c:e444:51b5:9c16/128 ::                         U    100  1      0 enp0s25
fe80::/64                                   ::                         U    1024 1      0 enp0s25
::/0                                        fe80::aa6a:bbff:fe88:99e3  UG   1024 1      0 enp0s25
::1/128                                     ::                         Un   0    4      0 lo
2a02:a03f:c92a:aa00:202c:e444:51b5:9c16/128 ::                         Un   0    2      0 enp0s25
fe80::21c:c0ff:feaf:f1db/128                ::                         Un   0    4      0 enp0s25
ff00::/8                                    ::                         U    256  4      0 enp0s25
::/0                                        ::                         !n   -1   1      0 lo

On remarque la route par défaut qui a été ajoutée.


Voisinage

Pour récupérer la table des adresses MAC connues, la commande est différente en IPv6 par rapport à IPv4:

ip -6 neighbour show

qui donne après filtrage:


fe80::21c:c0ff:fea3:90c2 dev enp0s25 lladdr 00:1c:c0:a3:90:d2 STALE
2a02:a03f:c92a:aa00:21c:c0ff:fea3:90c2 dev enp0s25 lladdr 00:1c:c0:a3:90:d2 STALE
fe80::aa6a:bbff:fe88:99e3 dev enp0s25 lladdr a8:6a:bb:88:99:e3 router STALE

On retrouve les adresses du router et du serveur DHCP.


Resolve

Pour vérifier la présence de notre serveur DNS, nous utilisons la commande de ligne:

resolvectl status

qui donne:


Global
         Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: foreign
 
Link 2 (enp0s25)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
         Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
       DNS Servers: 192.168.1.1 2001:4860:4860::8888
        DNS Domain: home.dom
     Default Route: yes

--- On remarque l'adresse du serveur DNS et le domaine local de recherche fournis par le serveur DHCP.


Accès Internet

L'adresse IPv6 Global Unicast est une adresse publique et nom locale comme dans le cas IPv4.

On peut le vérifier en allant interroger un site Internet dédié à cet effet. On lance, sur le serveur, la ligne de commande suivante:

curl -6 ifconfig.me

qui nous donnera:


2a02:a03f:c92a:aa00:202c:e444:51b5:9c16


On bien accès à Internet.


PING6

On peut effectuer un test "ping" pour vérifier que le trafic passe bien dans les deux sens.

A partir de notre machine client DHCP, on effectuer une requête vers une autre machine:

ping6 2a02:a03f:c92a:aa00:21c:c0ff:fe92:a208

De même à partir de la machine qu'on vient de cibler vers notre machine client DHCP:

ping6 2a02:a03f:c92a:aa00:202c:e444:51b5:9c16




retour aux Notions de réseau