LINUX:IPv6-Serveur DHCP
→ retour aux Notions de réseau
But
Un serveur DHCP est destiné à distribuer des adresses IP, ici pour le protocole IPv6, aux machines du réseau local par défaut qui le demandent.
Ce serveur doit être installé sur une machine qui fait partie du réseau local et qui a une adresse stable, qui ne change pas, par exemple via la méthode manuelle ou la méthode automatique basée sur l'adresse MAC. Notons qu'il est possible de distribuer des adresses à un autre réseau. Mais une installation spéciale doit être mis en oeuvre pour faire transiter les paquets du protocole DHCP d'un réseau à l'autre. Par défaut, ces paquets sont bloqués par les routeurs. Nous n'aborderons pas cet aspect dans cet article.
Il est aussi possible d'imposer une adresse à une machine sur base de son adresse MAC.
Dans cet article, nous irons au plus simple et seulement pour le protocole IPv6.
Installation
Il faut au préalable installer le paquet qui contient le serveur DHCP:
dnf install dhcp-server
Ce paquet est valable pour les deux protocoles IPv4 et Ipv6.
Configuration
Le fichier de configuration est à placer dans le répertoire "/etc/dhcp". Il se nomme "dhcpd6.conf".
Le fichier existant est vide. On va se baser sur celui donné en exemple dans la documentation "/usr/share/doc/dhcp-server/dhcpd6.conf.example".
Nous devons disposer du prefix assigné par notre ISP si on veut avoir une connectivité à Internet (voir les articles précédents).
Voici le contenu du fichier "dhcpd6.conf":
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";
option dhcp6.name-servers 2001:4860:4860::8888;
option dhcp6.domain-search "home.dom";
subnet6 2a02:a03f:c92a:aa00::/64 {
# range6 2a02:a03f:c92a:aa00:1000:2:3:10 2a02:a03f:c92a:aa00:1000:2:3:15 ;
range6 2a02:a03f:c92a:aa00:2000::/72;
}
En début, nous avons laissé six options générales.
Ensuite on notera le nom du fichier "/var/lib/dhcpd/dhcpd6.leases" qui contiendra les adresses IPv6 distribuées. Ce fichier doit exister et vide lors du premier démarrage et il doit appartenir et être accessible à l'utilisateur/groupe "dhcpd/dhcpd".
Dans cette configuration, nous avons ajouté l'envoi de l'adresse du serveur DNS de Google et notre nom de domaine local de recherche (facultatif).
La partie "subnet6" est la partie la plus importante; il peut y en avoir plusieurs. En argument, on remarque le prefix.
On a laissé, en dessous, deux façons de déclarer des pools d'adresse IPv6.
- La première, en commentaire, désactivée, donne explicitement une tranche de 16 adresses.
- La seconde donne une tranche par filtrage sur base des bits. Avec le masque de 72 bits (deux chiffres hexadécimaux ou 8 bits en plus du prefix), la tranche va de "2a02:a03f:c92a:aa00:2000:0000:0000:0000" à "2a02:a03f:c92a:aa00:20ff:ffff:ffff:ffff".
Cette configuration est simple.
Limitations
Il faut savoir que le serveur DHCP pour le protocole IPv6 a quelques informations cruciales qu'il ne fournit pas alors que celui pour le protocole IPv4 les distribue.
Il s'agit:
- de la longueur du prefix,
- de l'adresse du routeur par défaut.
Cette tâche est dévolue aux routeurs.
Activation
Maintenant, on va activer et lancer le service concerné:
systemctl enable dhcpd6.service systemctl start dhcpd6.service
Pour utiliser ce nouveau service, il faudra configurer les machines clients.
Note: Il existe un fichier dans lequel on peut ajouter des options lors du lancement du service: "/etc/sysconfig/dhcpd" via la variable:
DHCPDARGS=" "
Deux réseaux et un routeur
Nous avons monté une infrastructure indépendante pour essai.
Schéma
Le schéma ci-dessous présente cette organisation. Nous avons deux réseaux et un routeur qui les relient. Chaque réseau comporte deux machines. Toutes ces cinq machines sont sous Linux et utilisent le protocole IPv6.
Chaque réseau a un prefix de réseau différent: "2a02:a03f:c92a:aa00::/64" et "2a02:a03f:c92a:aa01::/64".

