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的方案,不支持前缀列表.
首先全局需要打上:no mpls ldp advertise-labels.就是不分发标签.
所以上面命令的意思是:
本台设备,只为所有的LDP邻居分发192.168.254.0/24的IGP路由分配的标签.
其他的IGP路由前缀没有标签,直接在直连设备上面除了192.168.254.0/24有上端分配的标签,其他的都是No Labels.
试验:分配标签控制----发标签控制
R3发送了三条IGP路由前缀的标签给R2.
如图:
现在要做的就是只让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---R2的LDP的router-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邻居以后的结果:
对于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的标签绑定表:
这里可以看到,R3是对33.1.1.1还有35.1.1.1都分配了标签的。
只是没有发送给R2而已.
可以在同一个路由器上面做很多
mpls ldp advertise 的策略:
刚才只是一个极端的例子,之所以说极端,是因为R3是达到只发送某些标签给R2了,可是现在R5就惨了,因为R3的配置,只有对于R2分发某些标签,导致了R5什么标签都没有从R3收到:
要解决这个问题,继续在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的标签表:
而R5,所有的标签都从R3分配了过来:
控制分发:标签接收
仅仅支持基础ACL的方案,不支持前缀列表.
现在在R5上面做标签接收的过滤.
在正常情况下,R5上面的标签转发表是:
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分配的标签.
这里可以看到,因为在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:
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,标签表都不复存在了.
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
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上面做这个范围限制:
在R2上面做了一个限制,可用标签范围只有2个.
那么R1上面的结果是一堆从R2始发的路由前缀没有标签.
这也是为什么现网不建议手工配置标签的范围.因为随着业务的增加,路由前缀一定会增加的,如果前期进行限制,后期故障排查很容易出错。特别是核心设备,show run都是好几屏或者是十多屏.