实验名称:
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
测试:
这时候数据包能到达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
此时虚拟机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通,这就是桥接模式:
实验结果: