The Default Switch (Internal + ICS) is unreliable — Windows Updates frequently break the SharedAccess service that provides NAT/DHCP. Use an External Switch instead.
- Physical ethernet adapter on the host (Wi-Fi is unreliable with external switches)
- Admin PowerShell on Windows host
New-VMSwitch -Name "ExternalSwitch" -NetAdapterName "Ethernet" -AllowManagementOS $trueThe host network will blip for a few seconds while the adapter rebinds. If your adapter name differs, find it with:
Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
Connect-VMNetworkAdapter -VMName "YOUR-VM-NAME" -SwitchName "ExternalSwitch"This persists across reboots of both host and guest.
ip link showLook for eth0 (or similar) with state UP.
sudo nmcli connection add con-name "Wired" type ethernet ifname eth0 ipv4.method auto
sudo nmcli connection up "Wired"nmcli device status
# eth0 should show: connected / Wired
ip addr show eth0
# Should have an IP from your router's DHCP
ping 8.8.8.8
ping google.com| Issue | Detail |
|---|---|
| ICS service breaks silently | Windows Updates corrupt SharedAccess; service becomes unkillable |
| No manual fix without reboot | Stop-Service SharedAccess -Force fails when it's wedged |
| Recurs unpredictably | Can break again on next update cycle |
The External Switch bridges directly to the physical NIC — no dependency on ICS, WinNAT, or SharedAccess.
| Symptom | Fix |
|---|---|
dhclient times out (no DHCP response) |
Check switch type: Get-VMSwitch | Format-Table Name, SwitchType — must be External |
| eth0 has no IP after reboot | Ensure NetworkManager owns it: nmcli device status should show connected (not connected (externally)) |
| Host loses network after creating switch | Verify -AllowManagementOS $true was set; if not: Set-VMSwitch "ExternalSwitch" -AllowManagementOS $true |
| Multiple VMs need networking | Just connect each to the same ExternalSwitch — they'll each get their own DHCP lease from your router |