Segment Routing(IPv6) - 3 隧道建立与业务应用

能够应用SRv6的业务很多,这里重点介绍L3VPN和EVPN VPWS

L3VPN:路由发布阶段/数据转发阶段

在路由发布阶段,首先需要在公网上进行一些必要的配置,比如需要现在公网上配置IGP,保证路由互通;其次需要在PE1和PE2之间配置BGP邻居;然后还需要分别在PE1和PE2上配置VPN实例,接入双方的CE1和CE2;之后是SRv6相关的配置。

我们需要在公网的各个设备上使能SRv6,配置Locator,假设我们在PE2上配置的Locator是A2:1::/64,配置这个Locator之后,设备会生成一个Locator路由A2:1::/64,路由会通过OGP对外扩散,所以PE1和P都可以通过这条路由到达PE2;由于PE2上有VPN实例,我们可以为VPN实例分配SID,假设为A2:1::B100,由于是IPV4 VPN,所以这个SID是End.DT4 SID; 然后是私网路由发布,现有CE2向PE2发布一条普通的IPv4路由,PE2从指定的接口上收到这条路由以后会转换为VPNv4路由,然后向PE1发布,发布的过程中,VPNv4路由会携带VPN SID,即End.DT4 SID A2:1::B100,PE1收到路由之后,会进行路由交叉,交叉到CE1所属的VPN实例,然后向CE1发布,这样CE1上就有CE2的路由了。

在数据转发阶段:首先,CE1向PE1发送一个普通的IP报文,这个报文封装的有自己的源地址和目的地址,PE1收到报文之后,会拿报文的目的地址在VPN实例路由表里查询,结果命中到一个路由和一个SRv6 SID A2:1::B100,PE1直接使用SID A2:1::B100进行数据封装,封装完SID之后,PE1需要将报文对外进行发送,PE1使用SID A2:1::B100进行查表,首先查的是My Local SID表,结果没有命中。然后查普通的IPv6路由表,结果命中一条路由A2:1::/64,这条路由是P设备发不过来的,因而PE1将报文发送给P,P设备执行同样的过程,将报文发送给PE2,PE2拿报文里的VPN SID A2:1::B100去查My Local SID表,结果命中,命中以后,PE2需要执行相关的指令,即B100字段隐含的指令,这个SID是End.DT4 类型SID,它隐含的指令动作是PE2需要去除外层的IPv6报文头,然后使用内层的目的地址,去End.DT4 SID对应的VPN实例路由表里查询,结果命中到一个路由表项,然后按照路由表项将数据报文转发给CE2,此时报文已经恢复成普通的IP报文,这样,数据转发过程就完成了。

我们可以看到,在这个转发过程中,我们没有使用IPv6 SRH信息,仅使用了一个VPN SID,这个SID是IPv6地址形式的,我们将只使用一个IPv6 SID就完成数据转发的过程,就叫做SRv6-BE(Best Effort),上面就是L3VPN over SRv6-BE的路由发布和数据转发过程。

EVPN VPWS over SRv6-BE与这个过程比较类似,所不同的是在路由发布阶段EVPN VPWS发布的是End.DX2 SID;其次是在数据转发阶段,封装的不是三层报文, 而是二层报文,这里封装的是源MAC和目的MAC信息,报文在公网上转发过程是类似的,只是在PE2上收到报文之后,用End.DX2 SID去查My Local SID表,结果匹配到一个表项,匹配之后,PE2需要执行End.DX2 SID对应的指令,即去除外层的IPv6报文头,按照End.DX2 SID绑定的出接口将报文转发出去,这就是EVPN VPWS over SRv6-BE的数据转发过程。

在SRv6-BE的数据转发过程中,IPv6报文里是没有SRH路径信息的,如果IPv6报文里包含SRH路径信息,我们称为SRv6-TE(Traffic Engineering),下面以L3VPN为例,讲解SRv6-TE的数据转发过程。

在此之前,需要建立一个公网的SRv6-TE隧道,SRv6-TE隧道可以使用End SID建立,也可以使用End.X SID建立,或者是二者混合也可以,这里我们以End SID为例来建立一个SRv6-TE隧道。

我们假设PE1的Locator为A1:1::/64,P设备的为A3:1::/64,配置完Locator之后都会形成路由,并在IGP域内泛洪,所以各个设备都是可以互相访问的;Locaor配置完成之后,可以在Locator范围之内配置End SID,假设P的为A3:1::1,PE2的为A2:1::1,End SID可以代表一个节点,比如A3:1::1就可以代表P节点,A2:1::1代表PE2节点,End SID生成之后,从PE1到PE2的SRv6-TE隧道就可以标识为(A2:1::1,A3:1::1). 现在假设从CE1到CE2发送一个报文,CE1发出的是一个普通的IP报文,首先是进行普通的IPv4封装,携带有源地址和目的地址。报文到PE1之后,PE1首先查找VPN实例路由表,命中一个SRv6的SID,PE1先封装SRv6 SID,我们假设是A2:1::B100,也是VPN SID,然后进行隧道封装,也就是形成一个SID stack(A2:1::B100,A2:1::1,A3:1::1),这个stack是三层的,所以SL=,当前指针指向的或与SID是A3:1::1,这样A3:1::1就作为当前IPv6报文的目的地址,注意这个SID是逆序压栈的,最下边的是第一个要执行的,封装完成之后,PE1使用IPv6目的地址A3:1::1查找IPv6路由表,进行最短路径转发,转发给P设备,P设备识别A3:1::1是自己的End SID,所以需要执行End SID对应的指令动作,即SL减1,然后将指针偏移向下一个SID A2:1::1,然后将IPv6目的地址字段更新为 A2:1::1,之后通过A2:1::1查找IPv6路由表香PE2转发;PE2收到报文之后,判断A2:1::1是自己发布的SID,所以需要执行这个SID对应的指令操作,SL继续减1,减为0,然后指针偏移向VPN SID A2:1::B100,PE2之后使用VPN SID查找My Local SID表,结果命中到一个End.DT4 SID,这时一个VPN SID,而且是自己生成的,所以PE2需要执行End.DT4 SID对应的指令动作,即解封装报文,去除IPv6报文头和SRH信息,
露出普通的IPv4报文,使用IPv4报文的目的地址查找VPN实例路由表,将报文对外转发,也就是转发给CE2,这样SRv6-TE数据转发过程就完成了。


上面讲的是L3VPN over SRv6-TE的数据转发过程,EVPN VPWS over SRv6-TE的数据转发过程与这个比较类似,所不同的是,
EVPN VPWS使用的是End.DX2 SID,数据封装的是二层报文,报文在公网上的转发过程都比较类似,只是报文到达PE2时,PE2
需要执行End.DX2 SID对应的指令,也就是解封装报文,去除外层的IPv6报文头和SRH报文头,按照End.DX2 SID绑定的出接口转发报文,转给CE2.
以上就是SRv6-TE的数据转发过程。

发布了204 篇原创文章 · 获赞 49 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/104527911