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

一.实验目的

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

OVS设置网关过程。

OVS配置流表过程。

二.实验准备

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

实验拓扑图如下:

三.实验步骤

1.构建网络拓扑。

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

说明:

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

mininet> 表示Mininet命令行模式。

创建拓扑

$> mn --topo single,2 --mac

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

查询状态

mininet> dump

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

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.96 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.412 ms

修改网络设置

mininet> h1 ifconfig h1-eth0 10.0.0.1/24 netmask 255.0.0.0
mininet> h2 ifconfig h2-eth0 20.0.0.1/24 netmask 255.0.0.0

测试网络状态如下:

mininet> h1 ping h2
connect: Network is unreachable

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

设置网关

mininet> h1 route add default gw 10.0.0.254 h1-eth0
mininet> h2 route add default gw 20.0.0.254 h2-eth0

测试网络状态如下:

mininet> h1 ping h2
PING 20.0.0.1 (20.0.0.1) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable

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

$>tcpdump -vvv -i s1-eth1
tcpdump: WARNING: s1-eth1: no IPv4 address assigned
tcpdump: listening on s1-eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
05:38:06.917012 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.0.254 tell 10.0.0.1, length 28
05:38:07.917134 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.0.254 tell 10.0.0.1, length 28

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

2. 设置OVS为网关

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

mininet> s1 ifconfig s1:0 10.0.0.254
mininet> s1 ifconfig s1:1 20.0.0.254

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

mininet> h1 ping 10.0.0.254
PING 10.0.0.254 (10.0.0.254) 56(84) bytes of data.
64 bytes from 10.0.0.254: icmp_seq=1 ttl=64 time=3.35 ms
64 bytes from 10.0.0.254: icmp_seq=2 ttl=64 time=0.669 ms

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

10.0.0.1 > 10.0.0.254: ICMP echo request, id 4284, seq 3, length 64
06:01:43.104097 IP (tos 0x0, ttl 64, id 3241, offset 0, flags [none], proto ICMP (1), length 84)
10.0.0.254 > 10.0.0.1: ICMP echo reply, id 4284, seq 3, length 64
06:01:46.114482 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.0.1 tell 10.0.0.254, length 28

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

3. 配置流表

处理ARP请求

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

mininet> sh ovs-ofctl add-flow s1 "table=0,priority=65535,arp,arp_tpa=10.0.0.254 actions=LOCAL"
mininet> sh ovs-ofctl add-flow s1 "table=0,priority=65535,arp,arp_tpa=20.0.0.254 actions=LOCAL"

处理ARP应答

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

mininet> sh ovs-vsctl -- --columns=name,ofport list Interface
name : "s1-eth2"
ofport : 2
name : "s1-eth1"
ofport : 1
name : "s1"
ofport : 65534

处理应答的流表如下:

mininet> sh ovs-ofctl add-flow s1 "table=0,priority=1,arp,nw_dst=10.0.0.1,actions=output:1"
mininet> sh ovs-ofctl add-flow s1 "table=0,priority=1,arp,nw_dst=20.0.0.1,actions=output:2"

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

