Jump directly to main content

Setup a bridge network for KVM



A bridge network is a means to connect/bridge different networks together to act as a single network. In this case, it allows any virtual connections to the bridge network to get their own internal IPs, as if plugged into the network directly.

Install bridge-utils

sudo apt install bridge-utils

Find the network device to bridge

First we need to find the network device we want to bridge to the VMs.

ip link

You'll likely have a device called something similar to enp1s0, or eth0.

Create the bridge network

This will be familiar to those who have set a static ip on linux, as it's essentially the same, with a few additional lines related to bridging

Remove interface from interfaces file

First step is to remove any references to your network device from /etc/network/interfaces, if this file is untouched there will likely be two lines at the bottom.

sudo vim /etc/network/interfaces

Create a new bridge interface

Now create a file in the /etc/network/interfaces.d/ directory, with the name of your bridge (I like br0).

Static IP

auto br0
iface br0 inet static # Name the same as your file (br0)
	address 192.168.0.100
	broadcast 192.168.0.255
	netmask 255.255.255.0
	gateway 192.168.0.1 # Normally your router's IP
	dns-nameservers 192.168.0.1 8.8.8.8 8.8.4.4 # Don't set if resolveconf is installed, comment if internet borked
	bridge_ports enp1s0 # Your device name
	bridge_stp off # Disable Spanning Tree Protocol
        bridge_waitport 0 # No delay before a port becomes available
        bridge_fd 0 # No forwarding delay (Connects to network immediately)

Dynamic IP

iface br0 inet dhcp
    bridge_ports enp2s0

(Optional) Create Virtual Network

To make it easier to manage with VMs, this new bridge can also be made into a Virtual Network (Basically so you can select it from a dropdown).

Create XML file

Open up a text-editor, and create a file called br0.xml, named after the bridge itself.

vim br0.xml

Enter the following, then save

<network>
	<name>br0</name>
	<forward mode="bridge"/>
	<bridge name="br0"/>
</network>

Create the virtual network

sudo virsh net-define br0.xml

Activate, and auto-start (on boot) the new network.

sudo virsh net-start br0
sudo virsh net-autostart br0

You can now remove the br0.xml file.

Reload the network

sudo systemctl restart networking

This may claim to have failed, but if checking with ip link shows the bridge, reboot. Essentially the bridge has been brought up, and it's trying to bring it up again (and can't), then throws an error.

sudo reboot

Check it's there

Run some checks and you should now see br0, with an IP4 address.

ip a
ping google.co.uk

Useful Links