说明
对于VPN这个名词来说,它只是一个概念,就像GRE它就是一个典型的VPN,它通过internet形成了一个点到点的隧道连接,然后完成两个点直接的私网路由传递,因为这个传递过程中数据都是以明文发送的,虽然有IPsec这些加密协议存在,但是对于有些客户来说,他们觉得维护IPsec VPN是个头疼的事情,而MPLS正好提供了一个天然的隧道功能,而且流量控制转发和多协议的支持,成为ISP主推的广域网服务,它参与进客户的路由,并且大量的实施都是由ISP来完成,客户只需要极少的配置 就能完成多个站点之间的互联,它就是MPLS VPN。
在MPLS VPN出现之前,Peer-to-Peer VPN这个模型早就出现了,就是上面提到的Shared Router 和 Dedicated Router。
Shared Router 实现方式是不同站点通过不同路由协议 或者相同路由协议的不同进程来学习客户的路由,然后R-PE1将这些路由在公网上进行传递,R-PE2作为接收端存在,它用ACL过滤掉不需要的路由在发送给相应的站点。这样安全性和实用性都非常不好。
Dedicated Router 它通过多个PE单独与客户站点连接,虽然解决了ACL的问题,但是对于ISP的投资代价太大。而且如果不同客户之间存在相同的网段,那么就会变得很麻烦。
需要解决的问题有
1、在同一台PE行如何区分不同的客户站点的相同路由
2、避免在公网路由表中传递客户的路由
3、数据包转发问题
1、相同路由问题的解决:RD:Router Distnguisher 路由区分符,它的出现解决了相同路由的问题,它会为每一条路由加上一个前缀信息,用这些前缀来区分它们,而不关心地址的问题。
RD由64bit标识,它加上32位的IP地址构成了一个全新的地址,就是VPNv4地址。我们常用的表示方式有 ASN:nn,ASN通常用BGP的AS来表示,nn为任意值,ASN:NN都是32Bit,所以我也用ip-address:nn方式来表示,通常用BGP的RID来做IP address。
VPNv4需要在路由协议中传递,是必要对路由协议进行更改,让它支持VPNv4这种格式,而适合的就有ISIS、EIGRP、BGP、因为它们都有TLV字段,实现比较容易,ISIS和EIGRP 存在问题是,ISIS是从ISO 集成过来的,对于IP的扩展性不是非常好,EIGRP 我们都知道是cisco私有的,所以也考虑不了。 BGP成为了最好的选择,因为BGP是通过TCP建立会话的,所以可以存在跨越设备建立邻居关系,那么中间的P路由器完全可以不知道客户路由,减轻了路由器的负担,并且BGP传递路由条目比IGP协议要大的多,而且效率更好,最后就是BGP有很好的扩展属性,能对路由进行透明的传递。我们通常把这种BGP,称为MP BGP。
2、VRF:虚拟路由转发器,它相当于把一个路由器虚拟成多个路由器一样,每个VRF都有一张独立的路由表,不同的路由表中存放着不同客户的路由。而对应的我们公网路由表被成为global 路由表。通过MP-BGP来传递这些路由。因为我们会把VRF关联进接口、路由协议中,使得它们能够正确认识。
3、比如右边的Site_1和Site_2都是相同的网段,192.168.1.0/24 ,这时候当左边的Site_1想要访问右边的Site_1的192.168.1.0网段时候,R-PE2如何决定是交给Site_1还是Site_2呢,那么就是RT,分为Export RTs :发出的RT值属性,如果对方import设置为一样,那么就会接收这VPN路由 Import RTs :收到的RT值属性,将一致的压入VPN路由表中 。export和import是可以存在多个的,这在后面用于过滤和控制站点访问时候使用。
假设左边Site_1 的export为1:1,而右边的Site_1的import为1:1,右边的Site_1就能收到关于左边Site_1的路由,相对应的,右边Site_1的Export为1:1,左边的export为1:1的时候,这时候两边的路由彼此都会收到了,这种情况下,我们使用both 1:1就能把export和import设置为1:1。
并不是所有的需求都是这么固定的,加入这个拓扑,Site_1和Site_2之间不允许直接访问,必须通过Center进行转发,可能Center端有防火墙和集中化的策略管理。这时候需要一个合理的RT设置来解决这个问题。这时候Cener端只需要压入两边站点的RT,而两边站点只需要压入Center的标签就可以完成此操作了。比如下面这样。
Cener SIte_1 Site_2
export :2:2 1:1 1:1
import:1:1 2:2 2:2
RT是需要BGP的扩展属性来传递的,是个可选属性,所以在BGP配置的时候,需要手工指定传送这个属性给邻居。
它们共同的特性组成了MPLS VPN。分析control plane 和Date Plane的传输。CE和PE之间能够运行的路由协议有static、RIPv2、EIGRP、OSPF、BGP、ISIS,关于ISIS只有在IOS 15.0以上的版本才支持。
首先分析下这拓扑,左边PE的VRF CustomerA连接的是CE1-A,VRFCustomerB连接的是CE1-B,右边PE的VRF CustomerA连接的是CE2-A,VRF CustormerB连接的是CE2-B,但是发现右边的RT只有import 1:100。RT是属于控制层面的东西。关于VRF是关联了接口和路由协议的,在这个图中,还进行了重分布的动作,看3的虚线,VRF路由到MPBGP的重分布动作,右边的4虚线是将MPBGP的路由导入进VRF中。 如果看明白了这些,那么分析就简单多了,这个拓扑只是说单向更新。
假设这个拓扑中运行的是RIP协议,这时候CE1-A更新一个172.16.10.0/24的网段到达PE后,PE的接口和路由协议关联了VRF,所以当PE的RIP中收到关于这条172.16.10.0/24的路由后,会为这条路由添加一个RD为1:100,RT export和import都为1:100,然后由MPBGP传递给右边的PE,右边的PE收到以后,会查看这些路由属性传递给哪些VRF,区分的办法当然是通过RT了,左边的路由条目export为1:100,而右边的VRF CustromerA和B import都是1:100,所以会把172.16.10.0/24的网段更新到CE2-A和CE2-B中。 这里估计是图的误点,把右边的VRF CustomerB的RT写成了1:100,因该是1:101才对,这样收到的是192.168.10.0/24这个网段的信息了。
整个流程就是最图下面的画出来了,CE1-A通过IGP协议把路由更新给R-PE1-AS1,R-PE1-AS1通过VRF收到以后,会打上RD和RT,重分布进MPBGP中,然后传递给R-PE2-AS1,R-PE2-AS1收到以后,会重分布进这VRF关联的路由协议中,然后更新给CE2-A。
这里有几个要点1、MPLS domain里面运行了IGP协议和MPLS,那么它们内部网络的标签信息是连续的。通常情况下我们MPBGP是用loopback建立的IBGP邻居。
2、MPLS VPN标签的分发,首先内层标签怎么来,这里有个规则就是当MPBGP更新这条路由给邻居的时候,如果下一跳地址改变的话,就会为这条路由分配标签。这里CE1-A把路由传递给R-PE1-AS1后,下一跳肯定是CE1-A的地址,但是它用MPBGP传递给R-PE2-AS1后,下一跳地址就变成了R-PE1-AS1的更新源地址了,这就是改变了下一跳,所以R-PE1-AS1会为172.16.10.0/24这条路由分配标签给R-PE2-AS1。这个标签通常也被称为私网标签,因为是私网VPN的路由。 我习惯叫内层标签。
3、R-PE2-AS1有了关于CE1-A 172.16.10.0/24的标签信息,但是P路由器并没有这些信息,因为它没有建立任何MPBGP关系。这时候R-PE2-AS1就需要打上外层标签才能保证P路由器能正常转发。外层标签怎么来,在这里R-PE2-AS1的MPBGP下一跳肯定是R-PE1-AS1的更新源,我们通常用loopback口建立,它在MPLS domain中是宣告进IGP的,所以关于它的标签信息,整个MPLS Domain中都会有。外层标签的选取,就是根据R-PE2-AS1的MPBGP的下一跳是谁,就选取关于它的标签信息作为外层标签。
关于Date Plane就是标签的置换了,这个到实验部分看现象分析比较明了。
MPLS VPN 部署的几个要点:
1、ISP内部的IGP是正常的
2、MPLS LDP 邻居关系保证正常
3、PE与PE之间的BGP关系正常建立 (MP-BGP)
4、在PE上的VRF是否正常,接口转换了否
5、路由重分布 PE-CE之间的路由两个方向 CE与PE之间的IGP 需要导入进PE的BGP中,
BGP的路由要注入IGP中。都是在PE上完成 双向 (BGP除外,完成在address-family中)
6、如果PE有静态路由看是否正确
Site-A和Site-B之间通过静态来实现通信,Site-C和Site-D通过RIP ,后续改为EIGRP。在MPLS VPN中就static RIP和EIGRP是简单的机制,OSPF 和BGP 涉及有点复杂,后续在做总结。这里MPLS Domain中每个路由器都有RID。
先基本的配置
R-Site_A(config)#int lo 0
R-Site_A(config-if)#ip add 1.1.1.1 255.255.255.255
R-Site_A(config-if)#ip add 192.168.1.1 255.255.255.0
R-Site_A(config-if)#no shu
R-Site_C(config)#int lo 0
R-Site_C(config-if)#ip add 3.3.3.3 255.255.255.255
R-Site_C(config-if)#int s1/1
R-Site_C(config-if)#ip add 172.16.1.1 255.255.255.0
R-Site_C(config-if)#no shut
R-PE1(config)#int lo 0
R-PE1(config-if)#ip add 11.11.11.11 255.255.255.255
R-PE1(config-if)#int s1/1
R-PE1(config-if)#ip add 12.1.1.1 255.255.255.0
R-PE1(config-if)#no shut
P(config)#int lo 0
P(config-if)#ip add 22.22.22.22 255.255.255.255
P(config-if)#int s1/1
P(config-if)#ip add 12.1.1.2 255.255.255.0
P(config-if)#no shut
P(config-if)#int s1/2
P(config-if)#ip add 23.1.1.1 255.255.255.0
P(config-if)#no shut
R-PE2(config)#int lo 0
R-PE2(config-if)#ip add 33.33.33.33 255.255.255.255
R-PE2(config-if)#int s1/2
R-PE2(config-if)#ip add 23.1.1.2 255.255.255.0
R-PE2(config-if)#no shut
R-Site_B(config)#int s1/3
R-Site_B(config-if)#ip add 192.168.2.1 255.255.255.0
R-Site_B(config-if)#no shut
R-Site_B(config-if)#int lo 0
R-Site_B(config-if)#ip add 2.2.2.2 255.255.255.255
R-Site_D(config)#int lo 0
R-Site_D(config-if)#ip add 4.4.4.4 255.255.255.255
R-Site_D(config-if)#int s1/0
R-Site_D(config-if)#ip add 172.16.2.1 255.255.255.0
R-Site_D(config-if)#no shut
基本配置完毕了,这里关于VRF的接口没有配置,因为VRF没有划分。
首先配置第一部 MPLS Domain内部的底层通信。
R-PE1(config-if)#router ospf 1
R-PE1(config-router)#router-id 11.11.11.11
R-PE1(config-router)#network 11.11.11.11 0.0.0.0 a 0
R-PE1(config-router)#network 12.1.1.1 0.0.0.0 a 0
P(config)#router ospf 1
P(config-router)#router-id 22.22.22.22
P(config-router)#network 22.22.22.22 0.0.0.0 a 0
P(config-router)#network 12.1.1.2 0.0.0.0 a 0
P(config-router)#network 23.1.1.1 0.0.0.0 a 0
R-PE2(config)#router ospf 1
R-PE2(config-router)#router-id 33.33.33.33
R-PE2(config-router)#network 33.33.33.33 0.0.0.0 a 0
R-PE2(config-router)#network 23.1.1.2 0.0.0.0 a 0
第二部配置MPLS,还是和以前一样先配置范围和RID
R-PE1(config)#mpls ldp router-id lo 0
R-PE1(config)#mpls label range 100 199
R-PE1(config)#int s1/1
R-PE1(config-if)#mpls ip
P(config)#mpls ldp router-id lo 0
P(config)#mpls label range 200 299
P(config)#int s1/1
P(config-if)#mpls ip
P(config-if)#int s1/2
P(config-if)#mpls ip
R-PE2(config)#mpls ldp router-id lo 0
R-PE2(config)#mpls label range 300 399
R-PE2(config)#int s1/2
R-PE2(config-if)#mpls ip
这里注意的是,不要先进行MPBGP的建立,因为建立MPBGP那么相当于标签的分发机制就开始了,那么这时候在运行MPLS的话,标签的范围就不能限制了,只有重启设备才能解决问题,如果是为了分析标签置换的话,配置顺序先MPLS 然后在运行MPBGP,也建议这样。
第三步运行MPBGP,这里MPBGP通常指address-family 后面的选项,我们通常用的是BGPv4,它只为ipv4 unicast服务,而对于组播,IPv6或者是VPNv4就需要在对应的address-family里面手工激活,我们这个实验中 不需要运行BGPv4,所以可以关闭这个功能,通常需要的时候在address-family中激活。
R-PE1(config-if)#router bgp 1
R-PE1(config-router)#bgp router-id 11.11.11.11
R-PE1(config-router)#no bgp default ipv4-unicast
R-PE1(config-router)#neighbor 33.33.33.33 remote 1
R-PE1(config-router)#neighbor 33.33.33.33 update-source lo0
R-PE1(config-router)#address-family vpnv4
R-PE1(config-router-af)#neighbor 33.33.33.33 activate
R-PE2(config-if)#router bgp 1
R-PE2(config-router)#bgp router-id 33.33.33.33
R-PE2(config-router)#no bgp default ipv4-unicast
R-PE2(config-router)#neighbor 11.11.11.11 remote-as 1
R-PE2(config-router)#neighbor 11.11.11.11 update-source lo0
R-PE2(config-router)#address-family vpnv4
R-PE2(config-router-af)#neighbor 11.11.11.11 activate
通过show ip bgp vpnv4 all summary查看MPBGP邻居关系。
当我们输入neighbor 11.11.11.11 activate后它会自动添加一个send-commuity extended,这是cisco帮我们优化的,因为RT是扩展属性,也是可选的,默认不指定的话,它是不会发送给邻居的。
第四部 创建VRF,关联接口
R-PE1(config)#ip vrf A
R-PE1(config-vrf)#rd 1:1
R-PE1(config-vrf)#route-target 1:1
R-PE1(config)#ip vrf B
R-PE1(config-vrf)#rd 1:2
R-PE1(config-vrf)#route-target 1:2
R-PE1(config-vrf)#int s1/0
R-PE1(config-if)#ip vrf forwarding A
R-PE1(config-if)#ip add 192.168.1.2 255.255.255.0
R-PE1(config-if)#no shut
R-PE1(config-if)#int s1/2
R-PE1(config-if)#ip vrf forwarding B
R-PE1(config-if)#ip add 172.16.1.2 255.255.255.0
R-PE1(config-if)#no shu
这里关联接口的时候 如果先配置了IP地址的话,那么它会提示三层信息被清除,需要重新输入。
查看global Router 是没有关于跟VRF关联的接口了,因为VRF有独立的路由表
所以关于任何的show参数都需要加上vrf (name)来进行查看。
R-PE2(config)#ip vrf A
R-PE2(config-vrf)#route-target 1:1
R-PE2(config-vrf)#rd 1:1
R-PE2(config-vrf)# exit
R-PE2(config)#ip vrf B
R-PE2(config-vrf)#route-target 1:2
R-PE2(config-vrf)#rd 1:2
R-PE2(config-vrf)#int s1/3
R-PE2(config-if)#ip vrf forwarding A
R-PE2(config-if)#ip add 192.168.2.2 255.255.255.0
R-PE2(config-if)#no shut
R-PE2(config-if)#int s1/0
R-PE2(config-if)#ip vrf forwarding B
R-PE2(config-if)#ip add 172.16.2.2 255.255.255.0
R-PE2(config-if)#no shut
第五步 配置路由协议
先看下静态怎么配置。这里Site-A和Site-B做静态
CE端:R-Site_A(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.2
R-Site_B(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.2
PE端:R-PE1(config)#ip route vrf A 1.1.1.1 255.255.255.255 192.168.1.1
R-PE2(config)#ip route vrf A 2.2.2.2 255.255.255.255 192.168.2.1
重要的一步就是把这个静态重分布进MPBGP中,这个MPBGP是address-family ipv4 vrf 中,而不是VPNv4,VPNv4只是负责专递路由协议,而重分布因该关联vrf,这样的话,重分布进这个VRF的路由,只会显示关于有跟这个VRF相同的RT。也就是只有相同的RT值 才会重分布进MPBGP中。
R-PE2(config)#router bgp 1
R-PE2(config-router)#address-family ipv4 vrf A
R-PE2(config-router-af)#redistribute static
R-PE1(config)#router bgp 1
R-PE1(config-router)#address-family ipv4 vrf A
R-PE1(config-router-af)#redistribute static
show ip bgp vpnv4 all 查看关于VPNv4的路由信息,在BGPv4中 相当于show ip bgp
测试下连通性。
开始分析标签的压入和置换 弹出过程
1、SIte-A 把IP、s:1.1.1.1 D:2.2.2.2的数据包发送给R-PE1,走默认路由。
2、R-PE1收到以后,因为它是从关联VRF A的接口收到的数据包,所以直接查看的是VRF A的FIB表,查看是否有标签信息压入。
发现有两个标签信息压入,200,303 303是内层标签 200是外层标签,303是怎么来的,从R-PE1的vpnv4表中可以看到关于2.2.2.2的下一跳是33.33.33.33,它由R-PE2的MPBGP传递给R-PE1,改变了下一跳,所以是R-PE2的MPBGP分配的,外层标签是200,查看LFIB表,发现200是关于33.33.33.33的标签信息,所以这里验证了之前提到的,外层标签是关于去往对方MPBGP下一跳的标签信息。
3、那么R-PE1将这个数据包压入200的标签从出接口s1/1发送给P。
4、P这时候能看懂外层标签的,因为它有关于33.33.33.33这条路由的信息。关于200的标签 执行Pop动作,发送给R-PE2,那么就只剩下一个内层标签303了。 P路由器在这里是次莫跳。
5、R-PE2关于303的标签是Untagged ,并且交给S1/3发送出去,S1/3关联的是VRF A,所以直接转发给Site-B了。 Untagged在这里是正确的,因为如果有三层标签的话,这里执行的动作不是untagged而是Pop,从S1/3发送出去的话,那么客户收到,它跟本不懂标签信息,直接drop这个包了。
6、Site-B回复数据包过程是一样的。
抓包看下 P发送给R-PE2的时候 是不是303的标签。 OK ,跟分析的一样。
把CE-PE的协议换成RIP。
这里测试为Site-C和Site-D
R-Site_C(config)#router rip
R-Site_C(config-router)#version 2
R-Site_C(config-router)#no auto-summary
R-Site_C(config-router)#network 3.0.0.0
R-Site_C(config-router)#network 172.16.0.0
R-PE1(config)#router rip
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router-af)#version 2
R-PE1(config-router-af)#no auto-summary
R-PE1(config-router-af)#network 172.16.0.0
这里R-PE1要在RIP的地址族中关联VRF B,然后宣告172.16.0.0进去,因为接口172.16.1.2关联的是VRF B接口,所以会发送RIP的报文与Site-C建立RIP关系。这里一定要在地址族里面敲version 和汇总信息。
正常收到3.3.3.3 RIP路由。
R-PE2(config)#router rip
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#version 2
R-PE2(config-router-af)#no auto-summary
R-PE2(config-router-af)#network 172.16.0.0
R-Site_D(config)#router rip
R-Site_D(config-router)#version 2
R-Site_D(config-router)#no auto-summary
R-Site_D(config-router)#network 4.0.0.0
R-Site_D(config-router)#network 172.16.0.0
收到4.4.4.4的路由。
接下来是重要的一步了,R-PE1把关于RIP VRFB的路由导入到BGP的VRF B中,然后传递给R-PE2,R-PE2把这些路由导入进VRF B中,R-PE2把MPBGP的路由重分布进R-PE2和Site-D的路由协议中(RIP关联的VRF B),R-PE2通过RIP传递给Site-D。 这个过程是双向的,在R-PE1双向重分布,R-PE2也要双向重分布。
R-PE1(config)#router bgp 1
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router-af)#redistribute rip
R-PE1(config)#router rip
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router-af)#redistribute bgp 1 metric transparent
R-PE2(config)#router rip
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#redistribute bgp 1 metric transparent
R-PE2(config)#router bgp 1
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#redistribute rip
Transparent参数的意思是,它根据RIP的跳数 原本是多少跳,就在这个跳数的基础上加1。因为它会携带在MPBGP的MED属性中。这个根据环境来使用,如果本身这条路由条目跳数就15跳了,那么就不能使用这个参数了,就必须用metric自己指定。
通信正常,标签的分析 这个就不分析了,放到EIGRP中,其实它的标签置换跟静态一样的。
CE—PE换成EIGRP,还是Site-C和Site-D no 掉之前的RIP配置,EIGRP配置就两个难点,一个是AS的问题,一个就是重分布的参数
R-Site_C(config)#no router rip
R-PE1(config)#no router rip
R-PE2(config)#no router rip
R-Site_D(config)#no router rip
R-Site_C(config)#router eigrp 1
R-Site_C(config-router)#no auto-summary
R-Site_C(config-router)#network 3.3.3.3 0.0.0.0
R-Site_C(config-router)#network 172.16.1.1 0.0.0.0
R-PE1(config)#router eigrp 2
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router)#no auto-summary
R-PE1(config-router)#network 172.16.1.2 0.0.0.0
没有发现任何的邻居关系,在EIGRP中 如果是普通情况下建立EIGRP必须AS号相同,那么在MPLS中 肯定这种限制是不好的,可能MPLS VPN内部使用的就是EIGPR 并且AS号跟客户的EIGRP AS号还相同,所以在MPLS VPN中它的address-family中需要申明它属于哪个AS,这样能在一个相同的AS中 提供不同address-family的服务。
R-PE1(config-router-af)#autonomous-system 1
邻居立马就起来了。
R-PE2(config)#router eigrp 1
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#no auto-summary
R-PE2(config-router-af)#autonomous-system 1
R-PE2(config-router-af)#network 172.16.2.2 0.0.0.0
R-Site_D(config)#router eigrp 1
R-Site_D(config-router)#no auto-summary
R-Site_D(config-router)#network 172.16.2.1 0.0.0.0
R-Site_D(config-router)#network 4.4.4.4 0.0.0.0
双向重分布
R-PE1(config)#router bgp 1
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router-af)#redistribute eigrp 1
这时候 R-PE1重分布来后,在R-PE2上查看关于3.3.3.3的路由信息,主要看metric 2297856,它就在R1上查看的关于 EIGRP 3.3.3.3路由的metric。它和携带在MPBGP中传递。
R-PE1(config)#router eigrp 2
R-PE1(config-router)#address-family ipv4 vrf B
R-PE1(config-router-af)#redistribute bgp 1 metric 20 20 20 20 20
R-PE2(config)#router eigrp 1
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#redistribute bgp 1 metric 20 20 20 20 20
R-PE2(config)#router bgp 1
R-PE2(config-router)#address-family ipv4 vrf B
R-PE2(config-router-af)#redistribute eigrp 1
这里我把BGP重分布进EIGRP的时候,关于5个值我是随意指定的,为什么这么可以呢,一切就在于MPBGP携带的metric。先看下客户收到关于这条路由的属性。
mertic为2809856,与之前的2297856差了512000,EIGRP的metric计算是沿途更新入向接口delay之和除以10 和入向更新接口带宽最小值,10^7/带宽 然后相加后 乘以256.这里参数带宽已经选举了,就需要加上一个入向接口dealy/10 *256是否等于512000。这里入向接口是s1/2,它的延迟是20000/10 *256=512000,所以关于BGP重分布进EIGRP的时候,选举的metric并不是手工指定的,而是MPBGP属性携带的metric,并且会加上自己入向接口的延迟。
这些从R-Site_D 开始分析标签的压入 置换 弹出。
1、首先一个纯IP包发送给R-PE2。
2、R-PE2收到以后,查看与接口关联的VRF B的FIB表,是否压入标签
3、内层标签为104,是关于对方MPBGP分配的,因为改变了下一跳,而201是关于去往这个MPBGP的下一跳标签信息 也就是11.11.11.11的标签信息。 压入201标签交给P。
4、P路由器收到以后查看LFIB表,201执行Pop动作,因为是次莫跳,所以以104的标签包发送给R-PE1。
5、R-PE1收到以后 会执行untagged,因为是最后一条路由器了,需要把所有的标签弹出 交给客户Site-C。
6、关于数据包的返回过程是一样的,就不分析了。
关于P 执行Pop后 以104标签发送给R-PE1。
最后一个feature就是关于TTL的繁衍,默认情况下客户可以traceroute路由,这会把MPLS VPN 内部的网络信息也给暴露了,这是不希望的。
在边界上输入no mpls ip propagate-ttl forwarded 这条命令在PE上做就可以了,一定要加forwarded参数,不然内部网络也会受限制,它就是把IP的TTL变为1,MPLS的TTL变为255,当到达边界的时候直接以IP包出现 TTL为1,转发的时候发现为0 就返回一个ICMP 超时消息,告诉路由器,这样只会知道关于对端PE和CE的信息,这是没问题的。
关于MPLS VPN的思路
1、ISP内部的IGP是正常的
2、MPLS LDP 邻居关系保证正常
3、PE与PE之间的BGP关系正常建立 (MP-BGP)
4、在PE上的VRF是否正常,接口转换了否
5、路由重分布 PE-CE之间的路由两个方向 CE与PE之间的IGP 需要导入进PE的BGP中,
BGP的路由要注入IGP中。都是在PE上完成 双向 (BGP除外,完成在address-family中)
6、如果PE有静态路由看是否正确
路由转发的架构
第一步ce2路由器通过pe2-ce2的路由协议将客户的路由通告给pe2
第二步pe2路由器将客户路由重分发进mp-bgp中。
第三步pe2跨越mpvsvpn骨干将mp-bgp的路由通告给pe1.Pe1将这些路由导入到vrf中。
第四步pe1将mp-bgp的路由重分发进pe-ce的路由协议中。
第五步pe1通过路由协议向ce1通告路由信息。
这里路由的传递与数据传输方向是相反的。并且这个路由转发过程是双向的。
如果大家有任何疑问或者文中有错误跟疏忽的地方,欢迎大家留言指出,博主看到后会第一时间修改,谢谢大家的支持,更多技术文章尽在网络之路Blog,版权归网络之路Blog所有,原创不易,侵权必究,觉得有帮助的,关注转发一波谢谢。
上一篇回顾
下一篇学习
MPLS系列之三:OSPF一系列问题,你想要的这都有
关键词:MPLS静态路由(新增静态路由)