成都网站建设设计

将想法与焦点和您一起共享

VXLAN网关

VXLAN网关

成都创新互联于2013年成立,是专业互联网技术服务公司,拥有项目网站设计制作、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元微山做网站,已为上家服务,为微山各地企业和个人服务,联系电话:18980820575

首先,补充一下现在流行的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网关的几种分类:

VXLAN网关

1. 二层VXLAN网关

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

2. 三层VXLAN网关

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

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

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

集中式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网关

为什么要分布式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协议动态学习。

VXLAN网关

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网关
本文路径:http://chengdu.cdxwcx.cn/article/gspceg.html