VXLAN网关

VXLAN网关

 

 

首先,补充一下现在流行的OverLay技术

  • VXLAN: VXLAN是将以太网报文封装成UDP报文进行隧道传输,UDP目的端口为4798(可修改),标准5元组方式有利于在IP网络转发过程中进行负载分担;隔离标识VNI采用24比特来表示;所有的流量均被封装为payload转发。
  • NVGRE :NVGRE采用的是RFC 2784和RFC 2890所定义的GRE隧道协议。将以太网报文封装在GRE内进行隧道传输。隔离标识采用24比特来表示;与VXLAN的主要区别在对流量的负载分担上,因为使用了GRE隧道封装,NVGRE使用了GRE扩展字段flow ID进行流量负载分担,这就要求物理网络能够识别GRE隧道的扩展信息
  • STT :STT是无状态传输协议,通过将以太网报文封装成TCP报文进行隧道传输,隔离标识采用64比特来表示。与VXLAN和NVGRE的主要区别是在隧道封装格式使用了无状态TCP,需要对传统TCP协议进行修改以适应NVGRE的传输

//感觉大同小异,基本新技术的产生最多的也是从旧协议中添加扩展来支持新功能。

 

言归正传,VXLAN的网关:

 

为什么需要VXLAN网关?

    因为VXLAN的VTEP之间发现技术导致的,毕竟组播是不能适用于如今这么大规模的IDC设备的。

另外一部分原因是VXLAN的通信需求,即——同VNI VM之间的通信;不同VNI VM之间的通信;VM和外部服务器的通信

无论如何,VXLAN两种数据包是不变的:

  1. BUM(broadcast&unknown-unicast&multicast)包,就是新连接,需要寻找对应的VTEP
  2. 在已知VTEP和对端的MAC地址的时候,发送单播包

 

VXLAN网关的几种分类:

 

 

  1. 二层VXLAN网关

    就是普通的同VNI内的VM相互通信(同一个组播组互相查找)

  2. 三层VXLAN网关

    a.不同VNI之间的互访(同时有两个VNI的组播组,作为中间人)

    b.VM和外网server之间的互访(需要添加三层路由)

 

VXLAN网关的组网(集中式和分布式):

 

集中式VXLAN网关:

 

 

以地址为10.1.1.11的虚拟机为例,虚拟机与外界网络进行三层通信的过程为:

 

(1)虚拟机(10.1.1.11)跨网段进行三层通信时,先广播发送ARP请求消息,解析VXLAN IP网关(10.1.1.1)的MAC地址。//不管怎么样VM的包第一个给接入VTEP

 

(2)VTEP 1收到ARP请求消息后,添加VXLAN封装并发送给所有的远端VTEP。//其实,不在已经学习到的流表中的请求,都需要提交VXLAN网关

 

(3)VTEP 3解封装VXLAN报文后,发现ARP请求的目的IP为VXLAN对应的本地网关IP地址,即与VXLAN关联的VSI虚接口的IP地址,则学习10.1.1.11的ARP信息,并向虚拟机回应ARP应答消息。//这个时候它没有说明白,用的是哪个MAC回给VTEP1和VM

 

(4)VTEP 1收到ARP应答消息后,将该消息转发给虚拟机。

 

(5)虚拟机获取到网关的MAC地址后,为三层报文添加网关的MAC地址,通过VXLAN网络将二层数据帧发送给VTEP 3。//VTEP在第三步返回的应该是自己的MAC(????怀疑??求证20180430,已经确认。)

 

(6)VTEP 3解封装VXLAN报文,并去掉链路层头后,对内层封装的IP报文进行三层转发,将其发送给最终的目的节点。

 

(7)目的节点回复的报文到达网关后,网关根据已经学习到的ARP表项,为报文封装链路层头,并通过VXLAN网络将其发送给虚拟机。

 

属于不同VXLAN网络的虚拟机之间的通信过程与上述过程类似,不同之处在于一个VXLAN网络的集中式网关需要将报文转发给另一个VXLAN网络的集中式网关,再由该集中式网关将报文转发给本VXLAN内对应的虚拟机。

 

 

 

 

分布式VXLAN网关:

 

 

 

