How do I setup CentOS 7 for KVM Virtualisation with a bridged network [OVH/Hetzner]?

Coming from a minimal install the first step is to install the required software

# yum install net-tools qemu-kvm libvirt virt-install bridge-utils bind-utils

Convert the network configuration to a static IP address

Both Hetzner and OVH supply their dedicated servers were the network is configured via DHCP, this needs to be updated to a static configuration for the bridged network for KVM to work correctly.

To view the current network configuration run.

# ifconfig

With CentOS 7 the days of ethX are gone (unless it's OVH), they will now be labelled something like enp6s0

enp6s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.10.10  netmask 255.255.255.224  broadcast 176.9.36.255
        inet6 fe80::8e89:a5ff:fe63:b8ef  prefixlen 64  scopeid 0x20<link>
        ether 8c:89:a5:63:b8:ef  txqueuelen 1000  (Ethernet)
        RX packets 69106191  bytes 7806556849 (7.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 197727632  bytes 274850510321 (255.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

You will also need the gateway to setup the network.

# ip route

The output should have line prefixed with "default via".

default via 10.10.10.1 dev enp6s0  proto static  metric 1024

In the example above the default gateway is 10.10.10.1.

Replacing the name of your network device create a backup of the current network configuration (this must be a PREFIX otherwise it will be treated as a network device and will be configured on boot causing issues).

# cp /etc/sysconfig/network-scripts/ifcfg-enp6s0 /etc/sysconfig/network-scripts/bak.ifcfg-enp6s0

 Edit the configuration file (again replacing your network device name as required).

# vi /etc/sysconfig/network-scripts/ifcfg-enp6s0

You should see something like the following

# Generated by dracut initrd
DEVICE="enp6s0"
ONBOOT=yes
NETBOOT=yes
UUID="d2183429-2b16-43b1-99d6-433cf3c386ab"
IPV6INIT=yes
BOOTPROTO=dhcp
HWADDR="8c:89:a5:61:a8:ef"
TYPE=Ethernet
NAME="enp6s0"
DNS1="213.133.99.99"

 This needs to be changed to look like the following (dns shown are for Hetzner).

DEVICE="enp6s0"
ONBOOT=yes
NETBOOT=no
NM_CONTROLLED="no"
BOOTPROTO=static
HWADDR="8c:89:a5:61:a8:ef"
TYPE=Ethernet
NAME="enp6s0"
DNS1="213.133.98.98"
DNS2="213.133.99.99"
DNS3="213.133.100.100"
IPADDR=10.10.10.10
NETMASK=255.255.255.224
GATEWAY=10.10.10.1

Replacing the IPADDR/NETMASK with the inet initially shown on the network device, the GATEWAY IP from the output of  the "ip route" command.

Initially I would try restarting the network without a reboot 

# service network restart

If the network has been configured correctly the command prompt should return. If the command prompt doesn't come back you will need to boot the server in recovery mode and then either revert the changes from the bak file or correct any errors.

I would also advise doing reboot to ensure the network will start up like this as this is the basis of the network used later.

# reboot

Again if the server comes back after the reboot all is good, otherwise you will need to boot into recovery and resolve the issue.

Setup libvirt and configure the bridge

Start and enable libvirtd to start at system boot.

# systemctl start libvirtd
# systemctl enable libvirtd

Again we now need to copy the network file (changing the filename to your device as required) to make setting up the bridge network configration a little easier.

# cp /etc/sysconfig/network-scripts/ifcfg-enp6s0 /etc/sysconfig/network-scripts/ifcfg-br0

Edit the config for the network device.

# vi /etc/sysconfig/network-scripts/ifcfg-enp6s0

Comment out the HWADDR, TYPE, NAME, DNS1/DNS2/DNS3, IPADDR, NETMASK and GATEWAY and add the BRIDGE line which should leave you with something like this (we are calling the bridge to use with KVM "br0").

DEVICE="enp6s0"
ONBOOT=yes
NETBOOT=no
NM_CONTROLLED="no"
#BOOTPROTO=static
#HWADDR="8c:89:a5:61:a8:ef"
#TYPE=Ethernet
#NAME="enp6s0"
#DNS1="213.133.98.98"
#DNS2="213.133.99.99"
#DNS3="213.133.100.100"
#IPADDR=10.10.10.10
#NETMASK=255.255.255.224
#GATEWAY=10.10.10.1
BRIDGE=br0

 And then edit the new file for the bridge configuration.

# vi /etc/sysconfig/network-scripts/ifcfg-br0

After updating the DEVICE, TYPE, NAME and comment out the GATEWAY you should have something like.

DEVICE="br0"
ONBOOT=yes
NM_CONTROLLED="no"
NETBOOT=no
IPV6INIT=yes
BOOTPROTO=static
#HWADDR="8c:89:a5:63:b8:ef"
TYPE=Bridge
NAME="br0"
DNS1="213.133.99.99"
IPADDR=10.10.10.10
NETMASK=255.255.255.224
#GATEWAY=10.10.10.1

You will now need to add the commented out GATEWAY line to your network configuration

# vi /etc/sysconfig/network

And add the removed GATEWAY line

GATEWAY=10.10.10.1

Once these fines have been updated and checked restart the network service

# service network restart

Now check your new bridge has the correct configuration with the following commans.

# ifconfig br0
# ifconfig enp6s0

The br0 device should now have the IP address and the enp6s0 device should have no IP address associated with it.

Once you are happy with the configuration reboot the server.

# reboot

If everything looks OK after reboot you can now proceed with your KVM system and setup new Virtual Servers (with virt-manager for example). If your server doesn't come back after a few minutes you will need to boot into recovery mode and check the configuration files.

You cannot comment on this entry