10.0.0.1 > 20.0.0.1: ICMP echo request, id 5004, seq 1, length 64
06:28:06.932565 IP (tos 0x0, ttl 64, id 52645, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.1 > 20.0.0.1: ICMP echo request, id 5004, seq 2, length 64
06:28:07.932469 IP (tos 0x0, ttl 64, id 52646, offset 0, flags [DF], proto ICMP (1), length 84)

ICMP应答处理

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

mininet> sh ovs-ofctl add-flow s1  "table=0,priority=0,actions=resubmit(,1)"

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

mininet> sh ovs-ofctl add-flow s1 "table=1,icmp,nw_dst=10.0.0.1,actions=mod_dl_dst=00:00:00:00:00:01,output:1"
mininet> sh ovs-ofctl add-flow s1 "table=1,icmp,nw_dst=20.0.0.1,actions=mod_dl_dst=00:00:00:00:00:02,output:2"

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

mininet> h1 ping h2
PING 20.0.0.1 (20.0.0.1) 56(84) bytes of data.
64 bytes from 20.0.0.1: icmp_seq=1 ttl=64 time=1.29 ms
64 bytes from 20.0.0.1: icmp_seq=2 ttl=64 time=0.080 ms
64 bytes from 20.0.0.1: icmp_seq=3 ttl=64 time=0.089 ms

作者:何妍 

来源:51CTO

时间: 2024-12-03 17:23:55

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

模拟网关测试流量精简

模拟网关测试流量精简 mobile | • Oct 23, 2015 支付宝钱包客户端与服务器端通信中间有一层网关,使用Tengine搭建.网关层采用gzip压缩,大大减小了网络传输的体积.在做客户端RPC流量精简过程中,一般需要服务器端配合,边修改边测试比较繁琐.本地搭建了Tengine服务器,可以实现与网关一致的压缩情况,本地就可以直接做精简测试效果,十分方便.最后再推动服务器端按照优化后的情况修改. 搭建Tengine 为了实现100%真实的效果,没有采用Nginx,直接使用了Tengin

网关是什么?常见网关类型

1.网关是什么 按照不同的分类标准,网关也有很多种.TCP/IP协议里的网关是最常用的,在这里我们所讲的"网关"均指TCP/IP协议下的网关. 网关是什么呢?网关实质上是一个网络通向其他网络的IP地址.比如有网络A和网络B,网络A的IP地址范围为"192.168.1.1~192. 168.1.254",子网掩码为255.255.255.0:网络B的IP地址范围为"192.168.2.1~192.168.2.254",子网掩 码为255.255.2

WAP网站的网关服务器应用形式解析

服务器 1. 引言 目前WAP已成为信息技术(IT)领域内的热门话题,有关这方面的文章和论述了较多,涉及到WAP的方方面面,例如协议栈本身.WAP的各种应用等.的确,WAP实现了21世纪人们随时随地'上网冲浪'的梦想,是无线通信和Internet结合的最佳模式之一.WAP应用领域也相当丰富,其最大特点在于系统结构的灵活性和协议的开放性,WAP网关服务器(WAP GATEWAY SERVER)是其中的关键部分,它与移动网络的连接方式直接决定了其应用模式生效能.本文将对进一步加强WAP网关服务器功能

路由协议的常见分类

网关-网关协议(GGP) 核心网关为了正确和高效地路由报文需要知道Internet其他部分发生的情况,包括路由信息和子网特性. 当一个网关处理重负载而使速度特别慢,并且这个网关是访问子网的惟一途径时,通常使用这种类型的信息,网络中的其他网关能剪裁交通流量以减轻网关的负载. GGP主要用于交换路由信息,不要混淆路由信息(包括地址.拓扑和路由延迟细节)和作出路由决定的算法.路由算法在网关内通 常是固定的且不被GGP改变.核心网关之间通过发送GGP信息,并等待应答来通信,之后如果收到含特定信息的应答就

交换机中网络环路常见问题详解

    以太网中的交换机之间存在不恰当的端口相连会造成网络环路,如果相关的交换机没有打开STP功能,这种环路会引发数据包的无休止重复转发,形成广播风暴,从而造成网络故障. 一天,我们在校园网的网络运行性能监控平台上发现某栋搂的VLAN有问题--其接入交换机与校园网的连接中断.检查放置在网络中心的汇聚交换机,测得与之相连的100BASE-FX端口有大量的入流量,而出流量却非常少,显得很不正常.然而这台汇聚交换机的性能似乎还行,感觉不到有什么问题.于是,我们在这台汇聚交换机上镜像这个异常端口,用协议

网卡常见故障及解决办法

  第一步:硬件诊断 在 Windows 环境下运行BACS2,通过"诊断"选项卡,我们可以对 Broadcom NetXtreme Gigabit Ethernet 适配器的物理组件进行诊断测试.测试在选定的物理组件上连续执行.每次执行测试时,"通过/失败"列中的通过和失败次数会增加(注:运行这些测试时,网络连接暂时会断开). 测试项目详解: 测试项目1.控制寄存器:通过将各种值写入寄存器并验证结果,验证网络适配器寄存器的读写能力.适配器驱动程序使用这些寄存器执行

做网管必须要了解的基础知识

  虽然说网管是个苦逼的工作,但是做网管小编认为还是很有前途的,以后积累了经营,学的好可以去企业做网管,中国的企业需要这样的人才,想要做网管,就必须知道这些基础的网管基础知识. 1,计算机结构及工作原理.各种零配件的性能参数及主流品牌.计算机硬件的组装,CMOS设置,硬盘的分区,格式化.Windows98/2000/XP的安装.硬件驱动程序和应用程序的安装.Windows注册表的结构,备份及应用. 2,Windows的内核:CPU.内存.硬盘等分配.软硬件系统的优化设置,整机性能评测.计算机病毒

★RFC标准库_目录链接

RFC(Request For Comments)是一个国际标准化的数据库,记录了从计算机到互联网的海量标准协议.它是一个免费公开的IT标准文件分享平台,其内容也在不断增长,与时俱进.它与ISO等组织共同努力,朝着全球信息技术标准统一的目标前进. RFC1 主机软件RFC2 主机软件RFC3 文档规范RFC4 网络时间表RFC6 与 Bob Kahn 会话RFC10 文档规范RFC13 零文本长度的EOF信息RFC16 M.I.TRFC18 IMP-IMP和主机-主机控制联接RFC19_可用来降

《Cisco VPN完全配置指南》一1.3 VPN组件

1.3 VPN组件 Cisco VPN完全配置指南 既然您已对什么是VPN有了一个基本的理解,那么就让我们来讨论构成一个传统的VPN的组件.并不是所有的VPN实施都会包括部分或所有的这些组件.而且,基于您的安全策略所列出的需求,您可能并不需要所有的这些组件.因此,您需要检查您的安全策略来决定哪种VPN实施(或者不止一种)有必要的组件来满足您的安全策略的要求. 下面的小节将会讨论通常组成一个VPN实施中的某些更关键的组件部分.特别是,它们是由下面这些部分组成的: 验证: 封装方法: 数据加密: 数