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的方案,不支援字首清單.
<a href="http://s3.51cto.com/wyfs02/M00/74/6C/wKioL1YdA7SRCYc2AAC-gejnVg4374.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/74/6C/wKioL1YdA7WioHLsAAEVBGZy2RM493.jpg" target="_blank"></a>
首先全局需要打上:no mpls ldp advertise-labels.就是不分發标簽.
<a href="http://s3.51cto.com/wyfs02/M01/74/6C/wKioL1YdA7bxka70AADtYlVDT7g126.jpg" target="_blank"></a>
是以上面指令的意思是:
本台裝置,隻為所有的LDP鄰居分發192.168.254.0/24的IGP路由配置設定的标簽.
其他的IGP路由字首沒有标簽,直接在直連裝置上面除了192.168.254.0/24有上端配置設定的标簽,其他的都是No Labels.
試驗:配置設定标簽控制----發标簽控制
<a href="http://s3.51cto.com/wyfs02/M01/74/6C/wKioL1YdA7eA8q37AAB0iVpvcJU312.jpg" target="_blank"></a>
R3發送了三條IGP路由字首的标簽給R2.
如圖:
<a href="http://s3.51cto.com/wyfs02/M00/74/70/wKiom1YdA5nSj_fGAAHXksAOwoM924.jpg" target="_blank"></a>
現在要做的就是隻讓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鄰居以後的結果:
<a href="http://s3.51cto.com/wyfs02/M00/74/70/wKiom1YdA5vwefXRAAGfFlL9QfU353.jpg" target="_blank"></a>
對于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的标簽綁定表:
<a href="http://s3.51cto.com/wyfs02/M00/74/6C/wKioL1YdA7vRY81aAAHdWhu_NlQ218.jpg" target="_blank"></a>
這裡可以看到,R3是對33.1.1.1還有35.1.1.1都配置設定了标簽的。
隻是沒有發送給R2而已.
可以在同一個路由器上面做很多
mpls ldp advertise 的政策:
<a href="http://s3.51cto.com/wyfs02/M02/74/70/wKiom1YdA52gTvLLAABu8ye-bx4201.jpg" target="_blank"></a>
剛才隻是一個極端的例子,之是以說極端,是因為R3是達到隻發送某些标簽給R2了,可是現在R5就慘了,因為R3的配置,隻有對于R2分發某些标簽,導緻了R5什麼标簽都沒有從R3收到:
<a href="http://s3.51cto.com/wyfs02/M01/74/6C/wKioL1YdA73glQxZAAKoEbZywpE461.jpg" target="_blank"></a>
要解決這個問題,繼續在R3上面進行其他鄰居的标簽放行:
R3的配置:
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)
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的标簽表:
<a href="http://s3.51cto.com/wyfs02/M02/74/6C/wKioL1YdA7_jbCEzAAGMoGqhJss707.jpg" target="_blank"></a>
而R5,所有的标簽都從R3配置設定了過來:
<a href="http://s3.51cto.com/wyfs02/M01/74/6C/wKioL1YdA8CQqTiVAAKXEWZo3Q0813.jpg" target="_blank"></a>
控制分發:标簽接收
<a href="http://s3.51cto.com/wyfs02/M00/74/70/wKiom1YdA6LTXEkUAABFszZZdHw803.jpg" target="_blank"></a>
現在在R5上面做标簽接收的過濾.
在正常情況下,R5上面的标簽轉發表是:
<a href="http://s3.51cto.com/wyfs02/M02/74/6C/wKioL1YdA8LyyKwNAAKQxL6Esao797.jpg" target="_blank"></a>
R5上面做相關接收标簽的政策:
mpls label range 500 599
mpls ldp neighbor 33.1.1.1 labels accept 2
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配置設定的标簽.
<a href="http://s3.51cto.com/wyfs02/M02/74/70/wKiom1YdA6Xh7zXLAAJ5fSyEfYY597.jpg" target="_blank"></a>
這裡可以看到,因為在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:
<a href="http://s3.51cto.com/wyfs02/M02/74/6C/wKioL1YdA8ayIRhtAAVeS7aBa40639.jpg" target="_blank"></a>
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,标簽表都不複存在了.
<a href="http://s3.51cto.com/wyfs02/M00/74/6C/wKioL1YdA8nRd95cAAdPCTQSyOk225.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/74/6C/wKioL1YdA8qCSNOYAABT7fTOSxg700.jpg" target="_blank"></a>
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
<a href="http://s3.51cto.com/wyfs02/M02/74/70/wKiom1YdA6zTWnw2AABzxqZmJnU200.jpg" target="_blank"></a>
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上面做這個範圍限制:
<a href="http://s3.51cto.com/wyfs02/M02/74/70/wKiom1YdA62S417ZAAA-pBJWwHM095.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/74/70/wKiom1YdA62zLGH2AABIisAf3zI503.jpg" target="_blank"></a>
在R2上面做了一個限制,可用标簽範圍隻有2個.
那麼R1上面的結果是一堆從R2始發的路由字首沒有标簽.
這也是為什麼現網不建議手工配置标簽的範圍.因為随着業務的增加,路由字首一定會增加的,如果前期進行限制,後期故障排查很容易出錯。特别是核心裝置,show run都是好幾屏或者是十多屏.
本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/1702653