Machines - clients DHCP
Les quatre machines des deux réseaux sont configurées au niveau de la couche IPv6 selon la méthode "Automatique(DHCP uniquement)". Voyez l'article sur l'IPv6-Méthode DHCP.
Dans le fichier de configuration de NetworkManager "/etc/NetworkManager/system-connections/enp0s25.nmconnection", l'interface étant "enp0s25", cette configuration est très réduite.
... [ipv6] method=dhcp ...
Le routeur
Le routeur a deux interfaces configurés selon la méthode "Automatique".
Dans le fichier de configuration de NetworkManager "/etc/NetworkManager/system-connections/enp0s25.nmconnection", l'interface étant "enp0s25" dans ce cas, cette configuration est très réduite.
... [ipv6] method=auto addr-gen-mode=eui64 ...
Comme c'est un routeur, il faut modifier un paramètre du système afin que le transfert entre réseaux puisse se faire.
On crée un fichier, par exemple, "/etc/sysctl.d/router.conf" dans lequel on ajoute la ligne:
net.ipv6.conf.all.forwarding=1
Pour l'activer, soit on redémarre la machine soit on lance la commande:
sysctl -p /etc/sysctl.d/router.conf
Serveur DHCPv6 sur le routeur
Nous avons vu plus haut un exemple de configuration pour une machine ayant un seul interface réseau. Nous allons la doubler.
Voici le contenu de ce fichier "/etc/dhcp/dhcpd6.conf" semblable au précédent pour sa partie globale:
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";
option dhcp6.name-servers 2001:4860:4860::8888;
option dhcp6.domain-search "home.dom";
subnet6 2a02:a03f:c92a:aa00::/64 {
range6 2a02:a03f:c92a:aa00:A000::/72;
}
subnet6 2a02:a03f:c92a:aa01::/64 {
range6 2a02:a03f:c92a:aa01:B000::/72;
}
On retrouve les prefix de nos deux réseaux.
On n'oublie pas de relancer ce service "dhcpd6.service".
Le serveur RADVD sur le routeur
Dans le protocole IPv6, un routeur a une fonction spéciale. C'est lui qui définit le prefix de chaque réseau qui lui sont connectés et l'adresse de la route par défaut. Eventuellement il fournit un autre routage et l'adresse d'un serveur DNS. Dans notre cas, l'adresse d'un serveur DNS est fournie par le serveur DHCP malgré que suivant notre configuration, elle est inutile; ce réseau n'étant pas connecté à Internet.
Il envoie régulièrement ses informations sur le réseau concerné et répond aux sollicitations des machines de ce réseau.
Installation
Il faut installer le paquet concerné:
dnf install radvd
Configuration
Voici le contenu du fichier de configuration "/etc/radvd.conf":
interface enp0s25
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultPreference medium;
prefix 2a02:a03f:c92a:aa00::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
interface enp6s0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultPreference medium;
prefix 2a02:a03f:c92a:aa01::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
Cette configuration est basique. Elle comporte deux sections, une par interface réseau:
- l'interface "enp0s25" est connecté au réseau du haut du schéma,
- l'interface "enp6s0" est connecté au réseau du bas du schéma.
Remarquons que les options "AdvManagedFlag" et "AdvOtherConfigFlag" sont désactivées (sur "off") car j'ai remarqué que la première n'a d'effet que sur la méthode "Automatique" d'IPv6 et la seconde permet d'envoyer l'adresse du serveur DNS au client DHCP. Or cette adresse est fournie par le serveur DHCP.
Activation
Maintenant, on va activer et lancer le service concerné:
systemctl enable radvd.service systemctl start radvd.service
Vérification
Pour effectuer cette vérification, on doit installer le paquet "rdisc6":
dnf install rdisc6
On effectue ensuite notre requête; il lui faut indiquer sur quel interface réseau effectuer cette demande "enp0s25" pour la première:
rdisc6 enp0s25
et ensuite pour l'autre interface:
rdisc6 enp6s0
Elles envoient cette requête sur le réseau local et attend la réponse du service "RADVD".
Voici la réponse pour l'interface "enp0s25":
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 : non indiqué (0x00000000) 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é : 86385 (0x00015171) secondes Durée de préférence : 14400 (0x00003840) secondes Adresse source de lien : 00:1C:C0:2A:C4:25 de fe80::21c:c0ff:fe2a:c425
Voici la réponse pour l'interface "enp6s0":
Solicitation de ff02::2 (ff02::2) sur enp6s0... 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 : non indiqué (0x00000000) Temps de retransmission : non indiqué (0x00000000) Préfixe : 2a02:a03f:c92a:aa01::/64 Sur le lien (on-link) : Oui Conf. autonome d’adresse: Oui Durée de validité : 61867 (0x0000f1ab) secondes Durée de préférence : 0 (0x00000000) seconde Adresse source de lien : 00:1B:21:3B:B0:77 de fe80::21b:21ff:fe3b:b077
Déroulement
La mise en place de l'adressage réseau se passe en plusieurs phases:
- Chaque machine crée son adresse IPv6 Link-Local
- Les deux interfaces réseau du routeur configurent leurs adresses IPv6 Unicast Global respectives et leurs routes par défaut avec l'aide des informations du serveur RADVD.
- Chacun des deux interfaces du routeur ont donc maintenant leur prefix attribué. Le serveur DHCP peut donc maintenant savoir sur quel réseau, il peut distribuer ses adresses aux clients suivant le prefix attribué aux interfaces réseaux du routeur.
- Chaque machine client-DHCP demande alors au serveur DHCP, une adresse Unicast Global.
Le problème, c'est que le serveur RADVD ne répond pas aux sollicitations des machines client-DHCP.
- L'adresse Unicast Global est donnée par le serveur DHCP et le prefix a d'office la longueur maximale de 128 bits.
- La route par défaut est inconnue.
Mais heureusement, la couche qui permet de récolter les informations du voisinage est actif. On peut la visualiser grâce à la commande à exécuter sur les machines client-DHCP:
ip -6 neighbour show
Au début, elle ne comporte que l'adresse du router.
Pour ajouter cette route par défaut sur base de cette information, nous ajoutons un script au niveau du processus du client-DHCP comme décrit dans l'article sur l'IPv6-Méthode DHCP.
Conclusion
Après divers essais, cette méthode "Automatique (seulement DHCP)" n'est pas pratique. Elle demande une configuration particulière par l'ajout d'un script. Et dans le cadre de la méthode "Automatique", le serveur DHCP ajoute une adresse Unicast Globale en plus de celle ajoutée nativement par la méthode "Automatique" mais avec un prefix de longueur de 128 bits. Je ne vois pas directement d'intérêt à cette seconde adresse. Il pourrait peut-être y avoir un intérêt dans le cadre d'un filtrage au niveau du FireWall. A voir.
→ retour aux Notions de réseau