I have tried to follow several tutorial to setup using either ip
or nmtui
:
- https://linuxconfig.org/how-to-use-bridged-networking-with-libvirt-and-kvm
- https://www.redhat.com/sysadmin/setup-network-bridge-VM
However, the bridge inherits the MAC address of host after enslaving the host hardware enp1s0...
. This causes my router to give both the host and the bridge the same ip address, making the ha instance inaccessible.
The red hat tutorial clearly show that the bridge and the host have different IP, so I was wondering if I am doing something wrong.
alternatively, I can set the home assistant vm to run in NAT and port forward from host, but I have several devices that communicate over different ports. So it would be annoying to forward all these ports. Not to mention, many appliances don’t have documentation about the ports they use.
I can also potentially use virtualbox, but it is not well supported on silverblue, especially with secureboot enabled.
I haven’t made a bridge to a VM before today, or made a bridge with Network Manager. That being said, I was able to persuade Network Manger to get a bridge working, and there are a few things I can note:
-
When you setup the bridge, the host network interface should become a slave to the bridge. This means that the physical network interface should not have an IP Address, and your bridge should now be where you configure the host’s IP address.
- After you start the VM, you should be able to run
ip link | grep 'master br0'
on the host, and it should display 2 interfaces which are slaves to br0. One for the physical ethernet interface, one for the VM (vnet). And it should only list your ethernet interface when the VM is off.
- After you start the VM, you should be able to run
-
The RedHat tutorial does not show the bridge and the host having different IP addresses, the RedHat tutorial shows the bridge and the guest having different IP addresses. Actually, no, the RedHat tutorial shows the libvirt NAT bridge, not even the bridge that the tutorial describes creating… If you set the IP address of virbr0, I don’t know what happens.
-
If your VM’s network adapter is connected to the host’s bridge, then you should be able to log into your VM and set a static IP address.
I had a lot of problems getting Network Manager to actually use my ethernet interface as a slave for the bridge. Here’s what worked for me, though:
nmcli con show nmcli con down 'Wired Connection 1' nmcli con modify 'Wired Connection 1' connection.autoconnect no nmcli con add type bridge con-name br0 ifname br0 nmcli connection add type bridge-slave ifname enp7s0 master br0 nmcli con modify br0 connection.autoconnect yes nmcli con modify bridge-slave-enp7s0 connection.autoconnect yes nmcli con modify br0 ipv4.method manual ipv4.addresses 172.16.0.231/24 bridge.stp no sudo systemctl restart NetworkManager.service nmcli con show ip addr
- Instead of enp7s0, you’d use enp1s0 I guess.
- Above, I manually set my bridge IP address to a static address because my ethernet interface is wired directly to another computer, so no DHCP for me. If you have DHCP on your ethernet network, you probably don’t need to set “ipv4.method” or “ipv4.addresses”.
- I set “bridge.stp” to “no” because my network doesn’t have any redundant paths, and the stp process seems to take like 25 seconds before I can use the bridge network.
After that, I can go into “Virtual Machine Manger”, set my VM’s NIC’s Network Source to “Bridge device…”, Device name to"br0", boot my VM, login to my VM, configure my VM’s ip address. And then I can connect to the VM’s IP address from the physical ethernet network.
-