Priorité IPv4 vs IPv6 sous Windows 7

31

J'ai une connectivité IPv6 via le tunnel Hurricane Electric. Depuis le jour IPv6 de cette année, de nombreux services (google.com, facebook.com, etc.) ont activé IPv6 sur leurs principaux domaines. Sur ma machine Windows, IPv6 est préféré à IPv4. Cela signifie que chaque fois que je visite Google, tout le trafic passe par mon tunnel vers Hurricane Electric, ce qui augmente la latence de plus de 100%:

C:\> ping www.google.com

Pinging www.l.google.com [2001:4860:8005::68] with 32 bytes of data:
Reply from 2001:4860:8005::68: time=85ms
Reply from 2001:4860:8005::68: time=84ms
Reply from 2001:4860:8005::68: time=112ms
Reply from 2001:4860:8005::68: time=86ms

Ping statistics for 2001:4860:8005::68:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 84ms, Maximum = 112ms, Average = 91ms


C:\> ping -4 www.google.com

Pinging www.l.google.com [173.194.79.103] with 32 bytes of data:
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=55ms TTL=46
Reply from 173.194.79.103: bytes=32 time=29ms TTL=46

Ping statistics for 173.194.79.103:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 55ms, Average = 35ms

Question: Comment puis-je faire en sorte que Windows 7 préfère toujours IPv4, lorsque les enregistrements IPv4 et IPv6 sont disponibles pour un nom de domaine spécifique?

haimg
la source
4
La bonne façon pour cela, sur la plupart des systèmes d'exploitation, est de configurer la stratégie de préfixe - sous Windows, via netsh interface ipv6 show prefixpolicy. Je pourrais publier une réponse plus détaillée demain.
grawity
1
@grawity Cela devrait être le cas prefixpolicies, non prefixpolicy.
Peter Wood
@PeterWood Pourrait alors être différent depuis XP.
grawity
1
@grawity Oui, je suis sur Windows 7, et les appels netsh interface ipv6 showdonnent une utilisation incluant show prefixpolicies - Shows prefix policy entries, mais non prefixpolicy. À votre santé.
Peter Wood

Réponses:

40

Solution n ° 1: ajoutez une stratégie de préfixe pour préférer les adresses IPv4 à IPv6

La table de stratégie de préfixe est similaire à une table de routage, elle détermine quelles adresses IP sont préférées lors de l'établissement d'une connexion. Notez que la priorité plus élevée dans les stratégies de préfixe est représentée par une valeur de «priorité» de la lager, exactement opposée à la valeur de «coût» de la table de routage.

Table de stratégie de préfixe Windows par défaut:

C:\>netsh interface ipv6 show prefixpolicies
Querying active state...

Precedence  Label  Prefix
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      2  2002::/16
        20      3  ::/96
        10      4  ::ffff:0:0/96
         5      5  2001::/32

Notez que les adresses IPv6 (:: / 0) sont préférées aux adresses IPv4 (:: / 96, :: ffff: 0: 0/96).

Nous pouvons créer une politique qui rendra le tunnel IPv6 Hurricane Electric moins favorable que n'importe quelle adresse IPv4 :

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6

2001: 470 :: / 32 est le préfixe de Hurricane Electric, 3 est une priorité (très faible) et 6 est une étiquette.

J'aurais pu utiliser un préfixe plus générique, mais je voulais m'assurer que si et quand j'obtiens une connectivité IPv6 directe d'un FAI, il prévaudra sur IPv4.

Si vous adaptez cette solution, vous devez remplacer un préfixe IPv6 approprié au lieu de mon Hurricane Electric.

Solution n ° 2: modifier le registre pour que Windows préfère toujours IPv4 à IPv6

Cette solution est plus générique, mais plus invasive et moins conforme aux normes. En fin de compte, Windows modifiera toujours la table de stratégie de préfixe pour vous.

  • Ouvrez RegEdit, accédez à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Créez une DisabledComponentsvaleur de registre DWORD, définissez sa valeur sur 20 (hexadécimal). Consultez Microsoft KB 929852 pour plus d'informations sur cette clé de Registre, surtout si elle DisabledComponentsexiste déjà sur votre système.
  • Redémarrer.
