Technorati 标签: MPLS ×××

MPLS ×××是一种三层×××.也是实施最为广泛的一种MPLS技术.

关于MPLS ×××的服务模型,这里一点带过。相信大家对MPLS ×××的架构是比较了解了:

03-高级MPLS主题--MPLS ×××原理进阶版--上_第1张图片

上面就是一个MPLS ×××的核心应用模型。P和PE都运行MPLS.所以PE和P设备的选型的前提是这些设备必须要支持MPLS标签分发和转发MPLS报文的能力。

下面就MPLS ×××技术的各个技术结构做一个汇总:

虚拟路由转发VRF--virtual routing forwarding

VRF是一种×××路由和转发的实例.每一个独立的VRF都有一张独立的路由表。这个概念很重要。

因为在PE路由器上的路由需要被相互隔离,以确保对每一个用户×××的私有性,所以每一个×××都应该有自己的路由表。这张私有路由表就被称为VRF路由表。VRF路由表和cisco IOS的全局路由表是没有什么区别的,只不过这个路由表仅仅是对某一个VRF有效,并且和其他的路由表之间是完全隔离开的.

再来看一个图就搞定了。

03-高级MPLS主题--MPLS ×××原理进阶版--上_第2张图片

RD---route distinguish 路由区分

RD,解决地址冲突问题,×××V4前缀=RD+IPv4前缀.

对于上面的图来说,我会在现实生活中经常会遇到一个问题,有两家公司,公司A和公司B,大家的私网地址都是192.168.0.0/16,那么这个时候,两个公司的路由都送到了PE路由器上,PE路由器怎么知道公司A的192.168.0.1到10.1.1.1应该往VRF A去送,而公司B的192.168.0.1应该送往VRF B呢?

这个问题被RD所解决。

RD是一个64比特的字段,用于在MP-BGP运载VRF前缀时,确保这些前缀的唯一性。RD并不会说明该前缀属于哪个VRF,RD的功能并不是×××标示符,因为在一些更为复杂得环境中,可能一个×××存在多个RD.

在PE路由器上的每个VRF实例必须要分配一个RD.格式为:

ASN:nn或者IP address:NN,nn代表数字.

如果一个IPv4前缀为10.1.1.0/24,并且RD是1:1的话,那么×××v4的前缀将为:1:1:10.1.1.0/24.这样来确保他的唯一性,RD是VRF路由区分符。和MPLS核心网没有关系的。

所以比较简单的记忆方式就是,RD是VRF路由的区分标示符。而RD是MPLS核心网的路由目标。

RT----Route target

如果RD仅仅用于标示×××的话,那么在不同×××场景之间的通讯就会出现问题。

公司A的一个location没有办法与公司B的一个location进行通讯,因为他们的RD不匹配。

让不同的公司之间进行有策略性的相互访问,被称为外部通讯。通一个vrf之间的通讯被称为内部通讯。而内部通讯是比较简单的。

对于VRF的唯一标示符是用的RD.而核心网PE到PE的路由传输则用的是Route target.

一个RT是一个BGP扩展团体,说明了哪些路由需要从MP-BGP中注入到VRF.

RT氛围Route target export和Route target import.

Route target export: 表示输出的×××v4路由收到了额外的BGP扩展团体.

Route target import: 从MP-BGP那里收到的***v4路由核查可以匹配的扩展团体.

如果最终找到了匹配的RT,这个前缀会以IPv4路由的身份被添加到VRF路由表中,否则该前缀会被拒绝。

RT的配置:

03-高级MPLS主题--MPLS ×××原理进阶版--上_第3张图片

这里说明一个情况,当在配置MPLS ×××的时候,如果不需要和属于其他×××的location通讯,而只需要为一个VRF进行内部通讯的环境是相当简单的。但是当如果想让某个×××的location和属于另外一个×××的location进行通讯的时候,就需要正确的配置RT了。

这里需要一个更具有说明的实例来分解这个知识点:

03-高级MPLS主题--MPLS ×××原理进阶版--上_第4张图片

这里有两个customer.cust-one and cust-two.

当然基本需求很简单。相同的vrf之间需要进行通讯,而不同的vrf之间cust-one的location A需要和cust-two的location A也需要进行通讯。

那么这里如何运用RT进行配置呢?

03-高级MPLS主题--MPLS ×××原理进阶版--上_第5张图片

本端PE对应的RT export,就是对端的RT import.

反之亦然,这样就可以把路由正确的引入想要引入的vrf去了。当然这样做肯定是对称的,不会我发出去路由,对端收但是对端不法给我。那样配置没有问题,但是对于实际生产网是没有什么意义的。通讯没有纯单向的应用。

03-高级MPLS主题--MPLS ×××原理进阶版--上_第6张图片

从上面可以看到,这个实例中的扩展团体属性RT是1:1.因为import和export都是1:1,所以这里只显示一个。

如果两个配置得不一样的话就会分开显示:

03-高级MPLS主题--MPLS ×××原理进阶版--上_第7张图片

MPLS ××××××v4路由是如何传播的?

03-高级MPLS主题--MPLS ×××原理进阶版--上_第8张图片

这个图充分说明了传播的过程,首先,×××1 locationACE转发接收到的客户流量,然后转发给PE.

当然CEPE之间可以用IGP或者EBGP通告纯IPv4路由。当PE vrf接收到路由以后,IPv4路由被注入vrf路由表中,IPv4路由又被重分布到MP-BGP中,RDRT被添加上,骨干网络PEPE之间通过IBGP通告带有标签和RTS***v4路由,通过RT可以知道应该把路由注入到哪个对端PE-2VRF中去,然后将RD×××v4路由中移除。最后通过IGP或者EBGP通告ipv4路由到CE2.也就是location BCE上去。

实际上整个过程是:IPv4->RD/RT-->重分步到MP-BGP-->通告到对端PEMP-BGP-->注入对端PE vrf路由表-->移除RD/RT-->通告给vrf连接的CE.最后完成通讯,当然这里只说了RD/RT,实际上再真实的传输过程中,骨干网还要进行标签分发建立FEC,然后通过标签转发表将流量一步一步的进行传输。

我们强调了RTRD的重要性,但是RDRT也只是在路由维护的时候才起作用,实际的MPLS数据包转发的时候是不会带有这两个信息,而只会带有标签信息,这个地方需要澄清一下概念,很多时候这个概念都会搞混系。

好了。说了这些,RT只是当数据送到了PE的时候,

Hub-and-Spoke模型.

有一种应用模型称为Hub-and-spoke模型,用户并不希望他们的场点之间形成完全的互通。典型的应用环境就是公司有一个HQ和很多分支机构,例如银行系统。branch所有的数据流都是直接上传到总部的服务器上,也是直接从总部的服务器上直接下载最新的数据,银行的分支和分支之间是不能进行相互通讯的。这个需求是从安全性上来进行考虑的。

但是在MPLS ×××中进行穿越,下面的条件是必须的:

spoke(分支机构)只能和hub(总部)进行通讯.

spokespoke的流量必须先要发给hub(总部),然后由总部进行中转.(当然是由总部的CE路由器进行转发,这样也可以很好的控制数据流量)

要实现这些,就必须要粘连以下参数:

两个不同的RT.

两个不同的RD.

这样说显然很空洞,下面用一个实验来进行详细的说明:

03-高级MPLS主题--MPLS ×××原理进阶版--上_第9张图片

这个实例,我用了一下午才搭建哈。呵呵,就是为了验证RT来实现 hub-spoke的应用模式。

可能这个图看起来太花了,我再整理一下,看看分支机构一为什么只能和HQ通讯,分支机构二也只能和HQ通讯,但是分支一和分支二不能相互通讯。

03-高级MPLS主题--MPLS ×××原理进阶版--上_第10张图片

从这个图可以看出,branch-1到右边HQ,PE-1的RT export和对端PE-3的import是匹配的。而PE-1的RT import和PE-3的export也能匹配,所以是可以相互通讯的。PE-2和PE-3也是一样。

这里还有一点就是,虽然都是一个vrf,但是每个的RD不一样。再来复习一下RD是干什么的,为什么RD不一样,还可以继续通讯?

RD是一个64比特的字段,用于在MP-BGP运载VRF前缀时,确保这些前缀的唯一性。RD并不会说明该前缀属于哪个VRF,RD的功能并不是×××标示符,因为在一些更为复杂得环境中,可能一个×××存在多个RD.

这里RD只是为了标示VRF里面的客户路由。因为在MPLS骨干网中如果遇到CE侧有重复的路由,类似于192.168.0.1的,那么需要有唯一的标示符来标明两个相同网段的路由。

所以这里RD才需要明确的标明。如果没有重复的网段,实际上RD随便怎么标示都是一样的。

但是如果有重复的客户端路由,RD一定要不一样,否则就没有办法进行传输,还会造成网络问题。

下面是实验中的核心配置:

R1-PE-1:

hostname R1-PE-1

ip vrf maipu

rd 1:1

route-target export 100:100

route-target import 100:101

!

multilink bundle-name authenticated

mpls label protocol ldp

!

interface Loopback0

ip address 1.1.1.1 255.255.255.255

!

interface FastEthernet0/0

ip vrf forwarding maipu

ip address 13.1.1.1 255.255.255.0

duplex full

!

interface GigabitEthernet1/0

ip address 10.1.1.1 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

interface GigabitEthernet2/0

ip address 12.1.1.2 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

router ospf 1

router-id 1.1.1.1

log-adjacency-changes

network 0.0.0.0 255.255.255.255 area 0

!

router bgp 65500

no synchronization

bgp router-id 1.1.1.1

bgp log-neighbor-changes

neighbor 1.1.1.2 remote-as 65500

