Я не совсем понимаю связь между 4 параметрами, относящимися к автоконфигурации IPv6 с сохранением и без сохранения состояния, используемой в netsh int ipv6 set interface
контексте команды в Windows:
advertise
routerdescovery
managedaddress
otherstateful
Из того, что мне удалось найти на данный момент, я понимаю, что:
advertise
используется для указания того, что ОС, содержащая флагM
и , должна выдать/отреагировать на RAO
, настроенный какmanagedaddress
иotherstateful
для данного конкретного интерфейса; это относится к серверу.routerdescovery
используется для указания того, что ОС должна запрашивать/обрабатывать RA на этом интерфейсе и использовать его для своей настройки на основе флагов RA; еслиrouterdescovery
включено,managedaddress
иotherstateful
переопределяется флагами RA; это относится к клиенту
У меня вопрос: что происходит, когда advertise
и routerdescovery
становятся инвалидами?
Можно подумать, что в этом случае managedaddress
и otherstateful
определяет, включен ли клиент DHCPv6 на этом интерфейсе. Однако, похоже, это не так. Если все 4 параметра отключены ( advertise
, routerdescovery
, managedaddress
и otherstateful
), клиент Windows все равно попытается связаться с сервером DHCPv6.
решение1
После множества экспериментов и изучения множества неоднозначных документов и статей я пришел к выводу, что managedaddress
и otherstateful
актуальны только в сочетании с advertise
(т. е. когда вы включаете RA на своем сервере Windows), и они помогают устанавливать флаги M
и O
в пакетах RA.
Если routerdescovery
и включено, и advertise
выключено, вы больше не сможете настраивать параметры managedaddress
и otherstateful
через netsh, но как только RA поступает на интерфейс, эти два параметра настраиваются автоматически, так что они отражают флаги M
и O
пришедшего пакета RA.
Независимо от используемой конфигурации сообщения DHCPv6 Solicit всегда отправляются на интерфейсы с поддержкой IPv6, даже при получении пакетов RA с M
НЕ установленным флагом. Я не смог найти способ отключить DHCPv6 в Windows (предполагаю Vista и выше; я тестировал на 8.1). Если в сети есть сервер DHCPv6, вы получите от него адрес IPv6.
К счастью, большинство сетей используют автоконфигурацию без сохранения состояния (каждый узел настраивает себя на основе префикса, объявленного в RA) вместо автоконфигурации с сохранением состояния, когда адрес IPv6 согласовывается с сервером DHCPv6. Поскольку большинство сетей не имеют сохранения состояния, многие думали, что отключение routerdiscovery
не позволит им получать дополнительные адреса IPv6. Но это недопустимо, если в сети есть сервер DHCPv6.
решение2
Я знаю, что это старый вопрос, но я хотел бы добавить, если это было полезно. Команда, которую я использую для отключения DHCPv6 и обнаружения маршрутизатора для IPv6 на всех сетевых интерфейсах системы, выглядит следующим образом:
Set-NetIPInterface `
-AddressFamily IPv6 `
-InterfaceIndex $(Get-NetIpInterface -AddressFamily IPv6 | Select-Object -ExpandProperty InterfaceIndex) `
-RouterDiscovery disabled `
-Dhcp Disabled
В дополнение к этому я также настроил систему на предпочтение IPv4 перед IPv6. Для вступления этого изменения в силу требуется перезагрузка.
New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -Value 0x20 -PropertyType "DWORD"
#If DisabledComponents exists, use the set cmdlet
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\" -Name "DisabledComponents" -Value 0x20
#You need to reboot the computer in order for the changes to take effect
Restart-Computer