Je ne suis pas anti IPv6, c’est juste que sur un réseau LAN qui n’en a pas besoin ca ne sert a rien, c’est une case cochée par défaut dans la config de la carte reseau que personne n’a demandée.

On a un réseau LAN. Il tourne en IPv4. Il a toujours tourné en IPv4. Il tournera en IPv4 jusqu’à ce qu’on change d’infra ou que la chaleur du soleil engloutisse la Terre, selon ce qui arrive en premier.

Et pourtant, chaque fois qu’on inspecte une carte réseau sur une machine Windows, on vois ça :

☑ Protocole Internet version 6 (TCP/IPv6)

Coché. Toujours coché.

On peux le décocher à la main sur une machine, deux machines, dix machines. Mais dans une infra avec des dizaines de postes — et surtout quand de nouvelles machines rejoignent le domaine régulièrement — c’est le tonneau des Danaïdes. Autant essayer de vider l’océan avec une petite cuillère.

La solution propre, c’est une GPO.

Pourquoi pas juste décocher la case ?

La désactivation manuelle ne s’applique qu’à l’interface réseau visible dans le gestionnaire. Une nouvelle NIC ajoutée, un redéploiement, une réinstallation — et IPv6 revient dans sa version préférée : coché par défaut, silencieux, inutile.

La GPO qu’on va créer agit en deux couches :

  1. La clé de registre DisabledComponents — désactive IPv6 fonctionnellement sur toutes les interfaces, y compris celles qui n’existent pas encore.
  2. Un script PowerShell au démarrage — décoche la case visuellement sur chaque NIC, pour que l’état affiché corresponde à la réalité.

Ce qu’il faut savoir avant de commencer

La valeur magique : 0xFF, pas 0xFFFFFF

La clé DisabledComponents dans le registre Windows est un bitmask. Chaque bit active ou désactive une fonctionnalité IPv6 spécifique. La valeur 0xFF (255 en décimal) positionne les 8 bits utiles à 1 et désactive IPv6 complètement.

0xFFFFFF — qu’on voit souvent copier-collé sur les forums — ne correspond à rien de documenté dans le bitmask. Le comportement est imprévisible, et sur certaines versions de Windows elle provoque un délai de 5 secondes au démarrage en phase Pre-Session Init. Ce n’est pas ce qu’on veut.

Valeur correcte : 0xFF (REG_DWORD, hexadécimal)

Le cas des Domain Controllers

Microsoft déconseille explicitement de désactiver IPv6 sur les contrôleurs de domaine. La raison est contre-intuitive : Windows utilise IPv6 en interne sur les DCs, via l’adresse de loopback ::1, pour certaines résolutions DNS. Ce n’est pas une question de communication réseau externe — c’est de l’architecture interne Windows depuis Server 2008.

Désactiver IPv6 sur un DC peut provoquer des timeouts DNS, des lenteurs d’authentification Kerberos, et des problèmes de réplication AD.

La solution : ne pas appliquer cette GPO aux DCs. Si comme moi vos DCs sont dans une OU séparée et que la GPO n’est liée qu’aux OUs SERVEURS et STATIONS, vous n’avez rien à faire. Sinon, l’item-level targeting dans la Registry Item permet d’exclure les contrôleurs de domaine automatiquement.

Bonus sécurité — CVE-2024-38063

Désactiver IPv6 mitige CVE-2024-38063, une vulnérabilité RCE dans la stack TCP/IP Windows. Pas la raison principale de cette GPO, mais c’est toujours bon à savoir (et à mettre dans le rapport de sécurité si vous devez en justifier l’existence).

Création de la GPO

Étape 1 — Créer et lier la GPO

Dans la GPMC :

Clic droit sur l'OU cible → Create a GPO in this domain and link it here
Nom : Reg No IPv6

Lier sur SERVEURS et STATIONS. Pas sur Domain Controllers.

Étape 2 — La clé de registre

Computer Configuration → Preferences → Windows Settings → Registry
→ New → Registry Item
Champ Valeur
Action Mettre à jour
Ruche HKEY_LOCAL_MACHINE
Chemin SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
Nom de la valeur DisabledComponents
Type REG_DWORD
Données FF (base hexadécimale)

Action “Mettre à jour” : crée la clé si elle n’existe pas, la met à jour si elle existe déjà. C’est ce qu’on veut.

La valeur FF en hexadécimal — pas FFFF, pas FFFFFF. FF.

Étape 3 — Le script PowerShell de démarrage

Ce script décoche visuellement IPv6 sur chaque adaptateur réseau. Sans lui, la clé de registre fait son travail mais la case reste cochée dans l’interface — ce qui peut prêter à confusion lors d’un audit ou d’un dépannage.

Crée un fichier ipv6.ps1 avec ce contenu :

Get-NetAdapter | Disable-NetAdapterBinding -ComponentID ms_tcpip6

Placez ce fichier dans le dossier Scripts de la GPO :

\\domaine\SYSVOL\domaine\Policies\{GUID-GPO}\Machine\Scripts\Startup\

Le GUID se trouve dans les propriétés de la GPO. Ensuite dans la GPMC :

Computer Configuration → Policies → Windows Settings → Scripts → Démarrage
→ Onglet "Scripts PowerShell" → Ajouter → Parcourir → ipv6.ps1

Le script ipv6.ps1 déclaré en startup PowerShell dans la GPO.

Vérification post-déploiement

Après gpupdate /force et un reboot sur une machine de test :

# Doit retourner 255
Get-ItemPropertyValue "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name DisabledComponents

# Ne doit plus retourner d'adresses IPv6 actives
Get-NetIPAddress -AddressFamily IPv6

# Doit afficher False sur chaque NIC
Get-NetAdapterBinding -ComponentID ms_tcpip6