通过GNS3快速搭建本地SONiC Lab
SONiC是微软Azure推出的一个开源的网络操作系统,它通过微服务的思想,将网络操作系统中各个服务容器化,并利用中心Redis数据库进行协作,使得每个服务都可以独立的开发、测试、部署、升级,大大的提高了网络操作系统的可靠性、可扩展性、可维护性。现在SONiC支持的交换机厂商也非常的多,包括:Arista、Broadcom、Cisco、Dell、Edgecore、Mellanox等等。然而,一台DCN交换机的价格是非常昂贵的。如果你和我一样,想试一试SONiC,但是又不想花钱买一台SONiC的硬件设备,那么这篇文章就是为你准备的。本文会大概总结一下如何通过GNS3在本地搭建一个虚拟的SONiC的Lab,让你可以很快的在本地体验一把SONiC的基本功能。
在本地运行SONiC的方法很好几种,比如docker + vswitch,p4软交换机等等,对于初次使用而言,用GNS3可能是最方便快捷的了,所以本文就以GNS3为例,介绍一下如何在本地搭建一个SONiC的Lab。那么,我们就开始吧!
1. 安装GNS3
首先,我们要先来安装一下GNS3。
GNS3,全称为Graphical Network Simulator 3,是一个图形化的网络仿真软件。它支持多种不同的虚拟化技术,比如:QEMU、VMware、VirtualBox等等。这样,我们在等会搭建虚拟网络的时候,就不需要手动的运行很多命令,或者写脚本了,大部分的工作都可以通过图形界面来完成了。
1.1. 安装依赖
安装它之前,我们需要先安装几个其他的软件:docker, wireshark, putty, qemu, ubridge, libvirt和bridge-utils,已经装好的小伙伴可以自行跳过。
首先是Docker,它们的安装过程,大家可以自己通过下面的传送门去安装:https://docs.docker.com/engine/install/
其他的在ubuntu上安装都非常简单,只需要执行下面的命令就可以了。这里安装时要注意,ubridge和Wireshark的安装过程中会询问是不是要创建wireshark用户组来bypass sudo,这里一定要选择Yes。
1 | sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils wireshark putty ubridge |
安装好了之后,我们就可以来安装GNS3了。
1.2. 安装GNS3
在Ubuntu上,GNS3的安装非常简单,只需要执行下面的命令就可以了。
1 | sudo add-apt-repository ppa:gns3/ppa |
然后把你的用户加入到如下的组中,这样GNS3就可以去访问docker,wireshark等功能而不用sudo了。
1 | for g in ubridge libvirt kvm wireshark docker; do |
如果你使用的不是Ubuntu,更详细的安装文档可以参考他们的官方文档。
2. 准备SONiC的镜像
首先,我们需要一个SONiC的镜像。由于需要支持大量不同的厂商,而每个厂商的底层实现都不一样,所以最后每个厂商都会编译一个自己的镜像。这里因为我们是软件模拟交换机,所以我们需要使用基于VSwitch的镜像:sonic-vs.img.gz。
SONiC镜像的项目在这里,虽然我们可以自己去编译,但是速度实在有点慢,所以为了节省时间,我们可以直接去这里下载最新的镜像。只要找一个最新的成功的Build就行,在Artifacts中找到sonic-vs.img.gz,下载就可以了。
然后,我们来准备一下项目:
1 | git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git |
执行完成之后,我们运行ls
命令就可以看到我们需要的镜像文件了。
1 | r12f@r12f-svr:~/code/sonic/sonic-buildimage/platform/vs |
3. 导入镜像
现在,在命令行里面输入gns3
,就可以启动GNS3了。如果你是ssh到另外一台机器上,可以试着启用X11转发,这样就可以在远程运行GNS3,但是图形界面显示在本地了。我就是这样,将GNS3运行在了远程的服务器上,但是图形界面通过MobaXterm显示在了本地的Windows机器上。
运行起来之后,GNS3会让我们创建一个项目,很简单,填个目录地址就好。如果你是使用的X11转发,请注意,这个目录是在你远程服务器上,而不是本地。
然后,我们就可以通过File -> Import appliance
来导入我们刚刚生成的镜像了。
选择我们刚刚生成的SONiC-latest.gns3a
镜像配置文件,然后点击Next
。
这个时候就可以看到我们的ji镜像了,点击Next
。
这个时候会开始导入镜像,这个过程可能会比较慢,因为GNS3需要将镜像转换成qcow2格式,放入我们的项目目录中。导入完成之后,我们就可以看到我们的镜像了。
好的!完成!
4. 创建网络
好了!现在一切就绪,我们还是创建一个虚拟的网络吧!
GNS3的图形界面非常的好用,基本上就是打开侧边栏,把交换机拖进来,把VPC拖进来,然后把线连起来就可以了。连接好之后记得点上面的Play按钮开始网络模拟。这里我们就不多说了,直接上图。
接着,在交换机上点击右键,选择Custom Console
,再选择Putty,就可以打开我们的上面看到的交换机的Console了。这里,SONiC的默认用户名和密码是admin
和YourPaSsWoRd
。登录进去之后,我们就可以运行熟悉的命令,用show interfaces status
或者show ip interface
来查看网络的状态了。我们这里也可以看到,前面两个我们连接好了的Interface的状态都是up
的了。
除了这种简单的网络以外,GNS3还可以创建非常复杂的网络,比如多层ECMP结构等等。这里就不多说了,有兴趣的可以自己去试一试~
5. 配置网络
SONiC软交换机下,默认的端口使用的是10.0.0.x的子网(如下),而且都是eth pair:
1 | admin@sonic:~$ show ip interfaces |
这里,我们比较方便的做法是创建一个小的vlan,把我们的端口都包在里面(我们这里用的是Ethernet4和Ethernet8):
1 | # Remove old config |
这样,我们的vlan就创建好了,我们可以通过show vlan brief
来查看一下:
1 | admin@sonic:~$ show vlan brief |
然后,我们就可以给所有的主机配置一个10.0.0.x的IP地址了。
1 | # VPC1 |
好的,现在我们来Ping一下吧!
通了!
6. 抓包
上面,我们安装GNS3前,我们特意安装了Wireshark,这样我们就可以在GNS3里面抓包了。我们只需要右键点击图中我们想抓包的Link上,然后选择Start capture
,就可以开始抓包了。
稍等一下,Wireshark就会自动打开,实时的显示所有的包,非常的方便:
原创文章,转载请标明出处:Soul Orbit
本文链接地址:通过GNS3快速搭建本地SONiC Lab