为什么要分布式VXLAN网关:

采用集中式VXLANIP网关方案时,不同VXLAN之间的流量以及VXLAN访问外界网络的流量全部由集中式VXLAN IP网关处理,网关压力较大,并加剧了网络带宽资源的消耗。而在分布式VXLAN IP网关方案中,每台VTEP设备都可以作为VXLAN IP网关,对本地站点的流量进行三层转发,很好地缓解了网关的压力。

在分布式VXLAN IP网关组网中,所有的分布式VXLAN IP网关(GW)上都需要创建VSI虚接口,并不同GW上的相同VSI虚接口配置相同的IP地址,作为VXLAN内虚拟机的网关地址。在分布式VXLAN IP网关上还需要开启本地代理ARP功能。边界网关(Border)上也需要创建VSI虚接口,并配置IP地址(和GW上不同)。

 

采用分布式VXLANIP网关组网方案时,三层流量通过查找ARP表项进行三层转发。ARP表项可以根据ARP协议动态学习。

 

 

 

1.相同VXLAN内不同站点的虚拟机通信过程

以VM 1访问VM 4为例,相同VXLAN内不同站点的虚拟机的通信过程为:

 

(1)VM 1广播发送ARP请求消息,希望获取VM 4的MAC地址。这个包被GW1收到。

(2)GW 1收到ARP请求消息后,学习VM 1的ARP信息,并代理应答该ARP请求,即:向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址

(3)VM 1学习到VM 4的MAC地址为GW 1上VSI虚接口10的MAC地址。

(4)GW 1将接收到的ARP请求消息中的源MAC地址修改为VSI虚接口10的MAC地址,对该消息进行VXLAN封装后,将其发送给VXLAN内的所有远端VTEP。//1.组播 2.不改ARP内容,还是询问VM4

(5)GW 2对VXLAN报文进行解封装后,学习VM 1的ARP信息(IP为10.1.1.11、MAC为GW 1上VSI虚接口10的MAC、出接口为接收该VXLAN报文的Tunnel接口),并将ARP请求消息中的源MAC修改为本地VSI虚接口10的MAC地址,在VXLAN 10的本地站点内进行广播。//同样是代理ARP

(6)VM 4收到ARP请求后,学习VM 1的ARP信息(IP为10.1.1.11、MAC为GW 2上VSI虚接口10的MAC),并发送ARP应答消息给本地网关GW 2。

(7)GW 2从VM 4收到ARP应答消息后,学习VM 4的ARP信息,将ARP应答消息中的源MAC修改为本地VSI虚接口10的MAC地址,并根据已经学习到的ARP表项,为ARP应答消息添加VXLAN封装后发送给GW 1。

(8)GW 1对VXLAN报文进行解封装后,根据收到的ARP应答消息学习VM 4的ARP信息(IP为10.1.1.12、MAC为GW 2上VSI虚接口10的MAC、出接口为接收该VXLAN报文的Tunnel接口)。

(9)通过上述步骤完成ARP信息的学习后,VM 1发送给VM 4的报文,根据已经学习到的ARP信息进行转发:首先发送给GW 1;GW 1对其进行VXLAN封装后,将其发送给GW 2;GW 2解封装后,将其发送给VM 4。

//可以看到的是除了代理ARP代答,并没有用到VSI口的IP,仅仅是用的MAC。所以相同的VSI IP也是可行的

 

2.不同VXLAN间不同站点的虚拟机通信过程

以VM 1访问VM 5为例,不同VXLAN的虚拟机的通信过程为:

 

(1)VM 1广播发送ARP请求消息,获取网关10.1.1.1的MAC地址。

(2)GW 1收到ARP请求消息后,学习VM 1的ARP信息,并向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址。//ARP代理

(3)VM 1将访问VM 5的报文发送给GW 1。

(4)GW 1在所有VXLAN内向本地站点和远端站点广播发送ARP请求,获取VM 5的MAC地址。ARP请求消息中的源IP地址为20.1.1.1、源MAC地址为本地VSI虚接口20的MAC地址。//GW1直接拿VNI20的IP做ARP,说明在这里它已经知道VM5属于VNI20

