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网关的几种分类:
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网关
网站URL:http://cdiso.cn/article/gspceg.html