IT傻博士 2008-5-7 15:54
由OSPF 32位主机路由引起的MPLS标签分发问题
本文档由ITAA学习情报小组原创,大家看着好就请把此帖顶起来
本实验服务商网络R1/R2/R3/R4均匀行OSPF,环回口地址为x.x.x.x/32,如果不慎配置为x.x.x.x/24,则OSPF仍会以/32形式通告环回口网络,因此引发的标签分发问题如下:
1、路由器收不到自身FIB表的下游标签
以R4为例,标签表LIB:
R4#show mpls ip binding
1.1.1.0/24 收到/24位的路由标签,该标签来自R1(R1自身按照直连接口安装路由)
out label: imp-null lsr: 1.1.1.1:0
1.1.1.1/32 收到/32位路由的标签,因为R2/R3FIB表均为/32位路由
in label: 16
out label: 19 lsr: 3.3.3.3:0
out label: 19 lsr: 2.2.2.2:0
!这里R1自然不会通告1.1.1.1/32的标签。
4.4.4.0/24
in label: imp-null
4.4.4.4/32 (no route) 在R4上并没有自身的/32位路由
in label: imp-null
out label: 20 lsr: 3.3.3.3:0
out label: 20 lsr: 2.2.2.2:0
out label: 22 lsr: 1.1.1.1:0
(后面省略)
R4的FIB表:
R4#show ip route ospf
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/11] via 14.1.1.1, 00:03:57, Ethernet0/0.14
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/11] via 24.1.1.2, 00:03:57, Ethernet0/0.24
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/11] via 34.1.1.3, 00:03:57, Ethernet0/0.34
23.0.0.0/24 is subnetted, 1 subnets
O 23.1.1.0 [110/20] via 24.1.1.2, 00:03:57, Ethernet0/0.24
[110/20] via 34.1.1.3, 00:03:57, Ethernet0/0.34
结合FIB+LIB表,形成的LFIB表如下:
R4#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Untagged 1.1.1.1/32 0 Et0/0.14 14.1.1.1
17 Untagged 2.2.2.2/32 0 Et0/0.24 24.1.1.2
18 Untagged 3.3.3.3/32 0 Et0/0.34 34.1.1.3
19 Pop tag 23.1.1.0/24 0 Et0/0.24 24.1.1.2
Pop tag 23.1.1.0/24 0 Et0/0.34 34.1.1.3
R4并没有收到1.1.1.1/32,2.2.2.2/32,3.3.3.3/32的下游标签,因此形成的LFIB表,对于这几个条目,均表示为Untagged ,这代表收到对应数据包之后,要将MPLS外层标签剥掉。这个剥掉和PHP不同,PHP剥掉标签之后,往最后1跳转,在标签转发表里显示为Pop tag,而Untagged则会进一步读该数据报。
2、MPLS外层剥掉之后,读到内层VPN标签,对于中间P路由器来说,是无法正确识别的,因此丢包。从客户站点R5 ping R6,在P路由器可见:
R4#debug mpls drops
MPLS drops debugging is on
*Apr 26 16:51:48.135: tagsw_replace_header: Pkt drop -- EoS conflict, incg label 17 hwinput Et0/0
解决办法:A、将接口IP子网掩码设置为/32
或者:B、在环回口下配置ip ospf network point-to-point
该问题具备很强的隐蔽性,特别在路由较多的时候,不易直接发现。因此不要认为消除主机路由是可有可无的,也不要认为将环回口全部配置为/32位子网掩码,仅仅是为了节省一点点地址空间这么简单,在实际的应用中,类似的问题会层出不穷,训练严谨的配置习惯,少用省略法。
[[i] 本帖最后由 IT傻博士 于 2008-5-7 16:02 编辑 [/i]]