OSPF抑制7类LSA的转发


OSPF有11种LSA,其中7类的LSA被用于特殊区域之中,OSPF属于链路状态协议,任何一台路由器都知道每一个LSA是始发于哪一台路由器,如果无法去往那台始发路由器,则会造成路由的不可用,本文就设计一个环境,用来探讨这个问题。

实验拓扑

环境介绍

  1. 按照如图所示配置好基础的环境。其中区域1是NSSA区域。
  2. R1上创建一个loopback接口,地址是172.16.10.1/24不宣告进OSPF。
  3. 在R1上通过重分布的方式将该环回接口放入OSPF。
  4. 在R2上禁止R1的地址进入其他区域。
  5. 观察R4的路由表,并且找到解决方法。

基础配置

R1的配置

interface Loopback0
 ip address 1.1.1.1 255.255.255.0
 ip ospf 1 area 1
!
interface Loopback10
 ip address 172.16.10.1 255.255.255.0
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
 ip ospf 1 area 1
!
router ospf 1
 area 1 nssa
 redistribute connected subnets

R2的配置

interface Loopback0
 ip address 2.2.2.2 255.255.255.0
 ip ospf 1 area 0
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
 ip ospf 1 area 1
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
 ip ospf 1 area 0
!
router ospf 1
 area 1 nssa

R3的配置

interface Loopback0
 ip address 3.3.3.3 255.255.255.0
 ip ospf 1 area 0
!
interface Ethernet0/0
 ip address 192.168.23.3 255.255.255.0
 ip ospf 1 area 0
!
interface Ethernet0/1
 ip address 192.168.34.3 255.255.255.0
 ip ospf 1 area 2

R4的配置

interface Loopback0
 ip address 4.4.4.4 255.255.255.0
 ip ospf 1 area 2
!
interface Ethernet0/1
 ip address 192.168.34.4 255.255.255.0
 ip ospf 1 area 2

操作和观察

首先观察R4的OSPF路由表

R4#sh ip route ospf
O IA 192.168.12.0/24 [110/30] via 192.168.34.3, 00:16:42, Ethernet0/1
     1.0.0.0/32 is subnetted, 1 subnets
O IA    1.1.1.1 [110/31] via 192.168.34.3, 00:15:22, Ethernet0/1
     2.0.0.0/32 is subnetted, 1 subnets
O IA    2.2.2.2 [110/21] via 192.168.34.3, 00:20:37, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
O IA    3.3.3.3 [110/11] via 192.168.34.3, 00:20:37, Ethernet0/1
     172.16.0.0/24 is subnetted, 1 subnets
O E2    172.16.10.0 [110/20] via 192.168.34.3, 00:15:17, Ethernet0/1
O IA 192.168.23.0/24 [110/20] via 192.168.34.3, 00:20:37, Ethernet0/1

目前路由表属于正常的状态,下面我们想办法让1.1.1.1的条目消失。大家应该都还记得area range这个命令吧,是在ABR上用来汇总本区域的路由的,其实这条命令也有禁止路由的用法,在R2上输入如下命令:

R2(config)#router ospf 1
R2(config-router)#area 1 range 1.1.1.1 255.255.255.255 not-advertise

目前我们已经禁止了1.1.1.1这个条目离开区域1了,下面我们去R4上确认一下是不是成功了。

R4#sh ip route ospf
O IA 192.168.12.0/24 [110/30] via 192.168.34.3, 00:19:30, Ethernet0/1
     2.0.0.0/32 is subnetted, 1 subnets
O IA    2.2.2.2 [110/21] via 192.168.34.3, 00:23:24, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
O IA    3.3.3.3 [110/11] via 192.168.34.3, 00:23:24, Ethernet0/1
O IA 192.168.23.0/24 [110/20] via 192.168.34.3, 00:23:24, Ethernet0/1

我们可以发现R4上面确实1.1.1.1这条条目不见了,但是另外一条172.16.10.0/24的路由也不见了,但是我们并没有禁止这个条目。下面我们查看一下OSPF的数据库。

