IPv4 против приоритета IPv6 в Windows 7

31

У меня есть возможность подключения по IPv6 через туннель Hurricane Electric. Со дня выпуска IPv6 в этом году многие службы (google.com, facebook.com и т. Д.) Включили IPv6 на своих основных доменах. На моей машине с Windows IPv6 предпочтительнее, чем IPv4. Это означает, что всякий раз, когда я посещаю Google, весь трафик проходит через мой туннель к Hurricane Electric, что увеличивает задержку более чем на 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

Вопрос: Как сделать так, чтобы Windows 7 всегда предпочитала IPv4, если для определенного доменного имени доступны записи как IPv4, так и IPv6?

haimg
источник
4
Для этого в большинстве операционных систем необходимо настроить политику префиксов - в Windows через netsh interface ipv6 show prefixpolicy. Я мог бы опубликовать более подробный ответ завтра.
Гравитация
1
@ Grawity Это должно быть prefixpolicies, нет prefixpolicy.
Питер Вуд
@PeterWood Может быть отличается от XP, тогда.
grawity
1
@ grawity Да, я на Windows 7, и звонки netsh interface ipv6 showдают использование в том числе show prefixpolicies - Shows prefix policy entries, но нет prefixpolicy. Приветствия.
Питер Вуд

Ответы:

40

Решение № 1: Добавьте префиксную политику для предпочтения адресов IPv4 над IPv6

Таблица политик префиксов аналогична таблице маршрутизации, она определяет, какие IP-адреса предпочтительнее при установлении соединения. Обратите внимание, что более высокий приоритет в префиксных политиках представлен значением «приоритетности» лагера, точно противоположным значению «стоимости» таблицы маршрутизации.

Таблица политик префиксов 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

Обратите внимание, что адреса IPv6 (:: / 0) предпочтительнее адресов IPv4 (:: / 96, :: ffff: 0: 0/96).

Мы можем создать политику, которая сделает туннель Hurricane Electric IPv6 менее выгодным, чем любой адрес IPv4 :

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

2001: 470 :: / 32 - префикс Hurricane Electric, 3 - приоритет (очень низкий), 6 - метка.

Я мог бы использовать более общий префикс, но я хотел убедиться, что если и когда я получу прямое подключение IPv6 от интернет-провайдера, он будет иметь приоритет над IPv4.

Если вы адаптируете это решение, вам нужно заменить соответствующий префикс IPv6 вместо моего Hurricane Electric.

Решение № 2: настройка реестра, чтобы Windows всегда предпочитала IPv4, а не IPv6

Это решение является более общим, но более инвазивным и менее совместимым со стандартами. В конце концов, Windows все равно изменит таблицу префиксной политики для вас.

  • Откройте RegEdit, перейдите к HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Создайте DisabledComponentsзначение реестра DWORD, установите его значение 20 (шестнадцатеричное). См. Microsoft KB 929852 для получения дополнительной информации об этом разделе реестра, особенно если он DisabledComponentsуже существует в вашей системе.
  • Перезагружать.
haimg
источник
Команды PowerShell для решения № 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
Сергей Волчков
Обидно, что вы не можете установить это предпочтение для каждого соединения (например, у меня глючит маршрутизатор), но только глобально или самое большее для каждого адаптера.
Мир
23

Если моноширинный текст и таблицы со странными числами и символами пугают вас, вы можете сделать это с помощью Microsoft Fix-it, простых установщиков от Microsoft, которые вносят изменения в конфигурацию для вас.

Это исправление взято из базы знаний KB 2533454 , в которой объясняется, что вы захотите сделать это, если ваше соединение IPv6 нарушено. Вы должны быть администратором, чтобы запустить исправление; после загрузки щелкните правой кнопкой мыши и выберите «Запуск от имени администратора».

Майкл Хэмптон
источник
+1 иметь способ кнопки для включения / выключения это действительно отлично, ура
ashes999
7

Самый простой способ, и это всегда так просто, что мы упускаем их из виду ...

  1. открыть Центр управления сетями и общим доступом.

  2. Там нажмите на Изменить настройки адаптера

  3. В «строке меню» нажмите «Дополнительно». ** Примечание. Если вы видите только «Организовать», нажмите на нее, а затем в раскрывающемся списке выберите «Макет - Строка меню».

  4. После нажатия кнопки «Дополнительно» на предыдущем шаге нажмите «Дополнительные параметры» на этом шаге (на экране появится окно)

  5. Отображаются адаптеры и настройки, а используемый вами адаптер уже будет выделен в верхней части, а его характерная разбивка ниже (вы должны увидеть привязки для этого адаптера). Выделите любую из привязок в списке, и вы должны заметить, что стрелки справа загораются, используйте эти стрелки, чтобы изменить порядок привязки в соответствии с вашими предпочтениями, а затем выберите ok снизу.

  6. Обратите внимание, что так же, как при установке протокола, службы или клиента в свойствах вашего адаптера. То же самое относится и здесь. это то, что вы меняете один адаптер, а остальные следуют его примеру. Так, например, если вы выбираете IPV6 для беспроводного адаптера более 4, адаптер локальной сети также изменится.

Это самый простой способ, который я могу придумать, чтобы выполнить эту конкретную задачу, не думая слишком много или не имея слишком много знаний о маршрутизации пакетов во внутренней сети.

StevenRowe6
источник
2
Когда я иду туда, IPv4 уже указан первым в обеих категориях. Однако, когда я перехожу к свойствам моего сетевого адаптера, IPv6 указывается первым.
kojow7
1

