Как запретить Windows 10 возвращать пропущенный адрес DHCPv6 IPv6? Или как отключить DHCPv6?

Как запретить Windows 10 возвращать пропущенный адрес DHCPv6 IPv6? Или как отключить DHCPv6?

Моя школа выделила всем моим одноклассникам префикс IPv6-блока /64. Я хочу исправить 64-битный суффикс моего ПК с Windows 10 22H2, поэтому я выполнил следующий скрипт PowerShell, чтобы сделать мой пользовательский адрес IPv6 $ipединственным IP-адресом, который фактически используется для исходящих пакетов, и мне это удалось.

Добавьте пользовательский адрес IPv6:

New-NetIPAddress -InterfaceAlias Wi-Fi -IPAddress $ip -PolicyStore ActiveStore -PrefixLength 64
Set-NetIPAddress -IPAddress $ip -SkipAsSource $False

Установите для всех остальных публичных адресов IPv6 значение, SkipAsSourceчтобы $Trueзапретить их использование для исходящих пакетов:

Get-NetIPAddress -InterfaceAlias Wi-Fi | ForEach-Object {
    if( ($_.AddressFamily.ToString() -eq "IPv6") -And ($_.IPAddress -ne $ip) -And ($_.PrefixOrigin.ToString() -ne "WellKnown") ){
        Set-NetIPAddress -IPAddress $_.IPAddress -SkipAsSource $True
    }
}

Но через несколько минут, адрес IPv6, который PrefixOriginявляется "Dhcp", SkipAsSourceстал $False, что заставило мой ПК использовать адрес DHCP IPv6 для исходящих пакетов. Чтобы выяснить, почему, я выполнил следующий скрипт PowerShell, чтобы найти точное время, когда адрес DHCP IPv6 SkipAsSourceстал $False:

$isChanged = $false
while( !$isChanged ){
    Start-Sleep 10
    Get-Date
    Get-NetIPAddress -InterfaceAlias "Wi-Fi" -AddressFamily IPv6 | ForEach-Object{
        if($_.PrefixOrigin -eq "Dhcp"){
            if($_.SkipAsSource -eq $False){
                $global:isChanged = $True
                Write-Host -ForegroundColor Red "Found it"
                break
            }else{
                Write-Host "Nothing wrong"
            }
        }
    }
}

Промежуток времени, который я нашел, находится между 2023-07-12 02:20:00 UTC+8и 2023-07-12 02:20:10 UTC+8, затем нашел следующий системный журнал, временная метка 2023-07-12 02:20:01 UTC+8которого может быть связана.

системный журнал о событии 7003 - Roam Complete

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Netwtw04" />
    <EventID Qualifiers="16384">7003</EventID>
    <Version>0</Version>
    <Level>4</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2023-07-11T18:20:01.5397220Z" />
    <EventRecordID>122318</EventRecordID>
    <Correlation />
    <Execution ProcessID="4" ThreadID="9152" />
    <Channel>System</Channel>
    <Computer>ComputerName</Computer>
    <Security />
  </System>
  <EventData>
    <Data>\Device\NDMP5</Data>
    <Data>Intel(R) Dual Band Wireless-AC 3165</Data>
    <Binary>0000080002003800000000005B1B00400000000000000000000000000000000000000000000000000000000000000000</Binary>
  </EventData>
</Event>

И следующие два журнала из Applications and Services Logs\Microsoft\Windows\Dhcp-Client\Microsoft-Windows-DHCP Client Events/Adminимеют одинаковую временную метку. Нет журнала с такой же или соседней временной меткой из Applications and Services Logs\Microsoft\Windows\Dhcp-Client\Microsoft-Windows-DHCPv6 Client Events/Admin:

Журнал событий DHCP-клиента/администрирования событий о событии 50067

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Dhcp-Client" Guid="{15a7a4f8-0072-4eab-abad-f98a4d666aed}" />
    <EventID>50067</EventID>
    <Version>0</Version>
    <Level>4</Level>
    <Task>3</Task>
    <Opcode>57</Opcode>
    <Keywords>0x4000000000000000</Keywords>
    <TimeCreated SystemTime="2023-07-11T18:20:01.5559344Z" />
    <EventRecordID>6641</EventRecordID>
    <Correlation />
    <Execution ProcessID="2044" ThreadID="6392" />
    <Channel>Microsoft-Windows-Dhcp-Client/Admin</Channel>
    <Computer>sanfrancisco</Computer>
    <Security UserID="S-1-5-19" />
  </System>
  <EventData>
    <Data Name="NetworkHintString">SSID</Data>
    <Data Name="NetworkHint">SSID hex</Data>
    <Data Name="HWLength">6</Data>
    <Data Name="HWAddress">MAC address</Data>
  </EventData>
</Event>

Журнал событий DHCP-клиента/администрирования событий о событии 50065

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Dhcp-Client" Guid="{15a7a4f8-0072-4eab-abad-f98a4d666aed}" />
    <EventID>50065</EventID>
    <Version>0</Version>
    <Level>4</Level>
    <Task>3</Task>
    <Opcode>55</Opcode>
    <Keywords>0x4000000000000000</Keywords>
    <TimeCreated SystemTime="2023-07-11T18:20:01.5559369Z" />
    <EventRecordID>6642</EventRecordID>
    <Correlation />
    <Execution ProcessID="2044" ThreadID="6392" />
    <Channel>Microsoft-Windows-Dhcp-Client/Admin</Channel>
    <Computer>sanfrancisco</Computer>
    <Security UserID="S-1-5-19" />
  </System>
  <EventData>
    <Data Name="NetworkHintString">SSID</Data>
    <Data Name="NetworkHint">SSID hex</Data>
    <Data Name="HWLength">6</Data>
    <Data Name="HWAddress">MAC address</Data>
  </EventData>
</Event>

Так как же предотвратить откат адреса DHCP IPv6? Или как отключить DHCPv6?

решение1

Я обнаружил, что могу отключить DHCPv6 для сетевой карты с помощью Set-NetIPInterface -Dhcp Disable -InterfaceAlias Wi-Fi -AddressFamily IPv6. После выполнения этого моя сетевая карта имела только 2 публичных адреса IPv6, соответственно, установленные мной вручную и SLAAC. Но даже после того, как я установил IPv6 SLAAC SkipAsSourceкак $True, он все равно возвращался к $Falseчасам спустя. Теперь я отключил SLAAC с помощью , netsh interface ipv6 set interface Wi-Fi routerdiscovery=disabledи моя проблема полностью решилась, так как у Windows есть только один публичный адрес IPv6.

Связанный контент