[CentOS] Qemu - enabling "bridge mode" for primary physical interface for VMs

Wed Dec 8 04:25:37 UTC 2021
Chris Adams <linux at cmadams.net>

Once upon a time, Lists <lists at benjamindsmith.com> said:
> I understand that it's possible to allow the 4 VM guest systems to each have a 
> "direct" fixed IP address and access the addresses \via the host network 
> adapter, while the host retains its fixed IP. 

If you are running NetworkManager (the default), it's not too hard.
Here's an example step-by-step for changing an existing interface "em1" to
be a bridge "br0":

# Create a bridge interface
nmcli con add type bridge ifname br0 bridge.stp no

# Copy all the IPv4/IPv6 config from an existing interface
nmcli con mod bridge-br0 $(nmcli -f ipv4.method,ipv4.addresses,ipv4.gateway,ipv6.method,ipv6.addresses,ipv6.gateway con show em1 | grep -v -- -- | sed 's/:  */ /')
# -or- just set an IPv4 address/gateway to known values
nmcli con mod bridge-br0 ipv4.method manual ipv4.address ipv4.gateway ipv6.method ignore

# Make a connection for the physical ethernet em1 to be part of the bridge
nmcli con add type ethernet ifname em1 master bridge-br0

# Switch from the "regular" em1 to the bridge
nmcli con down em1; nmcli con up bridge-br0; nmcli con up bridge-slave-em1

# Disable the original config
nmcli con mod em1 autoconnect 0

Then you set your VMs to use the bridge - in the libvirt XML for
example, you'd have something like:

    <interface type='bridge'>
      <mac address='52:54:00:12:34:56'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

Inside the VM, configure the interface just as if it was a physical system
on that subnet.

Chris Adams <linux at cmadams.net>