LINUX:IPv6-Méthode DHCP
→ 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