Prioridade IPv4 vs IPv6 no Windows 7

31

Tenho conectividade IPv6 através do túnel Hurricane Electric. Desde o dia do IPv6 deste ano, muitos serviços (google.com, facebook.com etc.) ativaram o IPv6 em seus principais domínios. Na minha máquina Windows, o IPv6 é preferível ao IPv4. Isso significa que sempre que visito o Google, todo o tráfego passa pelo meu túnel para o Hurricane Electric, o que aumenta a latência em mais 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

Pergunta: Como posso fazer com que o Windows 7 sempre prefira o IPv4, quando os registros IPv4 e IPv6 estão disponíveis para um nome de domínio específico?

haimg
fonte
4
A maneira correta para isso, na maioria dos sistemas operacionais, é configurar a política de prefixo - no Windows, via netsh interface ipv6 show prefixpolicy. Eu posso postar uma resposta mais detalhada amanhã.
grawity
11
@rawraw Isso deve ser prefixpolicies, não prefixpolicy.
Peter Wood
@ PeterWood Pode ser diferente desde o XP, então.
grawity
11
@ grrawity Sim, estou no Windows 7, e ligar netsh interface ipv6 showdá uso show prefixpolicies - Shows prefix policy entries, incluindo , mas não prefixpolicy. Felicidades.
Peter Wood

Respostas:

40

Solução 1: adicione uma política de prefixo para preferir endereços IPv4 em vez de IPv6

A tabela de políticas de prefixo é semelhante a uma tabela de roteamento, ela determina quais endereços IP são preferidos ao fazer uma conexão. Observe que a precedência mais alta nas políticas de prefixo é representada por um valor de "precedência" da lager, exatamente oposto ao valor de "custo" da tabela de roteamento.

Tabela de política de prefixo padrão do Windows:

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

Observe que os endereços IPv6 (:: / 0) são preferíveis aos endereços IPv4 (:: / 96, :: ffff: 0: 0/96).

Podemos criar uma política que tornará o túnel Hurricane Electric IPv6 menos favorável do que qualquer endereço IPv4 :

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

2001: 470 :: / 32 é o prefixo da Hurricane Electric, 3 é uma Precedência (muito baixa) e 6 é uma Etiqueta.

Eu poderia ter usado um prefixo mais genérico, mas queria ter certeza de que, se e quando eu receber uma conectividade IPv6 direta de um ISP, ele terá precedência sobre o IPv4.

Se você adaptar esta solução, precisará substituir um prefixo IPv6 apropriado em vez do prefixo Hurricane Electric.

Solução 2: Ajuste o registro para fazer o Windows sempre preferir IPv4 em vez de IPv6

Essa solução é mais genérica, mas mais invasiva e menos compatível com os padrões. No final, o Windows ainda modificará a tabela de políticas de prefixo para você.

  • Abra o RegEdit, navegue até HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Crie o DisabledComponentsvalor do registro DWORD, defina seu valor como 20 (hexadecimal). Consulte o Microsoft KB 929852 para obter mais informações sobre essa chave do Registro, especialmente se DisabledComponentsjá existir no seu sistema.
  • Reinicie.
haimg
fonte
Comandos do PowerShell para a solução 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
É uma pena que você não possa definir essa preferência por conexão (por exemplo, eu tenho um roteador de buggy), mas apenas globalmente ou no máximo por adaptador.
mirh 4/11
23

Se texto e tabelas aeroespaciais com números e símbolos estranhos o assustarem, você poderá fazer isso com os Microsoft Fix-its, instaladores simples da Microsoft que fazem as alterações na configuração.

Essas correções são provenientes do KB 2533454 , o que explica que você deseja fazer isso se sua conectividade IPv6 estiver quebrada. Você precisa ser um administrador para executar a correção; após o download, clique com o botão direito do mouse e selecione Executar como administrador.

Michael Hampton
fonte
+1 tendo uma forma de botão de pressão para ativar / desativar este é realmente excelente, aplausos
ashes999
7

A maneira mais simples, e estas são sempre tão simples que as ignoramos ...

  1. abra o Centro de Rede e Compartilhamento.

  2. Lá, clique em Alterar configurações do adaptador

  3. Na "Barra de menus", clique em Avançado. ** Nota .. Se você vir apenas "Organizar", clique nele e, na lista suspensa, escolha "Layout - Barra de menus"

  4. Depois de clicar em avançado na etapa anterior, clique em "Configurações avançadas" nesta etapa (uma caixa será exibida na tela)

  5. O que é exibido são adaptadores e configurações e o adaptador que você está usando no momento já estará destacado na metade superior e sua repartição representativa abaixo (você deve ver as ligações para esse adaptador). Destaque qualquer uma das ligações na lista e você deve observar as setas à direita acesas, use essas setas para alterar a ordem das ligações conforme sua preferência e escolha ok na parte inferior.

  6. Observe que, assim como quando você instala um protocolo, serviço ou cliente nas propriedades do adaptador. O mesmo se aplica aqui. ou seja, você muda um adaptador e o restante segue o exemplo. Por exemplo, se você escolher IPV6, prefere mais de 4 no seu adaptador sem fio, o seu adaptador de LAN também muda.

É a maneira mais fácil em que posso pensar em realizar essa tarefa específica sem ter que pensar muito ou ter muito conhecimento sobre o roteamento de pacotes em uma inter-rede.