(5)GW 2从VXLAN隧道上接收到VXLAN报文,对其进行解封装后,学习GW 1的ARP信息(IP为20.1.1.1、MAC为GW 1上VSI虚接口20的MAC、出接口为接收该VXLAN报文的Tunnel接口),并将ARP请求消息中的源MAC修改为本地VSI虚接口20的MAC地址,在VXLAN 20的本地站点内广播该ARP请求消息。//注意:GW2改了MAC,但是没有改IP!!!因为IP是一样的!

(6)VM 5收到ARP请求后,学习GW 2的ARP信息(IP为20.1.1.1、MAC为GW 2上VSI虚接口20的MAC),并发送ARP应答消息给本地网关GW 2。

(7)GW 2从VM 5收到ARP应答消息后,学习VM 5的ARP信息,将ARP应答消息中的源MAC修改为本地VSI虚接口20的MAC地址,并根据已经学习到的ARP表项,为ARP应答消息添加VXLAN封装后发送给GW 1。

(8)GW 1对VXLAN报文进行解封装后,根据收到的ARP应答消息学习VM 5的ARP信息(IP为20.1.1.12、MAC为GW 2上VSI虚接口20的MAC、出接口为接收该VXLAN报文的Tunnel接口)。

(9)通过上述步骤完成ARP信息的学习后,VM 1发送给VM 5的报文,根据已经学习到的ARP信息进行转发:首先发送给GW 1;GW 1对其进行VXLAN封装后,将其发送给GW 2;GW 2解封装后,将其发送给VM 5。

 

疑问:未解决//20180503

//在GW1和GW2的交互过程中,他们都用到了VNI20的IP20.1.1.1,要注意的是他们发的是ARP包,虽然目的IP不一样,但是源IP是一样的,GW2收到了来自自己IP的,不同MAC的ARP请求包,还能正常处理,这是必须要这么做还是另有原因?

 

 

虚拟机与外部网络的三层通信过程

虚拟机要想与外部网络进行三层通信,需要在接入虚拟机的本地分布式VXLAN IP网关上指定流量的下一跳为Border,可以通过如下方式来实现:

 

·在本地分布式VXLAN IP网关上配置静态路由,指定路由下一跳为Border上同一个VXLAN对应VSI虚接口的IP地址。

 

·在本地分布式VXLAN IP网关上配置策略路由,通过apply default-next-hop命令设置报文的缺省下一跳为Border上同一个VXLAN对应VSI虚接口的IP地址。

 

以VM 1访问外部网络内的主机50.1.1.1为例,虚拟机访问外部网络的三层通信过程为:

 

(1)VM 1广播发送ARP请求消息,获取网关10.1.1.1的MAC地址。

(2)GW 1收到ARP请求消息后,学习VM 1的ARP信息,并向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址。//ARP代理

(3)VM 1将访问外部网络的报文发送给GW 1。

(4)GW 1接收到报文后,根据策略路由判断报文的下一跳地址为10.1.1.2。GW 1在VXLAN 10内向本地站点和远端站点广播发送ARP请求消息,获取10.1.1.2对应的MAC地址。//也就是说,GW1已经知道了这个目的地址是在外网

(5)Border对VXLAN报文进行解封装,学习GW 1的ARP信息,并通过VXLAN隧道回复ARP应答消息。//答复的是10.1.1.2的MAC地址

(6)GW 1对VXLAN报文进行解封装,并获取到10.1.1.2的ARP信息。

(7)GW 1根据获取到的信息为VM 1发送的报文封装链路层地址(10.1.1.2对应的MAC地址),并通过VXLAN隧道将报文发送给Border。

(8)Border对接收到的报文进行解封装后,对报文进行三层转发。

 

 

 

 

本篇的由来:

其实吧,我之前对VXLAN网关很不理解,看到了一个博文,终于豁然开朗,于是赶紧吧,转载过来,整理一下? 但是在写的过程中越来越不对劲,果然,在一个厂商的文档里找到了,原来是人家的手册。

转载好了就收工的想法戛然而止,看来还是要靠自己粗糙的文笔标注一下,不然显得草率。

 

 

2018/4/30

 

By Lukas

 

"Life is short, you need Python and no BB"

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值