当前位置: > 虚拟化 Virtualization > oVirt >

漫谈ovirt网络配置(一):Linux Bridge和逻辑网络

时间:2020-01-11 18:24来源:linux.it.net.cn 作者:IT

自下而上我们在网络世界中经常会接触到 hub(layer 1), switch(layer 2), router(layer 3)的概念,而bridge实际上就是switch,只不过他们出现在不同的场景中,但本质上是一个东西。 例如我们可以将我们的linux系统配置多块网卡,然后将其配置成网桥,然后就可以让它在网络中充当交换机的角色了,所以基本上 Bridge == Switch !(下面的描述中所说的网桥和交换机也就是同一种设备了)。

在开始 Linux Bridge之前我们先看看在物理世界中的 网桥是什么样的。

在上面这张图中,是一种很常见的网络拓扑结构,三台物理主机连接到同一个 交换机上,然后交换机与路由器相连,路由器最终通向Internet。 按照图中标出的序号,我们简单描述一下数据包是如何从 物理设备 发向 Internet的。

  1. 物理设备首先通过pNic(物理网卡)发出一个数据包
  2. 这个数据包(链路层帧)的链路层头信息中会包含 这块物理网卡的MAC地址作为源地址,将路由器LAN port的Mac地址做为目标地址,发送到 交换机的port 0上。
  3. 交换机通过查询转发数据库,将这个包从port 0 –> port 3, 再从port 3 –> route LAN port
  4. 路由器接收到这个包后将它发送到 Internet中去。

我们简单介绍了一下物理世界中 网桥的样子,而在虚拟化中,所有概念基本上是通用的。不同的是 上面例子中的物理网桥被 一个虚拟网桥代替了。假设上面例子中的三台物理机器都是虚拟机,它们运行在一台宿主机中,而宿主机只有一块物理网卡,所有虚拟机就可以借助这个虚拟化的网桥最终连接Internet中来,就像下面这样(下面图中仅仅有一台虚拟机,但多个应该是一样的连接示意),而这个虚拟化的网桥就是 Linux Bridge:

上面我们从基础概念上简单说明了网桥和Linux Bridge的概念,下面我们借助ovirt来做一个实验,来进一步理解 Linux Bridge和 ovirt 逻辑网络的使用。

首先我们看看如何在ovirt中建立一个逻辑网络,然后将它与主机网卡关联起来,如下:

然后我们使用这个逻辑网络为两个虚拟机分配虚拟网卡,如下:

我们配置了一个逻辑网络mytest,将它与主机的物理网卡enp130s0f0关联起来,然后使用这个逻辑网络为两个虚拟机W7_001和W7_002分别分配了一个虚拟网卡。

上面的过程实际上就是在主机上创建了一个名为mytest的 linux bridge,然后将物理网卡enp130s0f0加入这个网桥,然后使用这个网桥为虚拟机分配虚拟网卡。我们看看主机上的mytest和enp130s0f0现在的配置文件是什么样的。

现在我们分别在分配了虚拟网卡的两台虚拟机启动前后看看mytest这个网桥的状态:

我们看到在虚拟机启动之前,这个网桥上只有 主机的物理网卡一个interface,当我们启动虚拟机后多出两个vnetX的interface。

如果我们查看mytest 、enp130s0f0、vnet1、vnet2和那两台虚拟机的虚拟网卡的mac地址的话,会发现一些有意思的相同或相似,如下:

如果我们继续使用mytest来分配虚拟网卡,并启动这些虚拟机的话,会发现vnetX会继续增多。这些vnetX被称作tap interface,从它们与vNic的mac相似上我们可以猜测出 linux bridge(mytest)是使用它们来连接虚拟网卡的(具体细节我也不是很明白)。

这样我们就可以把这个虚拟网桥的完整拓扑结构画出来了,如下:

最后,我们在w7_001中ping w7_002,然后在主机中 抓取mytest、enp130s0f0、vnet1和vnet2,简单分析一下数据包的流向。

有一点需要注意的是,我在做ping操作之前已经进行了好多操作了,也就是这个虚拟网桥的过滤数据库已经形成了,如下查看:

所以当我ping的时候虚拟网桥是不需要flood数据包的,就跟物理交换机的原理一样。

好了,现在我们在w7_002上执行 ping -n 1 192.168.111.12, 我们这里仅仅发送一个ICMP包,然后在主机上分别对mytest、enp130s0f0、vnet1和vnet2 抓包:

tcpdump -i mytest -nn -s 0 -w  mytest.pcap

tcpdump -i enp130s0f0 -nn -s 0 -w  enp130s0f0.pcap

tcpdump -i vnet1 -nn -s 0 -w  vnet1.pcap

tcpdump -i vnet2 -nn -s 0 -w  vnet2.pcap

如果想把这些文件合并成一个文件的话,可以使用mergecap命令(yum install wireshark)。

然后用wireshark查看结果如下(有点看不清楚,可以右键在新标签页查看图片):

 

到此这个实验就结束了,今天我们简单说明了Linux Bridge和 ovirt 虚拟网络的一些关系,因为我本身理解的也不是很深入,如果要讲错的,希望你能在评论区告诉我。




(责任编辑:IT)
------分隔线----------------------------