【MPLS VPN】inter-AS MPLS VPN Option C M

1.模型概述
  • 由于RR1及RR2都有所有的VPNv4的路由,因此可以直接在RR之间建立MP-eBGP邻居。
  • 在RR之间建立多跳的MP-eBGP邻居关系从而直接交互VPNv4前缀,ASBR不再需要维护VPNv4前缀,减轻设备负担的同时增强了网络的扩展性
  • 在RR上不进行Next-hop-self的配置
    –一种更优化的解决方案是,保留VPNv4前缀的Next_Hop为始发的PE
  • 在ASBR之间,需要使用IPv4 eBGP来交互携带了标签值的IPv4路由前缀
    –这需要对BGP进行功能上的扩展,使用send-label关键字
    –在分发标签的时候,只为PE的Loopback路由分发标签,因为他们是BGP路由的Next_Hop
2.模型详解
 
接下去我们来讲讲这个模型中,一些关键的技术点:
  1. RR1/RR2建立MP-eBGP邻居关系
  2. 路由控制层面的理解
  3. 外层标签的分发问题
  4. 数据转发层面的理解
  5. 数据转发层面的优化
  6. 其他可优化的任务
2.1 两个AS的RR建立MP-eBGP邻居关系
 

由于RR已经拥有本AS内的所有客户路由,因此直接在两个AS的RR之间建立一个MP-eBGP邻居关系,是一个不错的解决方案。那么RR之间要建立MP-eBGP邻居关系,首先两个RR得有到达对方Loopback接口的路由。(原创博文,红茶三杯 http://weibo.com/vinsoney 版权所有,转载请注明出处)

   
    由于AS100及200内部的Core IGP协议,已经有了Core内PE及P路由器(这里的RR)的Loopback路由,我们可能第一反应会想到,打通两个AS的IGP协议,但是这显然是不合理的,但却可以考虑用BGP来打通路由。因此如上图所示。蓝色的箭头表示了IPv4的BGP邻居关系的部署。
    详细看一下,PE1、RR1、PE-ASBR1都激活IPv4地址族并建立IPv4的iBGP邻居关系,同时宣告自己的Loopback口的网段进BGP。AS200 Backbone内的三台路由器同理。接下去两个ASBR之间维护一个IPv4-eBGP邻接,这样,两个AS的运营商路由器路由(其实主要就是各个路由器的Loopback地址)就都打通了,RR1及RR2彼此通过IPv4 BGP学习到了对方Loopback的路由,就可以建立MP-eBGP的邻居关系了。
2.2 路由控制层面的理解
 
    现在我们来看一下,在RR1及RR2之间,建立起MP-eBGP邻居关系之后,路由控制层面的问题。由于RR已经有了本AS内的所有客户路由,RR1-RR2之间建立好MP-eBGP后,这些客户路由就能够在RR的MP-eBGP连接上传播了(以CE2的路由8.8.8.8的传播为例来讲解):
 
  • CE2将客户路由8.8.8.8/32传递给PE2
  • PE2通过PE-CE路由协议学习到,并注入了BGP,然后形成VPNv4的前缀。这条VPNv4前缀是RD值200:8加上32位的8.8.8.8/32构成的,NEXT_HOP是PE2(的Loopback口IP),RT值为所设定的200:7,MP-BGP为这条前缀分配的标签是705。这条VPNv4前缀被PE2传递给了RR2。
  • RR2由于此刻已经和RR1建立了MP-eBGP邻居关系,因此它通过这条连接将VPNv4前缀传递给了自己的eBGP邻居RR1。注意我们看这条VPNv4前缀,NEXT_HOP现在变成了RR2,下一跳变了,VPN标签也要跟着变,所以前缀的标签就变成了RR2给该前缀分配的602。
  • RR1收到了这条VPNv4路由,将它传递给PE1。注意这时候,由于RR1收到的是一条eBGP路由,因此NEXT_HOP地址不变,仍然是指向RR2(的Loopback口地址),既然下一跳不变,VPN标签也没变,依然是602。
  • PE1收到了这条VPNv4前缀,剥去RD值得到32bits的IPv4前缀,又加上本地VRF配置了Import RT 200:7,因此BGP路由被装载进VRF路由表,最终被重发布到PE-CE的IGP路由协议中,从而被CE1学习到。
2.3外层标签的分发问题
 
    经过前面的配置,CE1及CE2都已经学习到了对方的路由。我们以CE1为例,现在假设CE1要发送数据包去往8.8.8.8,那么这个数据包到达了PE1,首先数据包的目的地8.8.8.8,已经获取到一个VPN标签.602对吧?这是由RR2的MP-BGP分配的,只有RR2才能理解,那么你要将这个数据包一路传到RR2,还需要套一层外壳,也就是LDP标签吧?这个标签就需要RR1来给(实际数据转发的下一跳设备),而需要使用的是6.6.6.6(NEXT_HOP地址)的标签。遗憾的是在RR1的路由表里,此刻6.6.6.6的路由是条BGP的路由,因此它不会为6.6.6.6路由分配标签,那么数据包在PE1这,它就不知道怎么处理了。
    为了解决这个问题,我们得让AS100的Backbone内看到的AS200 Backbone内的那些路由(主要是PE2及RR2的Loopback路由)为IGP的,只有是IGP的路由LDP才会分配标签。所以我们在ASBR1上将从IPv4 eBGP邻居ASBR2学习到的BGP路由重发布进OSPF 100。如此一来,在PE1、RR1上,获取到的关于RR2、PE2等设备的loopback路由就是OSPF的了,那么LDP标签分发就没问题了。
    但是,由于ASBR1及ASBR2是重发布的部署点,在他们路由表里,关于对端AS Backbone内的路由可仍然是BGP的,于是乎,ASBR1不会为这些BGP路由分配标签并且将映射消息发送给RR1,那么在RR1这里,又是untagged。在RR2那同理。为了解决这个问题,我们得利用一个特性。这个特性通过在ASBR1及ASBR2的ipv4 vrf进程里完成,例如在ASBR1上,neighbor 10.1.45.5 send-label,在ASBR2上neighbor 10.1.45.4 send-label。如此一来,ASBR1和ASBR2的邻居关系首先会重建,然后在Open消息中会协商新的ability值,这样ASBR1及ABSR2的BGP就得到了多协议的扩展。首先的变化是,他们都能够为本地路由表里的BGP路由分配标签了,同时也会将为前缀分配的标签值通过扩展的BGP在两个ASBR之间互相通告。(原创博文,红茶三杯 http://weibo.com/vinsoney 版权所有,转载请注明出处)

这样一来数据层面的转发工作就完全没问题了:

2.4数据转发层面的优化
 
我们来考虑这样一种情况:
 
我们增加了两条链路,并且激活了OSPF及LDP。
那么这样一来,当1.1.1.1的用户去访问8.8.8.8的时候,流量是怎么传输的呢?
 

    我们看到,事实上,这两个RR,都在流量往返的过程中,各承担一次数据转发的负担。而从BGP网络的设计角度来说,我们更愿意或者说更希望RR只是扮演一个路由控制层面的把控角色,而不承担具体的用户数据转发工作。那么实现的方法很简单:
 
    我们在RR2上,VPNv4地址族内做配置:
    Neighbor3.3.3.3 next-hop-unchanged
这样一来,RR2传递VPNv4路由给自己的MP-eBGP邻居RR1的时候,不会改变VPNv4前缀的NEXT_HOP属性,依然保持为7.7.7.7(始发这条VPNv4路由的PE2)。那么这样一来:
 
2.5其他可优化的任务
 
1.控制重发布到Backbone IGP内的BGP路由
 
    在前面的讲解中,为了让AS100及AS200内,拥有对端AS内关键设备的、IGP的Loopback路由,使得LDP能够良好的工作,我们在ASBR1及ASBR2上,将BGP路由重发布进了OSPF 100。这是存在风险的,因为BGP携带的路由前缀往往是非常庞大的。另一方面,实际上,譬如说AS100内的路由器,它们真正需要的也就是RR2的Loopback6.6.6.6的路由,以及PE2的Loopback7.7.7.7的路由,其他路由在本环境中意义不大。
    那么完成可以在PE2及RR2上、PE1及RR1上,在通告自己Loopback路由进BGP的时候,打上community,然后在ASBR重发布过程中,利用community来做路由过滤。(原创博文,红茶三杯 http://weibo.com/vinsoney 版权所有,转载请注明出处)
先定义一个route-map
route-map setCommu
  set community 100:1
    那么这样一来,我们在BGP到OSPF的重发布过程中,就可以利用这个Community值来执行路由的过滤。同样的,另一侧的网络配置类似。
 
2.控制BGP路由更新及标签分发
 
    在前面的配置中,我们在ASBR1及2之间使用send-label配置,使得BGP为BGP路由分发标签。拿ASBR1举例说,实际上ASBR1在将本AS内的BGP路由通告给ASBR2的时候,所有的被通告的BGP路由都捆绑了标签,那么对于ASBR2来说,实际上就加重了设备的负担,因为其实我们只是需要几个关键性的路由的标签。
    那么我们可以在前面配置的基础上,利用已经设定好的Community值,来做一些策略。
    假设我们在PE1及RR1通告自己Loopback路由进BGP的时候打上了Community值100:1,那么我们可以在ASBR1上进一步配置:
Ip community 2 permit 100:1
route-map setLabel permit 10
  match community 2
  set mpls-label                     !!只对携带了community值100:的路由分发标签
route-map setLabel permit 20         !!其他路由直接放行,不给标签
!
router bgp 100
  address-family ipv4
    neighbor 10.1.45.5 route-map setLabel out
ASBR2上的部署方式类似。
    这样一来,ASBR1只会对匹配了Community值100:1的那些BGP路由分发标签,然后传递给ASBR2,其他BGP路由直接放行,不携带标签。
    借助这个方法,我们可以改良一下前面提到的“1.控制重发布到Backbone IGP内的BGP路由”的方法。在ASBR2上,直接用一条route-map,match mpls-label命令可以帮助我们抓取那些ASBR1传递过来的、带了标签的BGP路由,我们只需要将这些路由注入到Backbone的OSPF 100中。
route-map matchLabel
  match mpls-label
!
router ospf 100
  redistribute bgp 200 subnets route-map matchLabel
另一边的配置类似。所以其实也就是个match mpls-label和set mpls-label的玩意儿。
3.实验示例
 
3.1实验描述
 
1.环境描述
  • 设备的互联地址空间采用10.1.xy.0/24,其中xy为设备编号,x为小值,y为大值,IP地址最后一个八位组为本设备编号。
  • 所有设备的Loopback0地址空间为x.x.x.x/32,x为设备编号
3.2实验过程
 
1.完成设备的基本配置(hostname、IP等)
这个就不说了吧?
 
2.完成AS100及AS200内MPLS VPN Backbone的IGP配置
这里采用OSPF,进程号都用100。PE1、RR1、ASBR1及PE2、RR2、ASBR2都宣告自己的Loopback0口进OSPF进程100,以便Backbone内IGP互通。
这部分配置也相对比较简单不再粘贴脚本了。
 
3.完成AS100及AS200 Backbone的LDP配置 
LDP routerID及label range、接口激活LDP。
例如PE1的配置如下:
mpls ldp router-id loopback 0
mpls label range 200 299            !!因为PE1是R2,按接口编号来设定标签范围
interface eth0/1
  mpls ip 
其他的也不再赘述了。
4.完成IPv4 BGP邻居关系的建立
建立IPv4 BGP邻居关系的目的是为了打通AS100及AS200的Backbone内的路由,使得两个RR之间能够建立起MP-eBGP邻居关系,另外也为后续的数据转发层面的优化做好准备。BGP邻居关系请见下图:
 
PE1的配置如下:
router bgp 100
 no bgp default ipv4-unicast
neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
  no synchronization
  network 2.2.2.2 mask 255.255.255.255
  neighbor 3.3.3.3 activate
  no auto-summary
 exit-address-family

RR1的配置如下:
router bgp 100
 no bgp default ipv4-unicast
neighbor 2.2.2.2 remote-as 100
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 4.4.4.4 remote-as 100
 neighbor 4.4.4.4 update-source Loopback0
 !
 address-family ipv4
  no synchronization
  network 3.3.3.3 mask 255.255.255.255
  neighbor 2.2.2.2 activate
  neighbor 2.2.2.2 route-reflector-client
  neighbor 4.4.4.4 activate
  neighbor 4.4.4.4 route-reflector-client
  no auto-summary
 exit-address-family
ASBR1的配置如下:
router bgp 100
 no bgp default ipv4-unicast
neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback0
 neighbor 10.1.45.5 remote-as 200
 !
 address-family ipv4
  no synchronization
  network 4.4.4.4 mask 255.255.255.255
  neighbor 3.3.3.3 activate
neighbor 3.3.3.3 next-hop-self
  neighbor 10.1.45.5 activate
  no auto-summary
 exit-address-family
AS200内设备的配置类似,不再赘述。
    完成这个阶段的配置后,通过IGP实现了Backbone内的路由可达性;通过BGP实现了AS之间的路由可达性。但是我们留意到在PE1、RR1、ASBR1去往对端AS内的那些路由都是BGP的,而LDP是不会为BGP路由分配标签的,那么这样就会出问题。举例说,RR1上,学习到的6.6.6.6路由(也就是RR2的Loopback路由)是BGP路由,而当PE1要发送数据去往CE2,那么如果VPNv4路由的下一跳是6.6.6.6,PE1就需要关于6.6.6.6的标签,但是RR1是不可能为BGP路由6.6.6.6分配标签并且通告给PE1的,这样LDP的标签分发就出问题了。
2.在ASBR1及ASBR2上做BGP到OSPF 100的路由重发布
 
    这个重发布的目的,是使得两个AS的Backbone内的路由器学习到的、关于对端AS Backbone内的路由为IGP路由(OSPF路由),从而才能促使LDP分配标签,否则VPN数据传输的时候外层标签的分配就会有问题。 
ASBR1的OSPF进程100的配置如下:
router ospf 100
 redistribute bgp 100 subnets
 network 4.4.4.4 0.0.0.0 area 0
 network 10.1.34.4 0.0.0.0 area 0
ASBR2的配置类似。
    完成这个配置后,在PE1及RR1上,看到的关于5.5.5.5、6.6.6.6、7.7.7.7的这些Loopback路由就是OSPF外部路由了。但是还有一个问题,对于ASBR1来说由于他是路由重发布的部署点,这些AS200内的Loopback路由仍然是BGP的,同样的对于ASBR2来说,这些AS100内的Loopback路由也特么仍然是BGP的,那么LDP默认情况下是不会对路由表中的BGP路由去分发标签的。如此就造成了RR1上,关于5.5.5.5、6.6.6.6、7.7.7.7这些路由在LFIB中都是untagged的问题,RR2当然也有类似的问题。
3.在ASBR1及ASBR2之间完成send-label的配置
 
为了解决上面所述的问题,我们在ASBR1上增加如下配置:
 
router bgp 100
  address-family ipv4
    neighbor 10.1.45.4 send-label
ASBR2的配置增加如下:
router bgp 100
  address-family ipv4
    neighbor 10.1.45.5 send-label
    如此一来,ASBR1及ASBR2的IPv4 BGP得到扩展,能够为BGP路由分配并传递标签映射,以解决外层标签的问题。例如ASBR2会为本地的BGP路由5.5.5.5、6.6.6.6、7.7.7.7分配标签,并且将这些标签联同前缀通过BGP传递给ASBR1。那么在ASBR1上:
R4-ASBR1#sh mpls forwarding-table 
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
400        300        2.2.2.2/32       0             Et0/0      10.1.34.3   
401        Pop Label  3.3.3.3/32       0             Et0/0      10.1.34.3   
402        Pop Label  10.1.23.0/24     0             Et0/0      10.1.34.3   
403        Pop Label  5.5.5.5/32       0             Et0/1      10.1.45.5   
404        500        6.6.6.6/32       0             Et0/1      10.1.45.5   
405        501        7.7.7.7/32       0             Et0/1      10.1.45.5   
406        Pop Label  10.1.45.5/32     0             Et0/1      10.1.45.5
    ASBR1收到了ASBR2捆绑的标签,同时,它自己也为这些BGP路由分发了本地标签,同时通过LDP传递给了RR1。这样一来相关的外层标签问题就得到了解决。
4.完成VRF的配置,以及PE-CE路由协议的配置
 
CE1及CE2的配置这里就不再赘述了,都是常规的OSPF配置。
PE1的配置如下:
ip vrf cisco
 rd 100:1
 route-target export 100:2
 route-target import 200:7              !! 这个值对应 PE2上的RT export值
!
interface Ethernet0/0
 ip vrf forwarding cisco
 ip address 10.1.12.2 255.255.255.0
!
router ospf 1 vrf cisco
 network 10.1.12.2 0.0.0.0 area 0
PE2的配置如下:
ip vrf cisco
 rd 200:8
 route-target export 200:7
 route-target import 100:2
!
interface Ethernet0/1
 ip vrf forwarding cisco
 ip address 10.1.78,7 255.255.255.0
!
router ospf 1 vrf cisco
 network 10.1.78.7 0.0.0.0 area 0
5.完成MP-BGP邻居关系的建立
 
PE1的配置如下:
router bgp 100 
  neighbor 3.3.3.3 remote 100
  neighbor 3.3.3.3 update-source loopback 0
  address-family vpnv4
neighbor 3.3.3.3 activate
RR1的配置如下:
router bgp 100 
  … …省略部分配置
  neighbor 6.6.6.6 remote 200
  neighbor 6.6.6.6 update-source loopback 0
  neighbor 6.6.6.6 ebgp-multihop
  address-family vpnv4
    neighbor 2.2.2.2 activate
    neighbor 2.2.2.2 route-reflector-client
    neighbor 4.4.4.4 activate
    neighbor 4.4.4.4 route-reflector-client
    neighbor 6.6.6.6 activate                               !! RR2
ASBR1的配置如下:
router bgp 100 
  … …省略部分配置
  address-family vpnv4
    neighbor 4.4.4.4 activate
AS200内相关设备的配置类似,这里不再赘述。
6.完成PE1及PE2上MP-BGP与PE-CE的双向重发布
 
PE1的配置如下:
router ospf 1 vrf cisco
  redistribute bgp 100 subnets
router bgp 100
  address-family ipv4 vrf cisco
    redistribute ospf 1 vrf cisco match internal external
PE2的配置如下:
router ospf 1 vrf cisco
  redistribute bgp 200 subnets
router bgp 200
  address-family ipv4 vrf cisco
    redistribute ospf 1 vrf cisco match internal external
到此,我们的大部分配置都已经完成了,可以测试一下从CE1去traceroute 8.8.8.8。
下面就是一个典型的数据层面的传输过程(标签值实际在做的时候可能和下图不大一样,各有各的情况吧)。
7.数据转发层面的优化
 
    前面已经说了如果在PE1-ASBR1;PE2-ASBR2之间增加如图的链路并激活OSPF及LDP连接,那么数据转发层面存在不优化的现象,也就是两台RR会承担一部分的数据转发任务。
优化的方式前面也说了,我们直接看配置:
RR1的增补配置如下:
router bgp 100
  address-family vpnv4
neighbor 6.6.6.6 next-self-unchanged
RR2的增补配置如下:
router bgp 100
  address-family vpnv4
neighbor 3.3.3.3 next-self-unchanged
那么现在我们再去CE1上traceroute 8.8.8.8就会发现变化了。
8.控制BGP路由标签的分发以及控制BGP到OSPF的路由重发布
现在我们面临两个需要优化的地方:
  • 在ASBR1及ASBR2上我们使用send-label关键字扩展了BGP,使得两台ASBR能够为BGP路由分发标签,并且传递给对端。而这种分发标签的行为,会针对其本地的所有的BGP路由进行标签的分发,实际上,我们仅仅需要几个关键的Loopback路由的标签来完成数据转发任务,例如PE1、PE2、RR1、RR2的Loopback口路由,而对于其他的路由,实际上是不需要标签的。那么能否只为这些关键性的BGP路由来分发标签呢?
  • 再者,我们在ASBR2及2上都做了BGP到OSPF的重发布,这实际上是存在巨大的风险,因为这无疑会加重OSPF的负担,毕竟BGP是用于携带大量路由前缀的,那么我们能否控制重发布,只将那些关键性的路由(实际上就是前面一点所说的,需要分发标签的BGP路由)注入到OSPF中呢?
实现的思路是这样的,我们拿AS100内的路由来说。
  • 首先关键性的路由是PE1及RR1的Loopback,因为他们都是有可能成为VPNV4前缀NEXT_HOP地址的路由。我们在PE1及RR1上,配置一个route-map用于设置community值100:1,然后在宣告自己Loopback路由的时候进行关联。
  • 在ASBR1上,现在要向ASBR2来传递本AS内的那些BGP路由了,我们也用一个route-map,匹配前面设置了100:1 community值的路由,然后使用set mpls-label关键字,让BGP只为这些感兴趣的路由分发并传递标签,然后其他的BGP路由放行即可。
  • 而在ASBR2上,收到了ASBR1传递过来的路由,其中关键性的那几条路由是携带了标签的,那么我们只需要将这些带了标签的路由,重发布进OSPF即可对吧?所以也用一个route-map,match mpls-label这条命令可用于匹配携带了标签的IPv4 BGP路由前缀,然后在BGP到OSPF的重发布的时候调用这个route-map即可。
顺便说一句,从AS200到AS100的路由发布原理是一样的,思路换一下就行。
在PE1上的增补配置如下:
route-map setCommu permit 10
 set community 100:1
!
router bgp 100
address-family ipv4
network 2.2.2.2 mask 255.255.255.255 route-map setCommu
neighbor 3.3.3.3 send-community                                !!注意,一定要配
 
在RR1上增补的配置如下:
route-map setCommu permit 10
 set community 100:1
!
router bgp 100
address-family ipv4
network 3.3.3.3 mask 255.255.255.255 route-map setCommu
neighbor 4.4.4.4 send-community
在ASBR1上增补的配置如下:
ip community-list 1 permit 100:1                      !!匹配带了community 100:1的路由
!
route-map setLabel permit 10
 match community 1
 set mpls-label                                       !!让BGP为这些路由分发标签
route-map setLabel permit 20                          !!放行其他路由
!
router bgp 100
address-family ipv4
    neighbor 10.1.45.5 send-community
    neighbor 10.1.45.5 route-map setLabel out!!应用route-map
在ASBR2上增补的配置如下:
ip community-list 1 permit 100:1
route-map matchCommu permit 10
 match community 1
!
router ospf 100
 redistribute bgp 200 subnets route-map matchLabel
另一边的配置类似,不再赘述了。

发布者

小挨踢

一名89年出生的女网络工程师的博客,20180319小挨踢的博客来啦!

发表评论