通过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
2
3
sudo add-apt-repository ppa:gns3/ppa
sudo apt update
sudo apt install gns3-gui gns3-server

然后把你的用户加入到如下的组中,这样GNS3就可以去访问docker,wireshark等功能而不用sudo了。

1
2
3
for g in ubridge libvirt kvm wireshark docker; do
sudo usermod -aG $g <user-name>
done

如果你使用的不是Ubuntu,更详细的安装文档可以参考他们的官方文档

2. 准备SONiC的镜像

首先,我们需要一个SONiC的镜像。由于需要支持大量不同的厂商,而每个厂商的底层实现都不一样,所以最后每个厂商都会编译一个自己的镜像。这里因为我们是软件模拟交换机,所以我们需要使用基于VSwitch的镜像:sonic-vs.img.gz。

SONiC镜像的项目在这里,虽然我们可以自己去编译,但是速度实在有点慢,所以为了节省时间,我们可以直接去这里下载最新的镜像。只要找一个最新的成功的Build就行,在Artifacts中找到sonic-vs.img.gz,下载就可以了。

然后,我们来准备一下项目:

1
2
3
4
5
6
7
8
git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git
cd sonic-buildimage/platform/vs

# 将下载的镜像放在这个目录下,然后运行下面这个命令进行解压缩。
gzip -d sonic-vs.img.gz

# 下面这个命令会生成GNS3的镜像配置文件
./sonic-gns3a.sh

执行完成之后,我们运行ls命令就可以看到我们需要的镜像文件了。

1
2
3
4
5
6
7
r12f@r12f-svr:~/code/sonic/sonic-buildimage/platform/vs
$ l
total 2.8G
...
-rw-rw-r-- 1 r12f r12f 1.1K Apr 18 16:36 SONiC-latest.gns3a # <= 这个是GNS3的镜像配置文件
-rw-rw-r-- 1 r12f r12f 2.8G Apr 18 16:32 sonic-vs.img # <= 这个是我们解压出来的镜像
...

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的默认用户名和密码是adminYourPaSsWoRd。登录进去之后,我们就可以运行熟悉的命令,用show interfaces status或者show ip interface来查看网络的状态了。我们这里也可以看到,前面两个我们连接好了的Interface的状态都是up的了。

除了这种简单的网络以外,GNS3还可以创建非常复杂的网络,比如多层ECMP结构等等。这里就不多说了,有兴趣的可以自己去试一试~

5. 配置网络

SONiC软交换机下,默认的端口使用的是10.0.0.x的子网(如下),而且都是eth pair:

1
2
3
4
5
6
admin@sonic:~$ show ip interfaces
Interface Master IPv4 address/mask Admin/Oper BGP Neighbor Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Ethernet0 10.0.0.0/31 up/up ARISTA01T2 10.0.0.1
Ethernet4 10.0.0.2/31 up/up ARISTA02T2 10.0.0.3
Ethernet8 10.0.0.4/31 up/up ARISTA03T2 10.0.0.5

这里,我们比较方便的做法是创建一个小的vlan,把我们的端口都包在里面(我们这里用的是Ethernet4和Ethernet8):

1
2
3
4
5
6
7
8
9
10
11
12
13
# Remove old config
sudo config interface ip remove Ethernet4 10.0.0.2/31
sudo config interface ip remove Ethernet8 10.0.0.4/31

# Create VLAN with id 2
sudo config vlan add 2

# Add ports to VLAN
sudo config vlan member add -u 2 Ethernet4
sudo config vlan member add -u 2 Ethernet8

# Add IP address to VLAN
sudo config interface ip add Vlan2 10.0.0.0/24

这样,我们的vlan就创建好了,我们可以通过show vlan brief来查看一下:

1
2
3
4
5
6
7
admin@sonic:~$ show vlan brief
+-----------+--------------+-----------+----------------+-------------+-----------------------+
| VLAN ID | IP Address | Ports | Port Tagging | Proxy ARP | DHCP Helper Address |
+===========+==============+===========+================+=============+=======================+
| 2 | 10.0.0.0/24 | Ethernet4 | untagged | disabled | |
| | | Ethernet8 | untagged | | |
+-----------+--------------+-----------+----------------+-------------+-----------------------+

然后,我们就可以给所有的主机配置一个10.0.0.x的IP地址了。

1
2
3
4
5
# VPC1
ip 10.0.0.2 255.0.0.0 10.0.0.1

# VPC2
ip 10.0.0.3 255.0.0.0 10.0.0.1

好的,现在我们来Ping一下吧!

通了!

6. 抓包

上面,我们安装GNS3前,我们特意安装了Wireshark,这样我们就可以在GNS3里面抓包了。我们只需要右键点击图中我们想抓包的Link上,然后选择Start capture,就可以开始抓包了。

稍等一下,Wireshark就会自动打开,实时的显示所有的包,非常的方便:


原创文章,转载请标明出处:Soul Orbit
本文链接地址:通过GNS3快速搭建本地SONiC Lab