通过以下拓扑来解释MPLS相关配置:

 

拓扑说明:所有接口IP按照拓扑中进行配置,每台路由器上配置loopback 1接口,Loopback接口地址分别为:1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4、5.5.5.5、6.6.6.6;并且 全网运行OSPF协议,除了每台路由器的Loopback地址,其他地址均加入到OSPF进程中

配置MPLS

1、配置标签范围(可选 配置)

看默认标签数量:

 R1#sh mpls label range Downstream Generic label region: Min/Max label: 16/100000

  R1#

说明:默认标签范围是16到100000

改标签范围:

R1(config)#mpls label range 16 1010000

R1#sh mpls label range

Downstream Generic label region: Min/Max label: 16/1010000

R1# 

2、修改接口的MTU(可选 配置)

 R1(config)#int s1/1

R1 (config-if)#mpls mtu 1508

或 R1 (config)#int s1/1

R1 (config-if)#mtu 2000

注:某些IOS下的接口不能设置MTU,只能分段传输。

查看修改MTU后的结果:

 

 

3、所有运行MPLS路由器开启cef

r1(config)#ip cef

4、配置LDP

(1) 全局启用LDP:

r1(config)#mpls label protocol ldp

说明:如果全局启用LDP,就将在此路由器的所有接口都开启LDP,但也可以选择只在某接口开启。


(2) 接口启用LDP:

r1(config)#int s1/1

r1(config-if)# mpls label protocol ldp

(3)在接口下开启发hello包找邻居:

r1(config)#int s1/1

r1(config-if)#mpls ip

最终在R1、R2、R3、R4上配置分别为:

R1:

r1(config)#int s0/1

r1(config-if)# mpls label protocol ldp

r1(config-if)#mpls ip

R2:

R2(config)#mpls label protocol ldp

R2(config)#int s0/0

R2(config-if)#mpls ip

R2(config-if)#exit

R2(config)#int s0/1

R2(config-if)#mpls ip

R3:

R3(config)#mpls label protocol ldp

R3(config)#int s0/0

R3(config-if)#mpls ip

R3(config-if)#exit

R3(config)#int s1/1

R3(config-if)#mpls ip

R4:

R4(config)#int s0/1

R4(config-if)#mpls label protocol ldp

R4(config-if)#mpls ip

5、查看LDP信息

(1)查看哪些接口开启了LDP

(2)查看LDP详细信息

 

MPLS默认的一些hello、interval可以人工手动修改,但在配置时不建议去修改这些时间,在这里也不在介绍修改这些时间的命令

6、查看LDP邻居相关信息

(1)在R1上查看LDP discovery情况:

r1#sh mpls ldp discovery detail

Local LDP Identifier:
1.1.1.1:0

Discovery Sources:

Interfaces:

Serial0/1 (ldp): xmit/recv

Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 1.1.1.1

LDP Id: 2.2.2.2:0; no route to transport addr

Src IP addr: 12.1.1.2; Transport IP addr: 2.2.2.2

Hold time: 15 sec; Proposed local/peer: 15/15 sec

r1#

在以上输入中,我们可以看到一个local LDPIdentifier,这是每台路由必须有的,这个ID用6个字节表示,前4个字节称为ROUTER-ID,它的选举方法和OSPF选举方法相同,先选loopback地址最大的,然后是物理接口。后面两个字节表示标签空间,也就是说标签是基于设备还是基于接口,如果是基于设备,就是0;

还有一个Transport IP,这个IP默认是选用ROUTER-ID的地址,这个地址在建邻居时非常重要,是会话的源地址,如果这个地址双方没有路由可达,那么则不可能建立邻居。所以要保证邻居的正常建立,一定要保证双方的Transport IP路由是相通的。

从上面结果中还可以看出,R1已经收到了对方R2的hello,对方Transport IP是2.2.2.2,也就是对方的loopback0地址,而因为这个地址不在OSPF进程里,所以R1不能到达,也就不能建邻居,后面提示为“no route to transport addr”。

(2)在R2上查看LDP Discovery

r2#sh mpls ldp discovery detail

Local LDP Identifier: 2.2.2.2:0

Discovery Sources:
Interfaces:

Serial1/0 (ldp): xmit/recv

Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2

LDP Id: 3.3.3.3:0; no route to transport addr

Src IP addr: 23.1.1.3; Transport IP addr: 3.3.3.3

Hold time: 15 sec; Proposed local/peer: 15/15 sec

Serial1/1 (ldp): xmit/recv

Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2

LDP Id: 1.1.1.1:0; no route to transport addr

Src IP addr: 12.1.1.1; Transport IP addr: 1.1.1.1

Hold time: 15 sec; Proposed local/peer: 15/15 sec

r2#

R2的Rotuer-ID是2.2.2.2,这个地址也就是Transport IP,而R1的Transport IP是1.1.1.1,从上面也看出这两个地址是路由上互不相通的,所以不可能建立LDP邻居。

(3)解决邻居建立问题

要解决邻居建立问题,就要双方的transport ip可以相互通信,要解决这个问题有以下三种方法:

第一种方法是将双方的transport ip放入到OSPF进程中,让双方的地址可以相互通信。