Укороченная версия

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

Длинная версия

RFC6724 определил изменение в том, как адреса должны быть предпочтительными. С этим изменением IPv6 больше не является предпочтительным адресом почти во всех случаях :(

Этот вопрос, который был задан в июне 2012 года, был «исправлен» RFC с сентября 2012 года. В зависимости от версии Windows у вас либо была новая политика «из коробки» (Windows 8.1), либо, скорее всего, она уже была доставлена ​​через обновление ( Windows 8, Windows 7, Windows Vista).

Мы здесь, потому что хотим использовать IPv6; мы хотим, чтобы это изменение было отменено.

Как положить обратно

Если вы получаете несколько IP-адресов для одного хоста, ваш компьютер должен решить, какой адрес он будет использовать. Пример рейтинга может быть:

  • IPv6 loopback
  • Родной IPv6
  • Уникальные локальные адреса (ULA), например, fdxx ::
  • Локальный сайт, например, fec0
  • 6bone
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo, например, 2001

На вашем компьютере с Windows этот рейтинг называется политикой префиксов .

Политика префиксов

Вы можете просмотреть политику префиксов вашего компьютера, выполнив:

>netsh int ipv6 show prefixpolicies

В прежние времена (первоначально определенные RFC 3484 ), политика префикса была:

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

Итак, вы видите, что он почти всегда будет использовать IPv6 (ууу!):

  1. IPv6 loopback
  2. Собственный IPv6, ULA, локальный сайт, 6one
  3. 6to4
  4. IPv4compat
  5. IPv4
  6. древоточец

Если вы приложили усилия для развертывания IPv6: это просто сработало.

Новая политика префиксов

В 2012 году новый порядок преференций был определен RFC6724 . В настоящее время политика префиксов в значительной степени гарантирует, что вы никогда не будете использовать 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          

Вы увидите, что вы никогда не сможете использовать свои уникальные локальные адреса или локальный адрес сайта; это постоянно сломано:

  1. IPv6 loopback
  2. Родной IPv6
  3. IPv4
  4. 6to4
  5. древоточец
  6. ulaş
  7. сайт-местный
  8. 6bone
  9. IPv6compat

Как это исправить?

Мы хотим исправить IPv6 так, чтобы ULA были предпочтительнее IPv4. По крайней мере, мы хотим выдвинуть использование ULA ( fc00::/7) выше, чем 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          

Что сделано:

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

Это будет держать его активным только до следующей перезагрузки. Чтобы сделать изменение постоянным:

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

Если я:

  • Мы попытались сгенерировать глобальный префикс ULA для моего / 48
  • и выберите идентификатор подсети для моего / 64
  • и развертывание ULA на каждой машине на предприятии
  • и обновите DNS-серверы, чтобы они возвращали адреса ULA IPv6 в дополнение к адресам IPv4

самое малое, что может сделать компьютер, - это вежливое обращение с адресом.

Бонус Болтовня

fc00::/7Диапазон разделен на две части:

  • fd00::/8 - Префикс GlobalID генерируется локально
  • fc00::/8 - ???

Никто так и не решил, fcчто это будет хорошо, и поэтому просто сидит там.

Эти fdадреса определяются как:

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

Так что если вы сгенерировали a4d7f6dd66как свой криптографически случайный 40-битный GlobalID , это даст вам / 48:

  • fda4:d7f5:dd66:: / 48
  • fda4:d7f5:dd66:face::/ 64 (в faceподсети)
  • fda4:d7f5:dd66:face::825 в качестве IP-адреса хоста

SixXS поддерживает общедоступную базу данных префиксов GlobalID уникального локального адреса, чтобы уменьшить вероятность коллизий, например:

  • fdee:e004:2208::/48: Apple Inc - Leopard OSX
  • fdd4:43c8:ba34::/48: TekSavvy - Дэнни Мюррей
  • fdac:afbd:fea1::/48: IBM Rational Build Forge - Крис Фуллер

Но из-за замедления использования и, в первую очередь, сомнительной ценности, SixXS прекратил обслуживание в 2018 году.

Бонус Чтение

Ян Бойд
источник
fc00::/7Сеть действительно разделена на две части. fc00::/8Сеть Зарезервировано для будущего глобального органа для назначения из, и не может в настоящее время используется, но fd00::/8доступен для локального задания, но это требует , чтобы следующие 40 бит , которые будут выбраны случайным образом .
Рон Мопин
На самом деле мы здесь, потому что мы (и OP) НЕ ХОТИМ использовать IPv6, и он все еще активен при обратной связи, хотя я отключил каждый экземпляр IPv6, который мог найти!
ААА
0

Есть более простой метод, который работает для меня. Я просто изменил метрику интерфейса #, чтобы определить его приоритет. В прошлом я использовал этот метод для изменения приоритета сетевых адаптеров (сначала приоритет беспроводной сетевой карты, затем приоритет сетевой сетевой карты), но я обнаружил, что он также работает на TCP / IPv4 и TCP / IPv6. В этом случае я изменил метрику интерфейса TCP / IPv4 с Автоматически на 5, а метрику интерфейса TCP / IPv6 с Автоматической на 10. Чем меньше номер метрики, тем выше ее приоритет. Затем перезагрузите компьютер. Так что теперь, когда я пингую, используя имя хоста, он будет отвечать с IPv4, а не с Ipv6.

Вот более подробная инструкция

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

Сэм Н
источник