实验名称:

  kvm环境下使用qemu-kvm创建虚拟机之间的网络配置

实验环境:

  保证kvm环境正常即可,拥有qemu-kvm管理工具;

  同时,我们这里离需要拥有bridge-utils桥工具

实验需求:

  1、保证kvm环境的正常运行;

  2、安装qemu-kvm管理工具,以及bridge-utils桥管理工具;

  3、安装虚拟机;

  4、配置网络,包括隧道模式、路由模式、nat模式、以及仅主机模式四种;

实验配置:

  1、配置启动脚本程序

  配置一个脚本,到时候需要引用到虚拟机启动参数中;



vim /etc/qemu-ifup
#!/bin/bash
#
bridge=br0

if [ -n '$1' ]
then
    ip link set $1 up
   brctl addbr $bridge
    brctl addif $bridge $1
    [ $? -eq 0 ] && exit 0 || exit 1
else
    echo "Error: no interface specified"
    exit 1
fi



  赋予脚本程序执行权限



chmod +x /etc/qemu-ifup



  2、创建虚拟机



cd /images/kvm/
qemu-kvm -m 256 -cpu host -smp 2 -name 'test1' -drive file=cirros-0.3.0-i386-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -nographic -net nic -net tap,ifname=vif0.0,script=/etc/qemu-ifup



  其中,nic指定的是前端虚拟机上面的io驱动;而tap则指定是物理机上面的前端驱动程序;

  【这里需要注意的是,-cpu 的参数在hypervisor为虚拟机的时候,可能导致系统无法启动,可以删除这个选项】

  启动第二台虚拟机:



qemu-kvm -m 256 -cpu host -smp 2 -name 'test2' -drive file=cirros-0.3.0-i386-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -nographic -net nic -net tap,ifname=vif1.0,script=/etc/qemu-ifup



  3、配置网络,实现隧道模式

  此时,两台虚拟机正常启动,且都通过脚本程序自动桥接到了br0桥上;

  此时,需要将两台虚拟机配置到同一个网络即可:



#第一台虚拟机
ifconfig eth0 192.168.100.1/24 up
#第二台虚拟机
ifconfig eth0 192.168.100.2/24 up



  相互ping通,则隧道模式测试成功;

  【这时候注意一个问题,我们的虚拟机的mac地址的获取是自动的,会出现mac地址冲突】 所以,我们需要手动去指定MAC地址;



-net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vif1.0,script=/etc/qemu-ifup



  #如果不存在mac地址冲突的问题,则可以不用使用这个命令

  4、配置网络,实现路由模式

  此时,我们需要使虚拟机能够通过我们的centos7能访问外网,通过配置路由模式来实现



#虚拟机配置网关
route add default gw 192.168.100.254



  虚拟机有了网关以后,还需要在真实机器上配置网关地址,同时需要开启路由转发功能;



#centos7
ifconfig br0 192.168.100.254 up
echo 1 > /proc/sys/net/ipv4/ip_forword



  测试:

如何搭建kvm虚拟化环境 kvm虚拟化网络配置_ui

  这时候数据包能到达192.168.238.129,却无法到达192.168.238.1,是因为192.168.238.1没有回去192.168.100.0/24网段的路由,所以这是需要在192.168.238.1上面配置明晰路由



#在192.168.238.1上面添加回指路由
route -p add 192.168.100.0 mask 255.255.255.0 192.168.238.129



  再在cirros上面来ping就可以通了

  5、配置网络,nat模式配置

  首先我们的nat模式属于三层功能,所以centos7也必须支持路由转发才行:



echo 1 > /proc/sys/net/ipv4/ip_forword



  去掉192.168.238.1机器上面的路由配置:



route delete 192.168.100.0



  此时,cirros到192.168.238.1的网络又不通了;则需要我们来指定nat方式来实现:



iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 192.168.238.0/24
iptables -t nat -L -n



如何搭建kvm虚拟化环境 kvm虚拟化网络配置_ui_02

  此时虚拟机cirros依然能够正常通讯,ping 192.168.238.1;

  同时可以抓包查看;



tcpdump -i br0 -nn icmp
tcpdump -i eno16777736 -nn icmp



   6、网络配置,桥接模式

  在桥接模式下面,我们需要将物理网卡桥接到桥交换机上面来;

  首先我需要去掉br0上面地址



ifconfig br0 0 up



  再把eno16777736的网卡添加到br0上面来;



brctl addif br0 eno16777736; ifconfig br0 192.168.238.129/24 up
brctl show
ifconfig
route  #查看本机路由,看清楚网关地址



  把虚拟机cirros的地址也配置到同一个网段中,同时制定网关地址;



ifcongfig eth0 192.168.238.100/24 up
route add default gw 192.168.238.2



  此时,虚拟机去ping公网就能ping通,这就是桥接模式:

如何搭建kvm虚拟化环境 kvm虚拟化网络配置_ViewUI_03

实验结果: