Technorati 标签: MPLS,CCIE,Label,LDP,标签控制

MPLS LDP标签控制.

1, mpls ldp advertise-labels [for prefix-access-list [to peer-access-list]]

标签过滤, 1, 给予 2, 接收

默认情况下,本地路由器会为IGP路由表所有前缀分配标签,并且分发到所有LDP邻居去.

该命令是通过命令人为的选择标签到一些LDP邻居或者TDP邻居去.

意思就是,发多少,发不发,发给谁。都是该命令控制.

2, mpls ldp neighbor x.x.x.x labels accept ACL_number

这个命令就是,我接收哪个邻居发送给我的ACL能匹配的前缀的标签.

其他都标签都进行过滤.

控制分发:给予:

仅仅支持基础ACL的方案,不支持前缀列表.

clip_p_w_picpath002

MPLS LDP标签控制--高级feature&&标签的故障排查_第1张图片

首先全局需要打上:no mpls ldp advertise-labels.就是不分发标签.

MPLS LDP标签控制--高级feature&&标签的故障排查_第2张图片

所以上面命令的意思是:

本台设备,只为所有的LDP邻居分发192.168.254.0/24的IGP路由分配的标签.

其他的IGP路由前缀没有标签,直接在直连设备上面除了192.168.254.0/24有上端分配的标签,其他的都是No Labels.

试验:分配标签控制----发标签控制

MPLS LDP标签控制--高级feature&&标签的故障排查_第3张图片

R3发送了三条IGP路由前缀的标签给R2.

如图:

clip_p_w_picpath010

现在要做的就是只让R3通告55.1.1.1/32的标签给R2.其他的标签都给过滤掉.

最终在R2上面对于55.1.1.1/32有标签,但是其他两个路由前缀33.1.1.1/32和35.1.1.0/24是No Label的状态.

ACL解决方案:

R3:

mpls label range 300 399

mpls label protocol ldp

no mpls ldp advertise-labels

mpls ldp advertise-labels for 2 to 1

!

interface Loopback0

ip address 33.1.1.1 255.255.255.255

!

interface Ethernet0/0

ip address 35.1.1.3 255.255.255.0

mpls ip

!

router ospf 1

router-id 33.1.1.1

network 23.1.1.3 0.0.0.0 area 1

network 33.1.1.1 0.0.0.0 area 1

network 35.1.1.3 0.0.0.0 area 1

!

mpls ldp router-id Loopback0 force

access-list 1 permit 22.1.1.1---R2LDProuter-id.

access-list 2 permit 55.1.1.1---允许放行的前缀的标签

!

上面的配置,22.1.1.1是R2的ldp router-id.

意思是说,R3将通告55.1.1.1的路由前缀分配的标签给R2,22.1.1.1

该方案是用的ACL方案.

下面是当R2清一下ldp邻居以后的结果:

clip_p_w_picpath012

对于33.1.1.1/32和35.1.1.0/24都没有分配标签。而对55.1.1.1/32是分配了标签的。

实际上是在R3上面做了一个标签过滤.并不能说R3没有对33.1.1.1/32和35.1.1.0/24分配标签,而是说没有江该标签分发给R2而已:

下面是R3的标签绑定表:

MPLS LDP标签控制--高级feature&&标签的故障排查_第4张图片

这里可以看到,R3是对33.1.1.1还有35.1.1.1都分配了标签的。

只是没有发送给R2而已.

可以在同一个路由器上面做很多

mpls ldp advertise 的策略:

MPLS LDP标签控制--高级feature&&标签的故障排查_第5张图片

刚才只是一个极端的例子,之所以说极端,是因为R3是达到只发送某些标签给R2了,可是现在R5就惨了,因为R3的配置,只有对于R2分发某些标签,导致了R5什么标签都没有从R3收到:

MPLS LDP标签控制--高级feature&&标签的故障排查_第6张图片

要解决这个问题,继续在R3上面进行其他邻居的标签放行:

R3的配置:

mpls label range 300 399

mpls label protocol ldp

no mpls ldp advertise-labels-----默认不分发任何标签.

mpls ldp advertise-labels for 2 to 1 ----将35.1.1.0/24和55.1.1.1/32的前缀分发的标签通告给22.1.1.1(R2)

mpls ldp advertise-labels for 4 to 55----将所有的前缀标签通告给55.1.1.1(R5)

!

mpls ldp router-id Loopback0 force

access-list 1 permit 22.1.1.1

access-list 2 permit 35.1.1.0

access-list 2 permit 55.1.1.1

access-list 4 permit any

access-list 55 permit 55.1.1.1

!

最后,在R2上面,我们可以看到,只有35.1.1.0和55.1.1.1从R3得到了标签,而33.1.1.1没有标签,是No Label:

下面是R2的标签表:

clip_p_w_picpath020

而R5,所有的标签都从R3分配了过来:

MPLS LDP标签控制--高级feature&&标签的故障排查_第7张图片

