Quick fix: Open Control Panel → Network and Sharing Center → Change adapter settings, right-click the adapter → Properties, untick Internet Protocol Version 6 (TCP/IPv6). This disables IPv6 on that one adapter only and leaves it active on others (e.g., VPN, virtual switches).
You want to disable IPv6 on your physical Wi-Fi adapter because your home router doesn’t handle IPv6 well, but you need IPv6 still enabled on your VPN adapter for company-network access. The Windows Settings UI doesn’t expose per-adapter IPv6 toggles; the classic Network Adapter Properties dialog does. Tweaking the wrong place (registry global toggle) disables IPv6 everywhere and breaks the VPN.
Affects: Windows 11 (and Windows 10) with multiple network adapters.
Fix time: ~5 minutes per adapter.
What causes this
Windows 11’s networking stack supports IPv4 and IPv6 simultaneously, with each adapter binding to either or both. Most adapters bind to both by default. Disabling IPv6 per-adapter means unbinding the IPv6 protocol from that adapter’s binding stack — the adapter still has Ethernet/Wi-Fi capability, but the IPv6 layer no longer attempts to assign addresses or send packets via that adapter.
Common reasons to disable IPv6 selectively: home router has buggy IPv6 implementation causing slow DNS resolution, VPN client requires IPv6 for split-tunnel routing, or specific apps misbehave on IPv6 but work on IPv4.
Method 1: Network Adapter Properties (per-adapter, recommended)
The targeted approach. Affects one adapter only.
- Press
Win + R, typencpa.cpl, press Enter. This opens Network Connections (the classic adapter list). - Right-click the adapter you want to modify (e.g., Wi-Fi). Click Properties.
- The connection properties dialog lists items: Client for Microsoft Networks, File and Printer Sharing, Internet Protocol Version 4 (TCP/IPv4), Internet Protocol Version 6 (TCP/IPv6), etc.
- Untick Internet Protocol Version 6 (TCP/IPv6).
- Click OK. The change applies immediately to this adapter only.
- Repeat for other adapters where you want IPv6 disabled.
- To verify: open Terminal and run
Get-NetAdapterBinding -Name "Wi-Fi" -ComponentID "ms_tcpip6". Output should show Enabled: False.
This is the cleanest path for selective per-adapter control.
Method 2: PowerShell for scripted/multiple changes
For when you’re configuring multiple PCs or want a script for repeated use.
- Open Terminal (Admin).
- List adapters and their IPv6 binding state:
Get-NetAdapterBinding -ComponentID ms_tcpip6 | Format-Table Name, DisplayName, Enabled - To disable IPv6 on a specific adapter by name:
Disable-NetAdapterBinding -Name "Wi-Fi" -ComponentID ms_tcpip6Replace “Wi-Fi” with the actual adapter name (case-sensitive, with quotes).
- To enable:
Enable-NetAdapterBinding -Name "Wi-Fi" -ComponentID ms_tcpip6. - To do all Wi-Fi adapters at once:
Get-NetAdapter -InterfaceDescription "*Wi-Fi*" | ForEach-Object { Disable-NetAdapterBinding -Name $_.Name -ComponentID ms_tcpip6 } - To verify after change:
Get-NetAdapterBinding -ComponentID ms_tcpip6 | Format-Table Name, Enabled. - Save scripts as
.ps1for re-use across machines. Sign with a code-signing cert or set execution policy to bypass for deployment.
PowerShell is the right approach for managing multiple machines or repeated changes.
Method 3: Disable IPv6 components selectively via registry
For when you want to disable specific IPv6 features (Teredo, 6to4, ISATAP) rather than IPv6 entirely.
- Open Registry Editor (
regedit). - Navigate to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP6\Parameters. - Look for DisabledComponents. Create as DWORD (32-bit) if missing.
- Set value to selectively disable features:
- 0x01: Disable all tunnel interfaces (Teredo, 6to4, ISATAP) but keep native IPv6
- 0x10: Disable native IPv6 on all interfaces, keep tunnels
- 0x11: Disable both — IPv6 fully off system-wide
- 0x20: Prefer IPv4 over IPv6 globally (keep IPv6 enabled but de-prioritize)
- 0xFF: Disable everything IPv6-related
- Reboot for changes to take effect.
- Note:
DisabledComponentsis system-wide, not per-adapter. Use this for global feature toggling; use Methods 1–2 for per-adapter control. - Don’t use this without understanding which bits do what — wrong values can break Internet connectivity entirely.
This is the right approach if you want to disable Teredo (for security reasons) while keeping native IPv6 on all adapters.
How to verify the fix worked
- Run
Get-NetAdapterBinding -ComponentID ms_tcpip6 | Format-Table Name, Enabled. The target adapter should show Enabled: False, others True. - Run
ipconfig /all. The target adapter should show no IPv6 address; others should still show theirs. - Test:
ping -6 google.comvia the target adapter (useping -S <local_ip> -6 ipv6.google.comto force route). Should fail. Run the same on a different adapter — should succeed if that adapter has IPv6.
If none of these work
If unticking IPv6 on an adapter doesn’t actually stop IPv6 traffic (you still see IPv6 in ipconfig output), Windows’s networking is overriding the binding. Reset the network stack: open Terminal (Admin) and run netsh int ipv6 reset, then reboot. This re-initializes the IPv6 stack and re-applies binding state. Check Group Policy: managed PCs may have policy enforcing IPv6 on all adapters. Run gpresult /h C:\gpresult.html and look in Computer Configuration → Administrative Templates → Network → IP Configuration for any forced settings. Hyper-V interference: if Hyper-V is enabled (used by WSL2, Docker, Windows Sandbox), it creates virtual switches that bind IPv6 to the physical adapter implicitly. Disabling IPv6 on the physical adapter may still leave it accessible via the virtual switch. Check by listing Get-VMSwitch and inspecting bindings per switch. For corporate networks where IPv6 must be enabled but only IPv4 connectivity works: configure adapter to prefer IPv4 via registry DisabledComponents = 0x20 instead of full disable.
Bottom line: ncpa.cpl (right-click adapter → untick IPv6) or PowerShell’s Disable-NetAdapterBinding give clean per-adapter control without affecting other adapters or system-wide IPv6.