ARM平台使用qemu运行OpenWrt虚拟机

作者简介:刘成天,就职于赛特斯信息科技股份有限公司,高级工程师,目前工作地点南京,主要从事vCPE和路由器相关的研发工作

概述

随着ARM架构的服务器越来越受到人们的关注,基于ARM架构的虚拟网络应用也逐渐走向成熟,本文主要介绍基于openwrt系统的vCPE基础系统如何在ARM64服务器上采用虚拟机的方式运行,并实际搭建环境进行验证测试。

一、QEMU工具

在ARM64服务器系统中使用qemu-system-aarch64运行虚拟机,root账户下安装命令:

关于QEMU运行OpenWrt虚拟机的支持情况,可参照OpenWrt官方网站中的介绍:http://wiki.openwrt.org/doc/howto/qemu?s[]=qemu

二、OpenWrt系统镜像

openwrt系统自身支持生成ARM64的qemu版本镜像,这里建议下载LEDE版本,openwrt原分支版本对ARM64的支持存在一些不足,本文作者基于openwrt的Chaos Calmer 15.05.1版本在编译和运行arm64虚拟机时都出现了一些问题,浪费了不少时间。

LEDE工程的下载地址:https://github.com/lede-project/source.git

make menuconfig选择QEMU ARM虚拟机系统的ARMV8平台(不同类型的网卡驱动可以在Kernel modules -> Network Devices中选择)

编译成功后,source/bin/targets/armvirt/64/openwrt-armvirt-64-Image-initramfs文件就是我们使用qemu运行的虚拟机镜像文件。

三、业务场景

本文使用openwrt虚拟机作为vCPE设备,完成LAN和WAN之间的基本转发功能,其中LAN侧接入用户PC终端,WAN侧接入服务器网络,用于完成LAN侧终端和WAN侧服务器的网络互通,组网如下图所示:

为了测试测试方便,我们可以在host上用VM代替用户接入设备和服务器设备,组网如下图所示:

四、网络配置

OpenWrt虚拟机采用tap网络方式和host主机进行网络通信,关于QEMU网络使用方法,可以参照官方文档:https://wiki.qemu.org/Documentation/Networking,因为本文实验使用tap方式,这里仅介绍tap方式的使用方法。

OpenWrt内部网络设备和host主机网络设备的结构可以构建成下图的模式,其中OpenWrt系统中的虚拟网卡WAN和LAN分别为eth0和eth1,tap0和tap1网络设备分别对应到虚拟机中的eth0和eth1网卡上,用于完成guest和host的通信,这两个tap口和host中其它物理网口(或者虚拟网口)桥接起来,这样虚拟机中的网卡就可以通过桥接方式和主机外部(或者其它虚拟机)网络互通了。

  • host创建tap网络设备

QEMU使用 “-netdev TYPE,id=NAME,...” 在host上创建一个网络backend用于和虚拟机进行数据通信,其中id指定名字后供虚拟机网卡引用,进而完成一对一的相互通信,本实验创建tap网络类型的命令如下:

  • guest创建虚拟网络设备

QEMU使用 “-device TYPE,netdev=NAME” 在启动虚拟机时创建虚拟网络设备,其中netdev对应host中的tap网络设备,本实验创建e1000类型的网络设备,命令如下:

五、启动命令

  • -kernel

用于指定需要启动的虚拟机系统镜像文件,因为我们使用initramfs类型的镜像文件,它把内核和initramfs做成了一个文件,所以不再需要指定其他启动文件了;

  • script

script和downscript分别是在虚拟机启动和关闭时调用的脚本,用于完成一些用户定制的工作,如果不需要可以设置成no。本实验中使用脚本创建网桥,并把tap设备和host中的需要互通的网络设备加入到一个桥中,在虚拟机关闭时删除对应的桥设备;

QEMU运行成功后,可以在host主机上查看新建了两个网桥,这个是script脚本创建的:

新增了两个tap网络设备用于和虚拟机对应的网卡通信,这个是qemu启动虚拟机时创建的:

两个tap网络设备加入了对应的网桥中,这个在script脚本中完成:

六、运行测试

  • qemu运行openwrt虚拟机

根据上述流程的介绍,启动openwrt的虚拟机,网络配置/etc/config/network如下,其中eth1作为LAN口加入到桥中,eth0作为WAN口配置静态地址:

  • qemu运行linux虚拟机

为了测试方便,可以使用qemu搭建aarch64的linux虚拟机代替测试设备,本文不介绍搭建方法(感兴趣的读者可以自己网上学习),当然读者也可以采用接入物理设备进行测试。

如果是测试设备是虚拟机方式,测试终端和服务器使用的tap网口加入到上述br-lan和br-wan中,本文测试中,测试终端对应的tap2网口加入到br-lan中,测试服务器对应的tap3网口加入到br-wan中(如果采用物理接入设备的方式,就把两个接入设备的网卡加入到对应的桥中)。

  • 互通验证

测试服务器的地址配置成和openwrt的WAN相同网段地址,接入终端可以通过DHCP从获取地址(openwrt默认为LAN侧分配地址),在接入终端中ping测试服务器地址,即可验证网络是否搭建成功。

实验脚本下载地址:https://pan.baidu.com/s/1ggIDHqN


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/20532.html
分享到:
相关文章
条评论

登录后才可以评论

certusnet-sky 发表于18-02-11
2