控制分发:标签接收

仅仅支持基础ACL的方案,不支持前缀列表.

MPLS LDP标签控制--高级feature&&标签的故障排查_第8张图片

现在在R5上面做标签接收的过滤.

在正常情况下,R5上面的标签转发表是:

MPLS LDP标签控制--高级feature&&标签的故障排查_第9张图片

R5上面做相关接收标签的策略:

mpls label range 500 599

mpls label protocol ldp

mpls ldp neighbor 33.1.1.1 labels accept 2

!

mpls ldp router-id Loopback0 force

access-list 2 permit 12.1.1.0

access-list 2 permit 22.1.1.1

!

上面R5的配置,意思是说。我R5本地,只接收邻居33.1.1.1对于IGP前缀12.1.1.0/24和22.1.1.1/32分配的标签.

MPLS LDP标签控制--高级feature&&标签的故障排查_第10张图片

这里可以看到,因为在R5上做了只接收R3通告的12.1.1.0和22.1.1.1的标签.所以只有这两个前缀有标签。其他的outgoing label全部都是no Label的。

MPLS label Troubleshooting:

就标签来说,没有什么多说的,因为标签是系统分配的,我们很难对每一个标签去注意控制。

但是,如果路由器无论如何也收不到邻居分配过来的标签,那么下面几点是一定要注意的:

1, no ip cef

//这个是MPLS的基础,如果没有CEF,任何标签都不会收到. 首先, cisco的转发基础,cef是核心,cef是核心路由表提取出来的一个集合表,而MPLS的LDP标签是基于CEF表前缀来分发标签的,所以没有CEF,LDP也不会基于路由表来分发标签,最终什么标签都没有.

下面是一个路由器没有开启cef的MPLS forwarding table:

MPLS LDP标签控制--高级feature&&标签的故障排查_第11张图片

2, no mpls ip

cisco系统,全局的mpls ip默认是打开的,可以手工关闭.

一旦关闭,现象就是,show mpls forwarding-table是空表项,什么都没有.

而show mpls ldp binding标签库,也是空的。系统会提示:LIB not enable.

label information base not eanble. 就是全局的mpls ip被干了,一定要注意区别.

如果no ip cef,那么所有的标签都是No Label.如果干掉了mpls ip,标签表都不复存在了.

MPLS LDP标签控制--高级feature&&标签的故障排查_第12张图片

MPLS LDP标签控制--高级feature&&标签的故障排查_第13张图片

3,LDP邻居关系起不来.

这个时候就要检查transport-IP是否IGP能相互可达.

默认的情况,LDP的router-id就等于Transport-IP.

在LDP建立邻居的时候,两边路由器都在发送224.0.0.2的组播报文.

router-id是用于选举谁是LDP的邻居建立的发起方.

Transport-IP是用于建立TCP646邻居用的。

总结:在设备两端用扩展ping对方的router-id.通,再说端口是否被封,断,查IGP路由表.

troubleshooting的时候,比如:

R1--12.1.1.x--R2

R1的loop0:11.1.1.1/32, R2的loop0:22.1.1.1/32.

R1和R2上面,IGP都是宣告loop0和12.1.1.x的网段。

这个时候,在R1上面,再建一个loopback1:11.11.11.11/32,然后全局打上:mpls ldp router-id loop1 force,加了force参数,邻居会down掉,但是之后在也建立不起来了,因为R1没有network loop1的网段进行宣告.R2和R1的loop1 IGP不可达.

4, 标签控制[分发/接收]

分发过滤:mpls ldp advertise-labels [for prefix-access-list [to peer-access-list]]

接收过滤:mpls ldp neighbor x.x.x.x labels accept ACL_number

5, 标签的分发协议不匹配.TDP&LDP

MPLS LDP标签控制--高级feature&&标签的故障排查_第14张图片

NOTES:全局和接口均可修改标签协议.

在一台设备上面用默认的mpls label protocol ldp.另外一个设备上面是用cisco私有的TDP协议。

两个协议是不兼容的.邻居无法建立.

6,标签的范围过小.

在做实验的时候,经常是R1就打上mpls label range 100 199.

因为用于试验,100个标签差不多够用,主要用于观察现象。

而在现网环境中,或者troubleshooting的时候,如果在一个路由器上面吧这个范围修改的很小:

R1(config)#mpls label range 100 101

那么带来的问题就是下游的路由器只能接收到1个前缀带标签,其他全部都是No Label.

例如:R1---R2直连.在R2上面做这个范围限制:

MPLS LDP标签控制--高级feature&&标签的故障排查_第15张图片

clip_p_w_picpath040

在R2上面做了一个限制,可用标签范围只有2个.

那么R1上面的结果是一堆从R2始发的路由前缀没有标签.

这也是为什么现网不建议手工配置标签的范围.因为随着业务的增加,路由前缀一定会增加的,如果前期进行限制,后期故障排查很容易出错。特别是核心设备,show run都是好几屏或者是十多屏.