StevenRowe6
fonte
2
Quando vou para lá, o IPv4 já está listado primeiro nas duas categorias. No entanto, quando vou às propriedades do meu adaptador de rede, o IPv6 é listado primeiro.
precisa saber é o seguinte
1

Versão curta

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

Versão longa

O RFC6724 definiu uma alteração na forma como os endereços devem ser preferidos. Com essa alteração, o IPv6 não é mais o endereço preferido em quase todos os casos :(

Esta pergunta, que foi feita em junho de 2012, foi "corrigida" por uma RFC a partir de setembro de 2012. Dependendo da versão do Windows, você tinha essa nova política pronta para uso (Windows 8.1) ou provavelmente já foi entregue por meio de uma atualização ( Windows 8, Windows 7, Windows Vista).

Estamos aqui porque queremos usar o IPv6; queremos que essa mudança seja desfeita.

Como colocar de volta

Se você obtiver vários endereços IP para um único host, sua máquina precisará decidir qual endereço será usado. Um exemplo de classificação pode ser:

  • Loopback IPv6
  • IPv6 nativo
  • Endereços locais únicos (ULAs), por exemplo, fdxx ::
  • Local do site, por exemplo, fec0
  • 6bone
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo, por exemplo, 2001

Na sua máquina Windows, essa classificação é chamada de política de prefixo .

Política de prefixo

Você pode visualizar a política de prefixo do seu computador executando:

>netsh int ipv6 show prefixpolicies

Nos tempos antigos (originalmente definido pela RFC 3484 ), a política de prefixo era:

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

Então, você vê que ele sempre usaria o IPv6 (yay!):

  1. Loopback IPv6
  2. IPv6 nativo, ULAs, local do site, 6 um
  3. 6to4
  4. IPv4compat
  5. IPv4
  6. Teredo

Se você passou pelo esforço de implantar o IPv6: simplesmente funcionou.

Nova política de prefixo

Em 2012, uma nova ordem de preferência foi definida pela RFC6724 . Atualmente, a política de prefixos garante praticamente que você nunca usará o 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          

Você verá que nunca poderá usar seus endereços locais exclusivos ou o endereço local do site; está perpetuamente quebrado:

  1. Loopback IPv6
  2. IPv6 nativo
  3. IPv4
  4. 6to4
  5. Teredo
  6. ULAs
  7. site-local
  8. 6bone
  9. IPv6compat

Como corrigi-lo?

O que queremos é corrigir o IPv6 para que os ULAs sejam preferidos ao IPv4. No mínimo, queremos enfatizar o uso de ULAs ( fc00::/7) acima do 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          

O que é feito por:

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

Isso o manterá ativo até a próxima reinicialização. Para tornar a alteração permanente:

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

Se eu:

  • passou pelo esforço de gerar um prefixo global de ULA para meu / 48
  • e escolha um ID de sub-rede para o meu / 64
  • e implantar ULAs em todas as máquinas da empresa
  • e atualize os servidores DNS para retornar endereços IPv6 ULA, além de endereços IPv4

o mínimo que o computador poderia fazer é ter a cortesia comum de usar o endereço.

Bônus Chatter

O fc00::/7intervalo é dividido em duas partes:

  • fd00::/8 - prefixo GlobalID gerado localmente
  • fc00::/8 - ???

Ninguém realmente decidiu fcque seria bom, então fica lá.

Os fdendereços são definidos como:

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

Portanto, se você gerou a4d7f6dd66como seu GlobalID de 40 bits aleatoriamente criptografado , isso fornece seu / 48:

  • fda4:d7f5:dd66:: / 48
  • fda4:d7f5:dd66:face::/ 64 (na facesub - rede)
  • fda4:d7f5:dd66:face::825 como um endereço IP do host

O SixXS mantinha um banco de dados público de prefixos GlobalID de Endereço Local Único, a fim de reduzir a chance de colisões, por exemplo:

  • 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

Mas, devido à lentidão no uso e ao valor duvidoso, o SixXS interrompeu o serviço em 2018.

Leitura de bônus

Ian Boyd
fonte
A fc00::/7rede é realmente dividida em duas partes. A fc00::/8rede está reservada para uma futura autoridade global para atribuir a partir de, e não pode ser usada no momento, mas fd00::/8está disponível para atribuição local, mas requer que os próximos 40 bits sejam escolhidos aleatoriamente.
Ron Maupin
Na verdade, estamos aqui porque nós (e OP) NÃO QUEREMOS usar o IPv6 e ele ainda está ativo no loopback, apesar de ter desativado todas as instâncias do IPv6 que encontrei!
AaA 26/03
0

Existe um método mais fácil que funciona para mim. Acabei de alterar a métrica da interface # para determinar sua prioridade. Eu havia usado esse método no passado para alterar a prioridade dos adaptadores de rede (prioridade da NIC sem fio primeiro, prioridade da NIC da LAN em segundo), mas descobri que ele funciona no TCP / IPv4 e TCP / IPv6 também. Nesse caso, alterei a métrica da interface do TCP / IPv4 de Automático para 5 e a métrica da interface TCP / IPv6 de Automático para 10. Quanto menor o número da métrica, maior a sua prioridade. Depois reinicie o seu PC. Portanto, agora, sempre que executar ping usando o nome do host, ele responderá do IPv4, em vez do Ipv6.

Aqui está uma instrução mais detalhada

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

Sam N
fonte