OSPF有11种LSA,其中7类的LSA被用于特殊区域之中,OSPF属于链路状态协议,任何一台路由器都知道每一个LSA是始发于哪一台路由器,如果无法去往那台始发路由器,则会造成路由的不可用,本文就设计一个环境,用来探讨这个问题。
实验拓扑
环境介绍
- 按照如图所示配置好基础的环境。其中区域1是NSSA区域。
- R1上创建一个loopback接口,地址是172.16.10.1/24不宣告进OSPF。
- 在R1上通过重分布的方式将该环回接口放入OSPF。
- 在R2上禁止R1的地址进入其他区域。
- 观察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的路由表的。
总结
遇到这种问题,要善于观察,透过现象看本质,就可以发现问题的所在,然后利用各种网络资源,自己就可以搞定这样的问题了。