haimg
la source
Commandes PowerShell pour la solution n ° 2: Get-ItemProperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" | select -exp DisabledComponents Set-Itemproperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" -value 32
Sergii Volchkov
Il est regrettable que vous ne puissiez pas définir cette préférence par connexion (par exemple, j'ai un routeur buggy) mais uniquement globalement ou tout au plus par adaptateur.
mirh
23

Si le texte à espacement fixe et les tableaux avec des nombres et des symboles étranges vous font peur, vous pouvez le faire avec Microsoft Fix-its, des programmes d'installation simples de Microsoft qui effectuent les modifications de configuration pour vous.

Ces correctifs proviennent de la base de connaissances 2533454 , qui explique que vous souhaiterez le faire si votre connectivité IPv6 est rompue. Vous devez être administrateur pour exécuter le correctif; après le téléchargement, faites un clic droit et sélectionnez Exécuter en tant qu'administrateur.

Michael Hampton
la source
+1 ayant un moyen de bouton-poussoir pour activer / désactiver c'est vraiment excellent, cheers
ashes999
7

La manière la plus simple, et celles-ci sont toujours si simples qu'on les néglige ...

  1. ouvrez le Centre Réseau et partage.

  2. Là, cliquez sur Modifier les paramètres de l'adaptateur

  3. Dans la "barre de menus", cliquez sur Avancé. ** Remarque ... Si vous ne voyez que "Organiser", cliquez dessus, puis dans le menu déroulant, choisissez "Disposition - Barre de menus"

  4. Après avoir cliqué sur avancé à l'étape précédente, cliquez sur "Paramètres avancés" à cette étape (une boîte s'ouvrira sur votre écran)

  5. Ce qui est affiché est les adaptateurs et les paramètres et l'adaptateur que vous utilisez actuellement sera déjà mis en évidence dans la moitié supérieure et sa répartition représentative ci-dessous (vous devriez voir les liaisons pour cet adaptateur). Mettez en surbrillance l'une des liaisons dans la liste et vous devriez remarquer que les flèches à droite s'allument, utilisez ces flèches pour modifier l'ordre de liaison selon vos préférences, puis choisissez ok en bas.

  6. Notez que tout comme lorsque vous installez un protocole, un service ou un client dans les propriétés de votre adaptateur. Il en va de même ici. c'est-à-dire que vous changez un adaptateur, et les autres emboîtent le pas. Ainsi, par exemple, si vous choisissez IPV6 préférez plus de 4 sur votre adaptateur sans fil, votre adaptateur LAN change également.

C'est la façon la plus simple à laquelle je peux penser pour faire cette tâche particulière sans avoir à trop réfléchir ou avoir trop de connaissances sur le routage des paquets sur un réseau inter.

StevenRowe6
la source
2
Lorsque j'y vais, IPv4 est déjà répertorié en premier dans les deux catégories. Cependant, lorsque j'accède aux propriétés de ma carte réseau, IPv6 est répertorié en premier.
kojow7
1

Version courte

Before September 2012                     After September 2012
Precedence  Prefix                        Precedence  Prefix       
----------  -------------                 ----------  -------------
        50  ::1/128        IPv6 loopback          50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6            40  ::/0           Native IPv6
        40  fc00::/7       ULAs                   35  ::ffff:0:0/96  IPv4
        40  fec0::/10      site-local             30  2002::/16      6to4
        40  3ffe::/16      6bone                   5  2001::/32      Teredo
        30  2002::/16      6to4                    3  fc00::/7       ULAs
        20  ::/96          IPv4compat              1  fec0::/10      site-local
        10  ::ffff:0:0/96  IPv4                    1  3ffe::/16      6bone
         5  2001::/32      Teredo                  1  ::/96          IPv4compat

Version longue

