KVM-管理虚拟网络(三)

管理虚拟网络(三)

6.管理虚拟网络

  • Linux网桥基本概念
  • qemu-kvm支持的网络
  • 向虚拟机添加虚拟网络连接
  • 基于NAT的虚拟网络
  • 基于网桥的虚拟网络
  • 用户自定义的隔离的虚拟网络

6.1 Linux网桥与qemu-kvm支持的网络

(1)Linux网桥基本概念

数据链路的设备,基于MAC地址进行转发
Redhat/CentOS配置网桥常用方法

  • 命令行(推荐)
  • nmtui:NetworkManager的文本用户接口
  • nmcli:NetworkManager的命令行工具
    # nmcli con add type bridge ifname br0
    # nmcli con show
  • 图形界面管理工具

(2)qemu-kvm支持的网络

虚拟机的网络模式:

  • 基于NAT(NetworkAddressTranslation)的虚拟网络
  • 基于网桥(Bridge)的虚拟网络
  • 用户自定义的隔离的虚拟网络
  • 直接分配网络设备(包括VT-d和SR-IOV)

虚拟机的网卡:

  • RTL8139,e1000,....
  • virtio
    # /usr/libexec/qemu-kvm -net nic,mode1=?

(3)演示:考察默认的虚拟网络的配置

  • 查看宿主机的网络配置
  • 查看虚拟机的网络配置

image.png-30.7kB

image.png-57kB

image.png-59.5kB

#qemu-kvm的虚拟网络配置文件在哪?
[root@KVM ~]# ls /etc/libvirt/     #libvirt的所有配置文件目录
libvirt-admin.conf  libvirtd.conf  nwfilter  qemu.conf        secrets  virtlockd.conf
libvirt.conf        lxc.conf       qemu      qemu-lockd.conf  storage  virtlogd.conf                #storage目录,所有存储池的XML配置文件

[root@KVM ~]# ls /etc/libvirt/qemu/   #qemu目录所有qemu有关的配置文件
centos6.5-2.xml  centos6.5.xml  networks

[root@KVM ~]# ls /etc/libvirt/qemu/networks/   #qemu里存储所有虚拟网络配置文件的目录networks
autostart  default.xml       #default.xml这个就是默认的虚拟网络的XML配置文件
[root@KVM ~]# cat /etc/libvirt/qemu/networks/default.xml   #查看default.xml内容
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh net-edit default
or other application using the libvirt API.
-->

<network>
  <name>default</name>        #虚拟网络的名字
  <uuid>9af30af7-bc42-4290-b5b0-20b756df80ce</uuid>     #UUID号
  <forward mode='nat'/>       #虚拟网络的模式NAT
  <bridge name='virbr0' stp='on' delay='0'/>      #虚拟网络的网桥名称
  <mac address='52:54:00:a8:9d:be'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>  #网桥的IP和掩码
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>  #DHCP的分发范围
    </dhcp>
  </ip>
</network>

利用virsh 管理虚拟网络

#virsh里关于网络部分的命令
[root@KVM ~]# virsh help network
 Networking (help keyword 'network'):
    net-autostart                  自动开始网络
    net-create                     从一个 XML 文件创建一个网络
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    销毁(停止)网络
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    XML 中的网络信息
    net-edit                       为网络编辑 XML 配置
    net-event                      Network Events
    net-info                       网络信息
    net-list                       列出网络
    net-name                       把一个网络UUID 转换为网络名
    net-start                      开始一个(以前定义的)不活跃的网络
    net-undefine                   undefine a persistent network
    net-update                     更新现有网络配置的部分
    net-uuid                       把一个网络名转换为网络UUID
#查看所有虚拟网络信息
[root@KVM ~]# virsh net-list
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是

#查看某虚拟网络详细信息
[root@KVM ~]# virsh net-info default
名称:       default
UUID:           9af30af7-bc42-4290-b5b0-20b756df80ce
活跃:       是
持久:       是
自动启动:   是
桥接:       virbr0

#查看某虚拟网络的XML配置文件信息
[root@KVM ~]# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>9af30af7-bc42-4290-b5b0-20b756df80ce</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:a8:9d:be'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

什么叫做网桥?网桥到底是怎么回事?

[root@KVM ~]# ifconfig -a
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500      #宿主机的真实网卡接口
        inet 192.168.200.29  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fe27:2f23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:2f:23  txqueuelen 1000  (Ethernet)
        RX packets 498  bytes 53357 (52.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 561  bytes 76099 (74.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536      #宿主机的lo回环接口
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 172  bytes 14816 (14.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 172  bytes 14816 (14.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500   #虚拟网桥(虚拟交换机)virbr0
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:a8:9d:be  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0-nic: flags=4098<BROADCAST,MULTICAST>  mtu 1500   #连接到网桥virbr0上的宿主机的虚拟网卡接口
        ether 52:54:00:a8:9d:be  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500     ##连接到virbr0上的虚拟机的网卡
        inet6 fe80::fc54:ff:fe49:ab6e  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:49:ab:6e  txqueuelen 1000  (Ethernet)
        RX packets 41  bytes 3730 (3.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1533  bytes 81690 (79.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@KVM ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400a89dbe	yes		virbr0-nic    #连接到网桥virbr0上的宿主机的虚拟网卡接口
							vnet0                     #连接到网桥virbr0上的宿主机的虚拟网卡接口

NAT模式的网桥连接概念图:

image.png-56.9kB

查看虚拟机的网络连接配置:

[root@KVM ~]# 
[root@KVM ~]# virsh list
 Id    名称                         状态
----------------------------------------------------
 4     centos6.5                      running

[root@KVM ~]# virsh edit centos6.5     #相当于以vim在内存中即时打开虚拟机的XML配置文件

#############以上省略若干############
    <interface type='network'>      #虚拟机的网络接口类型
      <mac address='52:54:00:0c:8b:d2'/>        #虚拟机的网卡MAC地址
      <source network='default'/>               #虚拟机的网卡的源网络名称
      <model type='virtio'/>                    #虚拟机的网络接口模式virtio
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
#############以下省略若干############

在宿主机中测试网络联通性

image.png-50.3kB

在虚拟机中测试网络联通性

image.png-38.8kB

6.2 基于NAT的虚拟网络

image.png-317.4kB

[root@KVM ~]# virsh list
 Id    名称                         状态
----------------------------------------------------
 4     centos6.5                      running
 5     centos6.5-2                    running

[root@KVM ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400a89dbe	yes		virbr0-nic
							vnet0
							vnet1

通过图形界面向虚拟机中添加一块NAT网卡

image.png-46.6kB

[root@KVM ~]# virsh list
 Id    名称                         状态
----------------------------------------------------
 4     centos6.5                      running
 5     centos6.5-2                    running

[root@KVM ~]# virsh domiflist centos6.5      #查看虚拟机网络接口类型
接口     类型     源        型号      MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:49:ab:6e
vnet1      network    default    virtio      52:54:00:cb:42:ae

[root@KVM ~]#  virsh domiflist centos6.5-2   #查看虚拟机网络接口类型
接口     类型     源        型号      MAC
-------------------------------------------------------
vnet2      network    default    virtio      52:54:00:5f:26:ed

[root@KVM ~]# virsh domifaddr centos6.5      #查看虚拟机网卡IP地址
 名称     MAC 地址           Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:49:ab:6e    ipv4         192.168.122.154/24
 
 [root@KVM ~]# virsh domifstat centos6.5 vnet0  #查看虚拟机指定网卡的状态
vnet0 rx_bytes 119368
vnet0 rx_packets 2247
vnet0 rx_errs 0
vnet0 rx_drop 0
vnet0 tx_bytes 4966
vnet0 tx_packets 53
vnet0 tx_errs 0
vnet0 tx_drop 0

6.3 基于网桥的虚拟网络

image.png-343.4kB

由上图可知:

  • NAT模式:通过网桥virbr0将宿主机上的一块虚拟网卡virbr0-nic与虚拟机的虚拟网卡vnet0进行连接,而后虚拟机的数据包通过网桥virbr0发送到宿主机的虚拟网卡virbr0-net上,再进行宿主机网卡间的数据包转发实现的虚拟机通过宿主机来上网。
  • 桥接模式:通过网桥virbr0将虚拟机的虚拟网卡vnet1直接连接在宿主机的真实物理网卡上,然后通过宿主机的真实物理网卡来上网。

因此,想要实现桥接的上网模式,我们首先需要学会如何来创建网桥virbr1

#modprobe探测内核对于某个模块是否加载的命令
[root@KVM ~]# which modprobe
/usr/sbin/modprobe

#探测bridge模块是否安装,如果没有,那么--first-time第一时间加载这个模块
[root@KVM ~]# modprobe --first-time bridge   #探测网桥模块是否被内核加载
modprobe: ERROR: could not insert 'bridge': Module already in kernel  #kernel已经加载了

[root@KVM ~]# modinfo bridge
filename:       /lib/modules/3.10.0-957.1.3.el7.x86_64/kernel/net/bridge/bridge.ko.xz
alias:          rtnl-link-bridge
version:        2.3
license:        GPL
retpoline:      Y
rhelversion:    7.6
srcversion:     24DDA8C6E1594CDB8543B49
depends:        stp,llc
intree:         Y
vermagic:       3.10.0-957.1.3.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        E7:CE:F3:61:3A:9B:8B:D0:12:FA:E7:49:82:72:15:9B:B1:87:9C:65
sig_hashalgo:   sha256

6.3.1 通过命令行进行网桥virbr1的创建

[root@KVM ~]# cd /etc/sysconfig/network-scripts/ 
[root@KVM network-scripts]# cat ifcfg-ens32 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
[root@KVM network-scripts]# mkdir bak      #创建备份目录
[root@KVM network-scripts]# cp ifcfg-ens32 bak/ifcfg-ens32.bak   #复制一份网卡配置文件备份
#复制一份物理网卡配置文件进行修改,作为网桥配置文件
[root@KVM network-scripts]# cp ifcfg-ens32 ifcfg-virbr1
[root@KVM network-scripts]# vim ifcfg-virbr1
[root@KVM network-scripts]# cat ifcfg-virbr1 
DEVICE=virbr1
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.200.200      #桥接的网桥IP肯定和宿主机要同一网段
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=192.168.200.2
ONBOOT=yes
#让物理网卡配置文件可以识别网桥virbr1
[root@KVM network-scripts]# vim ifcfg-ens32 
[root@KVM network-scripts]# cat ifcfg-ens32 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=virbr1              #增加本条配置语句

#重启宿主机的网络模式
[root@KVM network-scripts]# service network restart
Restarting network (via systemctl):                        [  确定  ]

重启后,很大概率我们的xshell已经掉线了。

image.png-115.5kB

xshell连不上了,怎么办呢?我们现在修改xshell的连接配置。我们去连接virbr1网桥的IP地址。

image.png-26.8kB
打开virt-manager图形模式,我们查看网络接口情况

image.png-27.8kB

打开虚拟机此时我们发现之前NAT模式连接的虚拟机已经无法连接外网了

image.png-38.2kB
我们利用virt-manager图形界面将虚拟机的网卡连接模式切换到桥接模式桥接virbr1

image.png-57.6kB

进入虚拟机我们重启网卡的配置文件

image.png-45.2kB
此时我们的外部机器也可以ping通我们的桥接的虚拟机了

image.png-24.8kB

6.3.2 通过图形界面进行网桥virbr1的创建

[root@KVM ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400a89dbe	yes		virbr0-nic
							vnet1
							vnet2
virbr1		8000.000c29272f23	no		ens32
							vnet0    #之前本来插在virbr0上的网卡(NAT模式),如今插到virbr1上(桥接模式)

现在我们还原一下virbr1的配置文件。(移走virbr0,还原ens32网卡配置文件等)
如果还原后,发现virbr1还在,也没关系,那是还没清空的缓存导致。
只要图形界面下没有了即可。

图形化创建virbr1

image.png-31.3kB

image.png-18.3kB

image.png-36.1kB

image.png-8.8kB

image.png-34.6kB

#验证virbr1配置
[root@KVM ~]#  cat /etc/sysconfig/network-scripts/ifcfg-ens32   #我们发现网卡配置文件已经改变
DEVICE=ens32
ONBOOT=yes
BRIDGE="virbr1"

[root@KVM ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr1   #网桥文件被自动创建
DEVICE="virbr1"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0.0"
[root@KVM ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400a89dbe	yes		virbr0-nic
							vnet1
							vnet2

[root@KVM ~]# service network restart   #重启网络,激活virbr1网桥配置
Restarting network (via systemctl):                        [  确定  ]

[root@KVM ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400a89dbe	yes		virbr0-nic
							vnet1
							vnet2
virbr1		8000.000c29272f23	yes		ens32    #已经激活
[root@KVM ~]# ifconfig ens32       #查看物理网卡IP已经消失
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:27:2f:23  txqueuelen 1000  (Ethernet)
        RX packets 2537  bytes 316953 (309.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1653  bytes 223833 (218.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@KVM ~]# ifconfig virbr1      #查看网桥IP,已经出现
virbr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.29  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fe27:2f23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:2f:23  txqueuelen 1000  (Ethernet)
        RX packets 40  bytes 6916 (6.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54  bytes 7546 (7.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

7.虚拟网络高级特性

7.1 配置网卡绑定

image.png-392.6kB

实验:配置多网卡绑定的KVM桥接模式

绑定网卡

  • 启用Bonding
  • 配置物理网卡
  • 配置绑定接口
  • 重新启动服务
  • 测试

配置网桥

image.png-165.1kB

image.png-81.6kB
实操(1):创建多网卡bond
我们给KVM宿主机多天加一块网卡,并删除virbr1网桥还原ens32网卡的初始设置

#查看两块网卡的初始配置
[root@KVM ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.29  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fe27:2f23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:2f:23  txqueuelen 1000  (Ethernet)
        RX packets 228  bytes 40646 (39.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 277  bytes 46270 (45.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@KVM ~]# ifconfig ens34
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.117  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 240e:82:f08c:f639:a91c:2fd1:4b48:2ccc  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::14a1:6697:f3eb:9068  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:2f:2d  txqueuelen 1000  (Ethernet)
        RX packets 59  bytes 8759 (8.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79  bytes 9374 (9.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#查看网池基本情况
[root@KVM ~]# virsh net-list
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是

#查看默认网池的xml配置信息
[root@KVM ~]# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>9af30af7-bc42-4290-b5b0-20b756df80ce</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:a8:9d:be'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>
#查看KVM宿主机的物理网络接口信息
[root@KVM ~]# virsh iface-list
 名称               状态     MAC 地址
---------------------------------------------------
 ens32                活动     00:0c:29:27:2f:23
 lo                   活动     00:00:00:00:00:00

我们发现在查看网络接口时并没有新添加进来的ens36的网卡信息,这是因为还没有相应的网络接口配置文件,我们可以选择手动在/etc/sysconfig/network-scripts/目录下创建,也可以通过virt-manager创建。

1)通过virt-manager创建网卡接口文件

image.png-31kB

image.png-18.2kB

image.png-28kB

[root@KVM ~]# cd /etc/sysconfig/network-scripts/    #已经有了
[root@KVM network-scripts]# ll ifcfg-ens32 ifcfg-ens34
-rw-r--r--. 1 root root 204 1月  14 19:03 ifcfg-ens32
-rw-r--r--. 1 root root  72 1月  15 03:55 ifcfg-ens34

[root@KVM network-scripts]# cat ifcfg-ens34
DEVICE="ens34"
HWADDR="00:0c:29:27:2f:2d"
ONBOOT="yes"
BOOTPROTO="dhcp"

[root@KVM network-scripts]# virsh iface-list
 名称               状态     MAC 地址
---------------------------------------------------
 ens32                活动     00:0c:29:27:2f:23
 ens34                活动     00:0c:29:27:2f:2d    #已经有了
 lo                   活动     00:00:00:00:00:00

2)查看kernel是否支持网卡绑定

#查看是否支持网卡绑定
[root@KVM network-scripts]# lsmod | grep bonding 

#激活内核网卡绑定模块
[root@KVM network-scripts]# modprobe --first-time bonding 
[root@KVM network-scripts]# lsmod | grep bonding 
bonding               152656  0 

#备份网卡配置文件
[root@KVM network-scripts]# cp ifcfg-ens* bak/
#修改ens32和ens36网卡配置文件让band0绑定接口为主,他们为从
[root@KVM network-scripts]# vim ifcfg-ens32
[root@KVM network-scripts]# cat ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none
NAME=ens32
DEVICE=ens32
ONBOOT=yes
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
USERCTL=NO
[root@KVM network-scripts]# cp ifcfg-ens32 ifcfg-ens34
cp:是否覆盖"ifcfg-ens34"? y
[root@KVM network-scripts]# vim ifcfg-ens34
[root@KVM network-scripts]# cat ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=none
NAME=ens34
DEVICE=ens34
ONBOOT=yes
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
USERCTL=NO
#创建bond0绑定接口配置文件
[root@KVM network-scripts]# vim ifcfg-bond0
[root@KVM network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
NM_CONTROLLED=no
USERCTL=no
BONDING_OPTS="mode=1 miimon=100"      #mode=1是主备模式,两块从卡不同时生效
BOOTPROTO=static
IPADDR=192.168.200.132
NETMASK=255.255.255.0

#重新启动网络服务
[root@KVM ~]# service network restart
#查看bond0绑定接口
[root@KVM ~]# ifconfig bond0
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.200.132  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fe27:2f23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:27:2f:23  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30  bytes 4136 (4.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#查看bond0详细信息
[root@KVM ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)     #mode=1的模式==>主被动模式
Primary Slave: None
Currently Active Slave: ens32     #当前活动中的网卡ens32
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens32
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:27:2f:23
Slave queue ID: 0

3)测试绑定中的网卡:
我们断开ens32的网卡

image.png-48.3kB

[root@KVM ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens34   #ens34被启动了
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens32
MII Status: down            #ens32 down了
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:96:3a:c5
Slave queue ID: 0
Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:96:3a:cf
Slave queue ID: 0

我们用windows ping KVM宿主机,仍然能通

image.png-17.8kB
实操(2):搭建bond的KVM网桥
image.png-53.6kB

#验证网桥virbr1状态
[root@KVM ~]# brctl show
bridge name bridge id       STP enabled interfaces
virbr0      8000.52540079e341   yes     virbr0-nic
                            vnet0
                            vnet1
virbr1      8000.000c29963ac5   no      bond0

[root@localhost ~]# ifconfig bond0
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe96:3ac5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:96:3a:c5  txqueuelen 1000  (Ethernet)
        RX packets 3717  bytes 425857 (415.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7004  bytes 12720203 (12.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# ifconfig virbr1
virbr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.132  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fe96:3ac5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:96:3a:c5  txqueuelen 1000  (Ethernet)
        RX packets 3667  bytes 372147 (363.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2354  bytes 7601615 (7.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

特别提示,如果利用图形化方式添加桥接网桥virbr1时遇到如下问题,可尝试在网卡配置文件中加入NM_CONTROLLED=no和USERCTL=NO解决(ens32,ens34,bond0),如果还未解决,请尝试reboot重启操作系统。

image.png-8.2kB