Моя школа выделила всем моим одноклассникам префикс 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
которого может быть связана.
<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
:
<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>
<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.