在CentOS7上通过QEMU/KVM实现KVM桥接模式

1.检查虚拟化、KVM和selinux

(1)查看是否支持虚拟化

egrep -o '(vmx|svm)' /proc/cpuinfo

有vmx或svm输出则支持虚拟化。svm 对应 AMD,vmx 对应 Intel。

(2)查看是否加载KVM

lsmod | grep kvm

如果没有与图上类似的输出,执行命令modprobe kvm

因本文部分内容是基于virt-manager实现的,安装QEMU/KVM以及virt-manager可参考文章

在CentOS上安装KVM/QEMU+实现嵌套虚拟化

(3)关闭selinux

vim /etc/sysconfig/selinux

将SELINUX的值改为disabled

2.安装 bridge-utils 软件包

bridge-utils 提供 brctl 工具来配置网桥

yum install bridge-utils

3.加载 tun 和 bridge 模块

[root@lianxiji ~]# lsmod | grep tun
tun                    40260  1 
[root@lianxiji ~]# lsmod | grep bridge
bridge                155432  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge

4.创建 brdige

将物理机工作的网口绑定到 brdige 上,将网口 IP 清除,让 bridge 获取 IP

[root@lianxiji ~]# brctl addbr br0

[root@lianxiji ~]# brctl addif br0 ens3

[root@lianxiji ~]# brctl show br0 
bridge name    bridge id        STP enabled    interfaces
br0        8000.525400d4a53d    no        ens3

[root@lianxiji ~]# brctl stp br0 on

[root@lianxiji ~]# brctl show br0 
bridge name    bridge id        STP enabled    interfaces
br0        8000.525400d4a53d    yes        ens3

[root@lianxiji ~]# ifconfig ens3
ens3:  flagS=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.32 netmask 255.255.255.0 broadcast 192.168.10.255
        inet6 fe80::7652:7a66:c319:cc4c prefixlen 64 scopeid 0x20<link>
        inet6 2408:8207:60d4:c4f1:21c0:elf2:182:cfdb prefixlen 64 scopeid 0x0<global>
        inet6 2408:8207:60d4:c4f1::99e prefixlen 128 scopeid 0x0<global>
        ether 52:54:00:d4:a5:3d txqueuelen 1000 (Ethernet)
        Rx packets 40959 bytes 13269505(12.6 MiB)
        RX errors 0 dropped 2298 overruns 0 frame 0
        TX packets 3618 bytes 369812(361.1 KiB)
        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@lianxiji ~]# ifconfig br0
br0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 52:54:00:d4:a5:3d  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
 
[root@lianxiji ~]# ifconfig ens3 0 up
[root@lianxiji ~]# ifconfig br0 up
[root@lianxiji ~]# dhclient br0

5.修改ifcfg-ens3和ifcfg-br0

ifcfg-br0文件需创建,均修改完成后需要重启网络sudo systemctl restart network

# ifcfg-ens3,需在原文件最后添加BRIDGE="br0"
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens3"
UUID="49e59602-31be-439d-846e-3340cd79bf0d"
DEVICE="ens3"
ONBOOT="yes"
BRIDGE="br0"
# ifcfg-br0,新创建的文件
DEVICE=br0
ONBOOT=yes
PREFIX=24
TYPE=Bridge
BOOTPROTO=none
IPADDR=192.168.10.32
NETMASK=255.255.255.0
GATEWAY=192.168.10.1

6.查看配置情况

[root@lianxiji ~]# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.32  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::5054:ff:fed4:a53d  prefixlen 64  scopeid 0x20<link>
        inet6 2408:8207:60d4:c4f1:5054:ff:fed4:a53d prefixlen 64 scopeid 0x0<global>
        ether 52:54:00:d4:a5:3d  txqueuelen 1000  (Ethernet)
        RX packets 69  bytes 15042 (14.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 4629 (4.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
[root@lianxiji ~]# ifconfig ens3
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::7652:7a66:c319:cc4c  prefixlen 64  scopeid 0x20<link>
        inet6 2408:8207:60d4:c4f1:21c0:e1f2:182:cfdb prefixlen 64 scopeid 0x0<global>
        inet6 2408:8207:60d4:c4f1::99e prefixlen 128 scopeid 0x0<global>
        ether 52:54:00:d4:a5:3d  txqueuelen 1000  (Ethernet)
        RX packets 42090  bytes 13547440 (12.9 MiB)
        RX errors 0  dropped 2298  overruns 0  frame 0
        TX packets 4144  bytes 397173 (387.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

7.准备 qemu-ifup/qemu-ifdown 脚本

在虚拟机启动网络前执行的脚本由 script 参数配置(默认 /etc/qemu-ifup)。

该脚本是将 QEMU 自动创建的 TAP 设备绑定到网桥上。

虚拟机关闭时,QEMU 会自动解除 TAP 设备的绑定,删除 TAP 设备。所以 qemu-ifdown 是不用配置的。

编辑/etc/qemu-ifup的内容如下

#!/bin/bash
switch=br0
ifconfig $1 up
brctl addif $switch $1

8.配置后启动虚拟机

(1)创建虚拟机

使用virt-manager创建新的虚拟机,然后先不启动。

(2)配置虚拟机网络为桥接模式

在宿主机中进入qemu目录,修改xml文件

[root@lianxiji ~]# cd /etc/libvirt/qemu
[root@lianxiji qemu]# vim kvmtest.xml 

主要将interface type改为bridge桥接模式,以及将source network改为前面设定的网卡名称br0

注意在virt-manager中更改宿主机和虚拟机的虚拟网络接口。

(3)启动虚拟机

通过virt-manager启动虚拟机后,查看虚拟机网络

[root@kvmtest network-scripts]# cd /etc/sysconfig/network-scripts/
[root@kvmtest network-scripts]# cat ifcfg-ens3
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens3"
UUID="a7ff358f-c738-4597-b6b6-b8b7611ff52a"
DEVICE="ens3"
ONBOOT="yes"

9.查看虚拟机状态

[root@kvmtest ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:ba:5f:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.29/24 brd 192.168.10.255 scope global noprefixroute dynamic eth0
       valid_lft 6807sec preferred_lft 6807sec
    inet6 2408:8207:60d4:c4f1::1d0/128 scope global noprefixroute dynamic 
       valid_lft 6808sec preferred_lft 6808sec
    inet6 2408:8207:60d4:c4f1:f529:d0d0:caef:d317/64 scope global noprefixroute dynamic 
       valid_lft 231442sec preferred_lft 145042sec
    inet6 fe80::9a:aa40:48e8:e2fb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@kvmtest ~]# ip route
default via 192.168.10.1 dev eth0 proto dhcp metric 100 
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.29 metric 100 

检查宿主机 bridge 状态

[root@lianxiji qemu]# brctl show
bridge name    bridge id        STP enabled    interfaces
br0        8000.525400d4a53d    yes        ens3
                            vnet0
virbr0        8000.52540066aa8d    yes        virbr0-nic

10.ping测试

宿主机ip地址为:192.168.10.32

虚拟机ip地址为:192.168.10.29

其他虚拟机的ip地址为:192.168.10.28

(1)宿主机与虚拟机互相ping

(2)宿主机与虚拟机都ping其他虚拟机

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值