目的是:在Ubuntu 14.04的服务器上使用qemu命令行创建虚拟机,并使用桥接模式配置虚拟机的网络。
其实网络上关于qemu创建虚拟机的资料很多,并且配置桥接网络的资料也很多,为什么我还要写这个博客。
原因是:哈哈哈,我参考网上的资料,费了很大的劲也木有配好qemu虚拟机的网络,所以分享一下曲折的经历。
第一步就是使用qemu-img为虚拟机创建一个虚拟磁盘啦~
-f :指定该磁盘的类型,为qcow2;
./ubun_qemu.img :虚拟机镜像的路径以及名称;
30 :为虚拟机磁盘的大小,反正现在硬盘空间还大着呢,哈哈,就设大点。10G,20G都是可以得,qemu的磁盘大小是随着需要可以自动的变大的。
第二步就是准备虚拟机的安装镜像啦,ISO文件。我想在虚拟机中安装ubuntu 14.04桌面版,所以就到ubuntu官网(http://www.ubuntu.com/download/alternative-downloads )下载了Ubuntu 14.04.04 Desktop(64bit),也放在当前文件夹下。
第三步 在虚拟磁盘中安装ubuntu 14.04.4 Desktop。
首先描述一下错误的版本:
根据网上的资料,使用
qemu-system-x86_64 -m 2048 -enable-kvm -hda ubun_qemu.img -cdrom ./ubuntu-14.04.4-desktop-amd64.iso -boot d
即可进入操作系统的安装过程啦。
-m :配置虚拟机内存大小,单位为M。
--enable-kvm :支持KVM
-hda :制定要安装虚拟机要使用的虚拟磁盘
-cdrom :指定cdrom为iso文件
-boot :指定启动位置,d表示从光盘启动
操作系统安装成功之后,第一件事就是添加root用户,然后就是配网络了。这个过程是曲折而坎坷的,因为我想使用桥接模式配虚拟机的网络,尝试了各种桥接设置的方式,均为成功,这些方法的主要思路是:将虚拟机注册到主机的一个单独网络接口上,然后将这个接口和主机对外的网络接口一起桥接起来。
这样的话,需要在宿主机中为虚拟机创建一个tap虚拟网络接口,并创建一个虚拟网桥br0,并将tap和br0桥接起来就可以实现虚拟机的网络了。
配置的步骤:
1、安装两个配置网络所需软件包:
apt-get install bridge-utils # 虚拟网桥工具
apt-get install uml-utilities # UML(User-mode linux)工具
2、配置虚拟网桥br0
修改网络配置文件/etc/network/interfaces
在适当的位置填上你的环境对应的参数。
3、手动配置TAP设备的操作:(最下面有通过interfaces文件在服务器启动时自动配置TAP的步骤)
tunctl -t tap0 -u root # 创建一个tap0接口,只允许root用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个tap0接口
ifconfig tap0 0.0.0.0 promisc up # 打开tap0接口
brctl showstp br0 # 显示br0的各个接口
4、启动虚拟机
qemu-system-x86_64 --enable-kvm -m 2048 -hda ./ubun_qemu.img -net nic -net tap,ifname=tap0,script=no,downscript=no
如果省略script和downscript参数,qemu在启动时会以第一个不存在的tap接口名(通常是tap0)为参数去调用/etc/qemu-ifup脚本,而在退出时调用/etc/qemu-ifdown脚本。这两个脚本需要用户自行编写,其主要作用通常是:在启动时创建和打开指定的TAP接口,并将该接口添加到虚拟网桥中;退出时将该接口从虚拟网桥中移除,然后关闭该接口。由于配置TAP设备的操作前面已经做过了,所以启动qemu时显式地告诉qemu不要执行这两个脚本。这里需要严重注意:-net tap的各参数之间不要有空格!
虚拟机启动成功之后,发现虚拟机的网络不可用,无法启动eth0,此时就猜测启动虚拟机的时候,网络服务没有正常启动。
因此,我就在想,是否需要在安装虚拟机的时候就指定网络的模式。于是,开始重新安装虚拟机操作系统,在安装时就指定桥接。
正确的版本:
安装ubuntu 14.04.4 Desktop:
qemu-system-x86_64 --enable-kvm -m 2048 -hda ./ubun_qemu.img -cdrom ./ubuntu-14.04.4-desktop-amd64.iso -net nic -net tap,ifname=tap0,script=no,downscript=no -boot d
在配置好网桥,已经手动配置到tap0虚拟网络接口的基础(见上面)上,在安装时通过-net nic -net tap,ifname=tap0,script=no,downscript=no指定虚拟机使用tap桥接。
操作系统安装好之后,
启动虚拟机,此时也加上-net nic -net tap,ifname=tap0,script=no,downscript=no选项:
qemu-system-x86_64 --enable-kvm -m 2048 -hda ./ubun_qemu.img -net nic -net tap,ifname=tap0,script=no,downscript=no
虚拟机成功启动之后:
修改虚拟机的网络配置文件/etc/network/interfaces如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address *.*.*.*
netmask 255.255.255.128
gateway 223.129.0.*
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
dns-nameservers 4.4.4.4 8.8.8.8
耶耶耶,虚拟机网络终于通了,哭。
另外:
为了在系统启动时能够自动配置虚拟网桥和TAP设备,编写/etc/network/interfaces文件的内容如下:
auto lo
iface lo inet loopback
#auto p4p1//p4p1网卡的配置要注释掉
#iface p4p1 inet manual
auto br0
iface br0 inet static
bridge_ports p4p1
address 223.129.0.243
netmask 255.255.255.128
gateway 223.129.0.254
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
dns-nameservers 202.115.32.36 202.115.32.39
auto tap0
iface tap0 inet manual
pre-up tunctl -t tap0 -u root
pre-up ifconfig tap0 0.0.0.0 promisc up
post-up brctl addif br0 tap0
重启服务器之后就可以自动分配tap0虚拟网络接口了,就不需要手动配置tap0。