Instructions for Setting Up a CentOS 7 System with Bridged Networking for Virtual Machines
CentOS 7 bridging network card for virtual machines
My goal is to set up virtualization where the guests can access the entire LAN as well as the host over the network. The host should also be able to reach all the guests via the network. This task was so simple, but somehow it eluded me for over a year. I use this document to establish a new kvm host in my network pool.
Install virtualization tools
sudo yum -y install libvirt qemu-kvm virt-install
sudo systemctl enable libvirtd.service ; sudo systemctl start libvirtd.service
sudo setsebool -P virt_use_nfs 1
Adjust the ethernet configuration
sudo su -
{
this_nic="$( nmcli device show | awk '/^GENERAL.DEVICE:/ && $2 ~ /e.*/ {print $2}' )"
indir=/etc/sysconfig/network-scripts
this_bridge=br0
this_nic_count="$( printf "%s\n" "${this_nic}" | sed '/^\s*$/d' | wc -l )"
if test ${this_nic_count} -ne 1 ;
then
echo "Other than 1 nic detected. Please deal with manually. Aborted."
else
# prepare values for bridge definition
this_mac="$( ip -o link | grep "${this_nic}" | grep -oE 'ether [a-fA-F0-9:]{17}' | awk '{print $2}' | tr '[[:lower:]]' '[[:upper:]]' )"
this_ipaddr="$( ip -o address show "${this_nic}" | grep -oE 'inet [0-9\.]{7,15}' | awk '{print $2}' )"
# define bridge interface
{
echo "DEVICE=${this_bridge}"
echo "TYPE=Bridge"
echo "ONBOOT=yes"
echo "DELAY=0"
grep -h -E 'DNS1|DNS2|DOMAIN|IPADDR|PREFIX|BOOTPROTO|GATEWAY|DEFROUTE' "${indir}/ifcfg-${this_nic}"
} > "${indir}/ifcfg-${this_bridge}"
# define ethernet card
old_nic_file="${indir}/ifcfg-${this_nic}"
temp_nic_file="${indir}/ifcfg-${this_nic}-new"
{
echo "DEVICE=${this_nic}"
echo "HWADDR=${this_mac}"
echo "ONBOOT=yes"
echo "BRIDGE=${this_bridge}"
grep -h -E 'UUID' "${old_nic_file}"
} > "${temp_nic_file}"
chmod --reference "${old_nic_file}" "${temp_nic_file}"
/bin/mv -f "${temp_nic_file}" "${old_nic_file}"
fi
}
systemctl restart network.service NetworkManager.service
Using the virtual host
With the setup complete, the environment is ready to serve virtual machines!
Install a virtual machine
vm=c7-03a ; time sudo virt-install -n "${vm}" --memory 2048 --vcpus=1 --os-variant=centos7.0 --accelerate -v --disk path=/var/lib/libvirt/images/"${vm}".qcow2,size=20 -l /mnt/public/Support/SetupsBig/Linux/CentOS-7-x86_64-Minimal-1804.iso --initrd-inject=/mnt/public/Support/Platforms/CentOS7/centos7-ks.cfg --extra-args "ks=file:/centos7-ks.cfg SERVERNAME=${vm} NOTIFYEMAIL=bgstack15@ipa.example.com" --debug --network type=bridge,source=br0 --noautoconsole
Delete a virtual machine
vm=c7-03a; sudo virsh destroy "${vm}"; sudo virsh undefine --remove-all-storage "${vm}";
References
Weblinks
Internal files
- file:///mnt/public/Support/Platforms/CentOS7/centos7-ks.cfg
Comments