La RFC6724 a défini un changement dans la façon dont les adresses doivent être préférées. Avec ce changement, IPv6 n'est plus l'adresse préférée dans presque tous les cas :(

Cette question, qui a été posée en juin 2012, a été "corrigée" par un RFC de septembre 2012. En fonction de votre version de Windows, vous aviez soit cette nouvelle stratégie prête à l'emploi (Windows 8.1), soit probablement déjà livrée via une mise à jour ( Windows 8, Windows 7, Windows Vista).

Nous sommes ici parce que nous voulons utiliser IPv6; nous voulons que ce changement soit annulé.

Comment le remettre

Si vous obtenez plusieurs adresses IP pour un seul hôte, votre machine doit décider de l'adresse à utiliser. Un exemple de classement pourrait être:

  • Boucle IPv6
  • IPv6 natif
  • Adresses locales uniques (ULA), par exemple fdxx ::
  • Site local, par exemple fec0
  • 6 os
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo, par exemple 2001

Sur votre machine Windows, ce classement est appelé la stratégie de préfixe .

Politique de préfixe

Vous pouvez afficher la stratégie de préfixe de votre ordinateur en exécutant:

>netsh int ipv6 show prefixpolicies

Dans l'ancien temps (initialement défini par RFC 3484 ), la stratégie de préfixe était:

Precedence  Prefix         
----------  -------------
        50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6
        40  fc00::/7       ULAs
        40  fec0::/10      site-local
        40  3ffe::/16      6bone
        30  2002::/16      6to4
        20  ::/96          IPv4compat
        10  ::ffff:0:0/96  IPv4
         5  2001::/32      Teredo

Donc, vous voyez, il utiliserait presque toujours IPv6 (yay!):

  1. Boucle IPv6
  2. IPv6 natif, ULA, site-local, 6one
  3. 6to4
  4. IPv4compat
  5. IPv4
  6. Teredo

Si vous avez déployé des efforts pour déployer IPv6: cela a juste fonctionné.

Nouvelle politique de préfixe

En 2012, un nouvel ordre de préférence a été défini par la RFC6724 . De nos jours, la politique de préfixe garantit à peu près que vous n'utiliserez jamais IPv6:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         3  fc00::/7       ULAs
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          

Vous verrez que vous ne pourrez jamais utiliser vos adresses locales uniques ou votre adresse locale du site; il est perpétuellement cassé:

  1. Boucle IPv6
  2. IPv6 natif
  3. IPv4
  4. 6to4
  5. Teredo
  6. ULA
  7. site-local
  8. 6 os
  9. IPv6compat

Comment le réparer?

Ce que nous voulons, c'est fixer IPv6 afin que les ULA soient préférés à IPv4. À tout le moins, nous voulons pousser l'utilisation des ULA ( fc00::/7) au-dessus de celle d'IPv4:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        37  fc00::/7       ULAs <---------- from 3 up to 37
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          

Ce qui est fait par:

>netsh interface ipv6 set prefixpolicy prefix=fc00::/7 precedence=37 label=13 store=active

Cela ne le maintiendra actif qu'au prochain redémarrage. Pour rendre le changement permanent:

>netsh interface ipv6 set prefixpolicy fc00::/7 37 13

Si je:

  • a fait l'effort de générer un préfixe global ULA pour mon / 48
  • et choisissez un identifiant de sous-réseau pour mon / 64
  • et déployer des ULA sur chaque machine de l'entreprise
  • et mettre à jour les serveurs DNS pour renvoyer les adresses ULA IPv6 en plus des adresses IPv4

le moins que l'ordinateur puisse faire est d'avoir la courtoisie habituelle d'utiliser l'adresse.

Bonus Chatter

La fc00::/7gamme est divisée en deux parties:

  • fd00::/8 - Préfixe GlobalID généré localement
  • fc00::/8 - ???

Personne n'a jamais vraiment décidé que ce fcserait bon, et donc reste assis là.

Les fdadresses sont définies comme:

fd [40-bit random GlobalID] [16-bit subnet] [64-bits for host assignment]

Donc, si vous avez généré a4d7f6dd66votre GlobalID 40 bits cryptoghpcallly random , cela vous donne votre / 48:

  • fda4:d7f5:dd66:: / 48
  • fda4:d7f5:dd66:face::/ 64 (dans le facesous - réseau)
  • fda4:d7f5:dd66:face::825 comme adresse IP hôte

SixXS a maintenu une base de données publique de préfixes GlobalID d'adresses locales uniques afin de réduire les risques de collisions, par exemple:

  • fdee:e004:2208::/48: Apple Inc - Leopard OSX
  • fdd4:43c8:ba34::/48: TekSavvy - Danny Murray
  • fdac:afbd:fea1::/48: IBM Rational Build Forge - Chris Fuller

Mais en raison du ralentissement de l'utilisation et de la valeur douteuse en premier lieu, SixXS a interrompu le service en 2018.

Lecture bonus

Ian Boyd
la source
Le fc00::/7réseau est vraiment divisé en deux parties. Le fc00::/8réseau est réservé à une future autorité mondiale à attribuer et ne peut pas être utilisé actuellement, mais il fd00::/8est disponible pour une attribution locale, mais il nécessite que les 40 bits suivants soient choisis au hasard.
Ron Maupin
En fait, nous sommes ici parce que nous (et OP) NE VOULONS PAS utiliser IPv6 et il est toujours actif en boucle même si j'ai désactivé toutes les instances d'IPv6 que j'ai pu trouver!
AaA
0

Il existe une méthode plus simple qui fonctionne pour moi. Je viens de changer la métrique d'interface # pour déterminer sa priorité. J'avais utilisé cette méthode dans le passé pour changer la priorité des adaptateurs réseau (priorité NIC sans fil d'abord, priorité NIC LAN ensuite), mais j'ai découvert que cela fonctionne également sur TCP / IPv4 et TCP / IPv6. Dans ce cas, j'ai changé la métrique d'interface de TCP / IPv4 d'Automatique en 5 et la métrique d'interface TCP / IPv6 d'Automatique en 10. Plus le numéro de métrique est bas, plus sa priorité est élevée. Redémarrez ensuite votre PC. Alors maintenant, chaque fois que je ping en utilisant le nom d'hôte, il répondra à partir d'IPv4, au lieu d'Ipv6.

Voici une instruction plus détaillée

https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10

Sam N
la source