neighbor 1.1.1.2 update-source Loopback0

neighbor 1.1.1.2 next-hop-self

neighbor 1.1.1.3 remote-as 65500

neighbor 1.1.1.3 update-source Loopback0

neighbor 1.1.1.3 next-hop-self

no auto-summary

!

address-family ***v4

neighbor 1.1.1.2 activate

neighbor 1.1.1.2 send-community extended

neighbor 1.1.1.3 activate

neighbor 1.1.1.3 send-community extended

exit-address-family

!

address-family ipv4 vrf maipu

redistribute connected

no synchronization

exit-address-family

!

R2-PE-2:

hostname R2-PE-2

!

ip vrf maipu

rd 1:2

route-target export 100:100

route-target import 100:101

!

multilink bundle-name authenticated

mpls label protocol ldp

!

interface Loopback0

ip address 1.1.1.2 255.255.255.255

!

interface FastEthernet0/0

ip vrf forwarding maipu

ip address 14.1.1.1 255.255.255.0

duplex full

!

interface GigabitEthernet1/0

ip address 10.1.1.2 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

interface GigabitEthernet2/0

ip address 11.1.1.1 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

router ospf 1

router-id 1.1.1.2

log-adjacency-changes

network 0.0.0.0 255.255.255.255 area 0

!

router bgp 65500

no synchronization

bgp router-id 1.1.1.2

bgp log-neighbor-changes

neighbor 1.1.1.1 remote-as 65500

neighbor 1.1.1.1 update-source Loopback0

neighbor 1.1.1.1 next-hop-self

neighbor 1.1.1.3 remote-as 65500

neighbor 1.1.1.3 update-source Loopback0

neighbor 1.1.1.3 next-hop-self

no auto-summary

!

address-family ***v4

neighbor 1.1.1.1 activate

neighbor 1.1.1.1 send-community extended

neighbor 1.1.1.3 activate

neighbor 1.1.1.3 send-community extended

exit-address-family

!

address-family ipv4 vrf maipu

redistribute connected

no synchronization

exit-address-family

!

R3-PE-3:

hostname R3-PE-3

ip vrf maipu

rd 1:3

route-target export 100:101

route-target import 100:100

!

multilink bundle-name authenticated

mpls label protocol ldp

!

interface Loopback0

ip address 1.1.1.3 255.255.255.255

!

interface FastEthernet0/0

ip vrf forwarding maipu

ip address 16.1.1.1 255.255.255.0

duplex full

!

interface GigabitEthernet1/0

ip address 11.1.1.2 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

interface GigabitEthernet2/0

ip address 12.1.1.1 255.255.255.0

negotiation auto

mpls label protocol ldp

mpls ip

!

router ospf 1

router-id 1.1.1.3

log-adjacency-changes

network 0.0.0.0 255.255.255.255 area 0

!

router bgp 65500

no synchronization

bgp router-id 1.1.1.3

bgp log-neighbor-changes

neighbor 1.1.1.1 remote-as 65500

neighbor 1.1.1.1 update-source Loopback0

neighbor 1.1.1.1 next-hop-self

neighbor 1.1.1.2 remote-as 65500

neighbor 1.1.1.2 update-source Loopback0

neighbor 1.1.1.2 next-hop-self

no auto-summary

!

address-family ***v4

neighbor 1.1.1.1 activate

neighbor 1.1.1.1 send-community extended

neighbor 1.1.1.2 activate

neighbor 1.1.1.2 send-community extended

exit-address-family

!

address-family ipv4 vrf maipu

redistribute connected

no synchronization

exit-address-family

!

R4-CE-1:

hostname R4-CE-1

!

interface FastEthernet0/0

ip address 13.1.1.2 255.255.255.0

duplex full

!

ip route 0.0.0.0 0.0.0.0 13.1.1.1

R5-CE-2:

hostname R5-CE-2

!

interface FastEthernet0/0

ip address 14.1.1.2 255.255.255.0

duplex full

!

ip route 0.0.0.0 0.0.0.0 14.1.1.1

R6-CE-3:

hostname R6-CE-3

!

interface FastEthernet0/0

ip address 16.1.1.2 255.255.255.0

duplex full

!

ip route 0.0.0.0 0.0.0.0 16.1.1.1

最后来看看结果:
从R4-CE-1到R6-CE-3,通。

03-高级MPLS主题--MPLS ×××原理进阶版--上_第11张图片


从R5-CE-2到R6-CE-3,通.

03-高级MPLS主题--MPLS ×××原理进阶版--上_第12张图片


但是,分支机构一到分支机构二(R4-CE-1到R5-CE-2),不可达: 

03-高级MPLS主题--MPLS ×××原理进阶版--上_第13张图片


这里为什么R4到R5是U呢?还是留给读者自己思考吧。呵呵,unreachable.为什么不是.....呢?如果R4可以达到R5,要走的路径会是什么样的呢?