第二种方法是由于Transport IP就是ROUTER-ID的IP地址,可以修改ROUTER-ID为可路由的接口,即可解决Transport IP互通的问题。

第三种方法是直接修改路由器的Transport IP的地址,router-id地址保持不变。通过这种方法需要重启进程才能生效。

下面通过第二种方法在R1上修改ROUTER-ID地址,通过第三种方法在R2上直接修改Transport IP的地址来实现双方建立邻居

修改R1 的ROUTER-ID为S0/1接口地址

r1(config)#mpls ldp router-id serial 0/1 force

force说明立即生效

直接修改R2的Transport IP地址

r2(config)#interface s0/1

r2(config-if)#mpls ldp discovery transport-address interface

r2(config-if)#exit

r2#clear mpls ldp neighbor *

全部修改完成后,查看R1、R2的效果:

查看R1修改ROUTER-ID的效果:

 

 

查看 R2修改Transport IP的效果:

 

 

查看R2的邻居,发现R1.R2已经正常建立邻居关系,并可以看到建立会话的端口为646

 

 

7、查看标签交换相关信息

以4.4.4.4/32这条路由为例,看别的路由器对这条路由的标签情况

(1)在R4上查看 LFIB,看路由4.4.4.4的情况

 

 

可以看出,R4上对自己直连接口的标签并没有出现在LFIB表中,因此该路由不需要进行标签交换。

(2)查看R4上CEF对4.4.4.4的处理情况

 

 

可以看出,R4的CEF对4.4.4.4这条路由打的本地标签是implicit-null,本地路由发给邻居之后,就成为了邻居的远程标签,所以邻居R3到达4.4.4.4的路由标签都应该是隐式空标签。

(3)查看R3的CEF对4.4.4.4的处理情况

 

4.4.4.4在R4上的本地标签(implicit-null)发给R3之后,就成为了R3的远程标签,可以看到,因为R4发来时是隐式空,所以R3就不能为4.4.4.4打任何标签,所以最终结果的空的。而R3对于4.4.4.4这条路由是要生成自己的本地标签的,因为自己要对这条路由使用标签交换,可以看到R3自己给4.4.4.4打的本地标签是19,那么这个标签发给别的邻居之后,就该变成远程标签19。

(4)查看R3的LFIB表

 

可以看到R3对于路由条目4.4.4.4的本地标签是19,这是要发给别人的,而出的标签是Pop tag,也就是要移除标签,也就是当R3收到邻居发来一个数据包,如果查看结果为顶部标签是19,那么自己就将该标签移除后,再从S0/1发出去。

(5)查看R3的FIB表

 

 

:LSR对于路由条目所有的标签都是保存在FIB表里的,用到的才放进LFIB,所以在LFIB表里将可能看到路由的多个标签,但是只有一个标签是正被使用的。其中inuse表示正在使用

(6)查看R2的LFIB表及CEF对4.4.4.4的处理情况

 

 

正因为R3收到标签为19的数据包,才会移除标签后从S0/1发给R4,所以R2肯定是应该将R3发来的本地标签19变成自己的远程标签19,以上结果也显示,R2对4.4.4.4打的出标签正是19,而本地标签是20,也就是说当R2收到一个顶部标签为20的数据包,就将标签换成19后从S0/0发出去,发出去正好就是发给了R3,而R3根据自己的处理最终发到R4。R2给4.4.4.4打的本地标签20,发给谁也就会变成谁的远程标签20。

(7)查看R1的LFIB表

 

(8)在R1上跟踪4.4.4.4的传输情况

 

8、路由条目的标签限制

在某些时候,并不希望LSR对相应的条目打上标签,那么就可以在LSR限制相应路由条目的标签通告或接收。

(1)限制标签接收

在R1上测试限制接收6.6.6.6的标签

r1(config)#access-list 6 permit 6.6.6.6

r1(config)#mpls ldp neighbor 12.1.1.2 labels accept 6

说明:只从邻居12.1.1.2那里接收ACL 6所允许的路由的标签,其他的不接收

查看配置标签限制后的LFIB

(2)限制标签发送

测试在R3上限制只发送6.6.6.6的标签给R2,其他的不发标签

r3(config)#access-list 2 permit 2.2.2.2 此地址必须为对方的Router-ID

r3(config)#access-list 6 permit 6.6.6.6 匹配路由条目

r3(config)#no mpls ldp advertise-labels

r3(config)#mpls ldp advertise-labels for 6 to 2 对相应邻居做相应限制

r3(config)#exi

在R2上查看配置后的结果

 

在R3上也可以看到配置效果

 

LDP邻居认证

说明:邻居之间可以配置相应密码,如果密码不同,则邻居无法建立。

(1)配置R2对R1使用密码cisco,如果R1无密码,则邻居失败:

r2(config)#mpls ldp neighbor 12.1.1.1 password 0 cisco

r2(config)#

r1(config)#mpls ldp neighbor 12.1.1.2 password 0 cisco

r1(config)#

从上述图中可以看出,当R2配置了密码而R1没有配置密码时,会提示无密码认证的错误消息,当R1配置了相同的密码后,则邻居恢复正常