天天看点

Open vSwith模拟网关实现不同子网的互通

一.实验目的

本实验通过mininet构建子网,并使得ovs作为网关,来模拟子网间的互通。在实验的过程中,我们来学习一下内容:ovs构建子网过程。

ovs设置网关过程。

ovs配置流表过程。

Open vSwith模拟网关实现不同子网的互通

二.实验准备

实验环境我们使用mininet进行构建,建议到mininet官方下载最新的mininet虚拟机,本实验中虚拟机版本是mininet-2.2.1-150420-ubuntu-14.04-server-amd64,或者参考官方文档中介绍的native installation from source进行安装。

实验拓扑图如下:

Open vSwith模拟网关实现不同子网的互通

三.实验步骤

1.构建网络拓扑。

我们的目标是要让两个不同子网的主机能相互通信,可以先构建出两个主机,然后给主机设置不同子网。由于mininet虚拟的主机默认属于10.0.0.0/24,需要对主机网络进行设置。

说明:

$> 表示linux命令行的输入,权限为root。

mininet> 表示mininet命令行模式。

创建拓扑

说明:参数--mac是为了创建的host有更简单的mac地址,为后面流表创建提供方便。

查询状态

可以看出,默认的h1和h2是在同一网段,而且可以相互ping通。

修改网络设置

测试网络状态如下:

由于通过配置,h1和h2已经不在同一网段,当h1 ping h2时,包会转发到子网的网关来处理,但是由于当前环境中没有针对两个网段设置网关,最终状态为不可达。此时我们可以为主机设置网关。

设置网关

为了更直观的观察当前网络状态,在新的linux窗口使用tcpdump来查看h1 ping h2过程中包的信息。如下:

当h1-eth0发送arp包请求s1-eth1网关,而当前环境中没有网关设备,ovs无法进行转发;另外,如果ovs连接了控制器,如opendaylight,这可以利用它预设的arp proxy,让控制器来提供目标地址信息。因此icmp封包前,由于获取不到目标地址信息,而导致网络不可达。

2. 设置ovs为网关

如果实验连接了控制器,这可以通过控制器获得目标地址的信息,这部分可以单独通过另外的实验进行验证。由于试验中没有任何控制器,因此需要对ovs进行配置,使得其具有gateway的功能,能夠对arp进行回复。

测试网络状态,发现h1与网关可以ping通了。

从tcpdump窗口观察到的信息也显示相关信息如下:

但是,此时h1 ping h2还是不会通的。因为当前转发平面没有任何流对发过来的icmp包做转发。因此,我们需要添加一些流,使得整个网络最终运作起来。

3. 配置流表

处理arp请求

当网管的arp流到来后,将其交给本地的ovs处理。

处理arp应答

该应答回复目标地址的出口,比如将目标网络10.0.0.1的包通过出口端口1抓发出去。端口信息可以查询如下:

处理应答的流表如下:

处理了应答包后,实际上网络还是不能通。到目前为止,仅对arp的包做了相应的处理,而icmp的包为处理。

icmp应答处理

接下来需要对icmp的请求进行处理。为了使得流表表达更清晰,我们将icmp路由的处理放在另外一个table处理。 也就是在table(1)中设置一个最低优先级的流,将非arp的包丢给下一个流表处理。

在table(1)中,ovs的角色有点像router,我们需要修改icmp封包的目标mac地址。

最后,执行h1 ping h2,两个子网的主机能顺利ping通。

作者:何妍 

来源:51cto

继续阅读