====== KVM bridged networking ======
By default dhcpd based network bridge configured by libvirtd. You can verify that with the following commands:
# brctl show
# virsh net-list
KVM default networking
All VMs (guest machine) only have network access to other VMs on the same server. A private network 192.168.122.0/24 created for you. Verify it:
# virsh net-dumpxml default
If you want your VMs avilable to other servers on your LAN, setup a a network bridge on the server that connected to the your LAN.
===== Bridge with NetworkManager and DHCP =====
Update your nic config file such as ifcfg-enp3s0 or em1:
# vi /etc/sysconfig/network-scripts/enp3s0
Add line:
BRIDGE=br0
Save and close the file in vi. Edit /etc/sysconfig/network-scripts/ifcfg-br0 and add:
# vi /etc/sysconfig/network-scripts/ifcfg-br0
Append the following:
DEVICE="br0"
# I am getting ip from DHCP server #
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"
Restart the networking service (warning ssh command will disconnect, it is better to reboot the box):
# systemctl restart NetworkManager
Verify it with brctl command:
# brctl show
===== Manual Bridge with static IP =====
By KVM Virtual Manager can be created bridge interface on each of network interface
{{ :linux:bridge_virt_01.jpg |}}
==== If you have two LAN interface with two VLAN network ====
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br1
DEVICE="br1"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.5.22.51"
NETMASK="255.255.255.0"
GATEWAY="10.5.22.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0.0"
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br2
DEVICE="br2"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.5.23.10"
NETMASK="255.255.255.0"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0.0"
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br1"
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BRIDGE="br2"
In this configuration second interface eth1 and br2 will not be accessible outside.
To use a second interface and address we need to add another routing table.To do this go to file:
# vim /etc/iproute2/rt_tables
and add at the end “1 rt2”:
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2
Now we need to add routing rules and routes:
ip route add default via 10.5.23.254 dev br2 table rt2;
ip rule add from 10.5.23.0/24 table rt2
You can check these changes with commands:
# ip route show table rt2
# ip rule show
==== CentOS: Start custom script automatically after network startup ====
Find the ifup-post under /etc/sysconfig/network-scripts. This scipt is called right after any network interface is brought up online. In this script, you will find the following code snippet toward the end.
if [ -x /sbin/ifup-local ]; then
/sbin/ifup-local ${DEVICE}
In the code snippet above, if ifup-local script exists in /sbin location, then script gets executed with an interface name in argument. Usually no such ecript like ifup-local exists so in order to run a startup script automatically after a network interface is up. Create an executable script called ifup-local in /sbin and put in there any command or script you wish to run.
Here is an example:
if [[ "$1" == "eth0" ]]
then
echo "this part will be executed right after eth0 is up."
echo "so you can put any startup command for eth0 here"
else
#DO_NOTHING
fi
when script is done, use command to get the script executable.
$ sudo chmod +x /sbin/ifup-local
[root@localhost ~]# cat /sbin/ifup-local
#!/bin/sh
ip route add default via 10.5.23.254 dev br2 table rt2;
ip rule add from 10.5.23.0/24 table rt2