Ubuntu Guest Has No Network After V2V Import¶
Symptom: a VMware → KVM V2V import of an Ubuntu Server guest completes successfully, the VM boots, but it's unreachable on the network — console login works, but there's no IP and nothing responds to ping.
Confirm it¶
In the guest console:
If you see something like this, the NIC and driver are actually fine — the problem is guest network configuration, not a missing driver:
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:50:56:a2:21:b6 brd ff:ff:ff:ff:ff:ff
lspci shows the virtio NIC, dmesg confirms the virtio_net driver
loaded and bound it, so do not go looking for a driver to install — it's
already there. The interface just isn't configured/up.
Root cause 1 — netplan still references the old VMware interface name¶
VMware presents the NIC as vmxnet3 or e1000, which Ubuntu names
something like ens160. KVM presents it as virtio-net, which gets a
different predictable name — typically enp1s0 — because predictable
naming is derived from the PCI bus path, and that path changed with the
hypervisor. The netplan config written by the installer (subiquity) still
hardcodes the old name:
network:
version: 2
ethernets:
ens160: # <-- doesn't exist anymore
dhcp4: no
addresses: [192.168.7.80/24]
gateway4: 192.168.7.1
nameservers:
addresses: [8.8.8.8]
Fix¶
Edit the yaml so the key matches the interface name from ip a, then apply:
Don't reach for nmcli
nmcli device connect enp1s0 fails with Error: Failed to
add/activate new connection: ... device is strictly unmanaged. That's
expected, not a bug — Ubuntu Server's default netplan renderer is
systemd-networkd, and netplan explicitly tells NetworkManager to
leave netplan-owned devices alone so the two don't fight over the same
NIC. Stick to netplan apply / networkctl status enp1s0, not nmcli.
Root cause 2 — systemd-networkd itself isn't running¶
Even with the yaml fixed, you can end up with netplan apply reporting
Configuration is valid, the interface flipping to UP,LOWER_UP when
forced up manually, and still no IPv4 address — only an autoconf IPv6
link-local (fe80::...):
sudo ip link set enp1s0 up
ip a show enp1s0
# UP,LOWER_UP but only inet6 fe80::.../64 — no inet line
Netplan on Ubuntu Server only generates config for systemd-networkd to
consume — if the service itself isn't enabled/running, the generated config
never actually gets applied, even though netplan generate/apply report
success.
Fix¶
systemctl status systemd-networkd
systemctl is-enabled systemd-networkd
sudo systemctl enable --now systemd-networkd
sudo netplan apply
ip a show enp1s0
Ruling out a hypervisor-side link problem¶
If forcing the interface up in the guest still leaves it NO-CARRIER
(not just missing an IP), stop working in the guest and check the
compute node instead — the virtual link itself may be down at the
hypervisor:
# on the compute node
virsh domiflist <vm-name>
# Interface Type Source Model MAC
# vnet73 bridge ovsbr0 virtio 00:50:56:a2:21:b6
virsh dumpxml <vm-name> | grep -A10 "<interface"
ip link show vnet73 # the tap device
ovs-vsctl show
ovs-ofctl show ovsbr0
ip link show vnet73 showing UP,LOWER_UP means the tap has carrier and
the hypervisor side is fine — the fault is back in the guest. Look for
<link state='down'/> in the interface XML block, or PORT_DOWN/
LINK_DOWN flags on the specific port in ovs-ofctl show output. Note
that ovsbr0's own LOCAL port showing down is normal on nodes that don't
use that bridge for host management IP — it's not the guest's forwarding
path (vnet73 ↔ the physical uplink), so don't chase it as the cause
unless you've confirmed the node is actually supposed to have a management
IP on that bridge.
Note: MAC address changes to the original vendor's OUI¶
It's expected for the converted guest's MAC to carry the source
hypervisor's OUI (e.g. 00:50:56:... for VMware) instead of a
52:54:00:... libvirt-generated one — the V2V import can preserve the
original NIC's MAC so DHCP reservations / firewall rules keyed on MAC keep
working. This is intentional, not a symptom of anything broken.
See also¶
- V2V Import Fails — import-time failures (before the guest ever boots), as opposed to this page's post-boot networking issue.
- Bridge a Single NIC for VM Networking