R4#sh ip ospf database external 
            OSPF Router with ID (4.4.4.4) (Process ID 1)
                Type-5 AS External Link States
  LS age: 1186
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 172.16.10.0 (External Network Number )
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000003
  Checksum: 0xE5E5
  Length: 36
  Network Mask: /24
        Metric Type: 2 (Larger than any link state path)
        TOS: 0 
        Metric: 20 
        Forward Address: 1.1.1.1
        External Route Tag: 0

可以发现这个172.16.10.0在OSPF的数据库中好着呢,那为啥路由表里面消失不见了,请注意倒数第二行,这边有个forward address的值,OSPF会去检查转发地址是否存在,如果不存在了,那么这条LSA是不会被OSPF放进路由表的。

解决方法

在这张图里面,本来172.16.10.0是7类的LSA进入到NSSA区域,然后由R2转换成5类的LSA再传递向其他的区域,但是R2在转换的时候,并没有修改默认的Forward Address,所以导致其他路由器如果因为某种原因无法学习到这个转发地址,就会无法访问OSPF的外部条目,解决这个问题的关键就在于R2。让R2翻译7类LSA的命令如下:

R2(config)#router ospf 1
R2(config-router)#area 1 nssa translate type7 suppress-fa

然后我们再来看R4的OSPF路由表

R4#sh ip route ospf
O IA 192.168.12.0/24 [110/30] via 192.168.34.3, 00:26:19, Ethernet0/1
     2.0.0.0/32 is subnetted, 1 subnets
O IA    2.2.2.2 [110/21] via 192.168.34.3, 00:30:13, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
O IA    3.3.3.3 [110/11] via 192.168.34.3, 00:30:13, Ethernet0/1
     172.16.0.0/24 is subnetted, 1 subnets
O E2    172.16.10.0 [110/20] via 192.168.34.3, 00:00:36, Ethernet0/1
O IA 192.168.23.0/24 [110/20] via 192.168.34.3, 00:30:13, Ethernet0/1

我们就可以发现172.16.10.0这个条目回来了,但是1.1.1.1这个条目没有了。我们再查看OSPF的数据库。

R4#sh ip ospf database external 
            OSPF Router with ID (4.4.4.4) (Process ID 1)
                Type-5 AS External Link States
  Routing Bit Set on this LSA
  LS age: 88
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 172.16.10.0 (External Network Number )
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000004
  Checksum: 0xB11D
  Length: 36
  Network Mask: /24
        Metric Type: 2 (Larger than any link state path)
        TOS: 0 
        Metric: 20 
        Forward Address: 0.0.0.0
        External Route Tag: 0

可以发现Forward Address发生了改变,变成了0.0.0.0,而0.0.0.0的意思就是指的发送这个LSA的那台路由器自己,再看一下是哪台路由器发送的这个LSA,Advertising Router显示的是2.2.2.2,所以2.2.2.2是可达的,那么这个LSA的条目是可以经过SPF计算后放入OSPF的路由表的。

总结

遇到这种问题,要善于观察,透过现象看本质,就可以发现问题的所在,然后利用各种网络资源,自己就可以搞定这样的问题了。


文章作者: AaronXu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AaronXu !
评论
 上一篇
自己失误而导致isis无法att置位的事件 自己失误而导致isis无法att置位的事件
在做isis的route leaking的实验的时候,发现了一个诡异的现象,然后查遍了cisco的文档,以及RFC 1142都没找到任何的不对的地方,最后发现是自己的一个小失误导致的,从而对isis的OSI编址在路由器中的识别方式有了新的认
下一篇 
EIGRP的默认缺省路由 EIGRP的默认缺省路由
EIGRP是思科创造的路由协议(思科在2013年将该协议公有化),这个协议的优点很多,但是给人最大的感触就是收敛速度真的很快,比常见的OSPF或者IS-IS协议都快的多,但是EIGRP本身并没有提供发布缺省路由的命令,只能通过其他的方式来
  目录