1.目的
本文档针对 FortiGate 的 OSPF 动态路由协议说明。OSPF 路由协议是一种 典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由 域是指一个自治系统,即 AS,它是指一组通过统一的路由政策或路由协议互相交 换路由信息的网络。在这个 AS 中,所有的 OSPF 路由器都维护一个相同的描述 这个 AS 结构的数据库 , 该数据库中存放的是路由域中相应链路的状态信 息,OSPF 路由器正是通过这个数据库计算出其 OSPF 路由表的。作为一种链路 状态的路由协议,OSPF 将链路状态广播数据 LSA(Link State Advertisement)传 送给在某一区域内的所有路由器。
2.环境介绍
本文使用 4 台 FortiGate 进行说明 , 本文使用的系统版本为 FortiOS v4.0MR2 Patch8。
3.OSPF 介绍
3.1 DR 与 BDR 选举
DR--指定路由器,BDR--备份指定路由器。在动态路由协议中,配置在同一区 域内的路由器之间要互相学习链路状态信息,当所有同一区域内的设备都具有相 同的数据链路信息后就可以计算出正确的路由。如果每两台设备之间互相学习, 工作量非常大。为了减少工作量,在这个网络上的设备中选出一个作为 DR,所有 其他设备都只需要和这台这设备交互信息即可完成链路状态的学习。
DR,BDR 选举规则:
1.当选举 DR/BDR 的时候要比较 hello 包中的优先级,优先级最高的为 DR, 次高的为 BDR.
2.如果 OSPF 路由器的优先级,全部都是默认值 1,路由器默认通过 Router-ID, 选举 DR/BDR,如果 Router-ID 最大的成为 DR,次大的成为 BDR。其余的统统都 是 DR-other。如果路由 ID 未设置,则使用接口最大地址。
3.将优先级改为 0 的设备将永远不参与 DR 选举。
FortiGate 的优先级需要在命令行下配置
bash
config router ospf
set abr-type standard
config ospf-interface
edit "ex"
#配置 OSPF 接口
#编辑 OSPF 接口名称
set interface "port5"
set ip 192.168.118.233
set priority 10 #设置优先级
end
end
3.2 OSPF 邻居建立过程
1.Down:此状态还没有与其他路由器交换信息。首先从其 ospf 接口向外发送 hello 分组,还并不知道 DR(若为广播网络)和任何其他路由器。发送 hello 分组使 用组播地址 224.0.0.5。
2.Attempt: 只适于 NBMA 网络,在 NBMA 网络中邻居是手动指定的,在该状 态下,路由器将使用 HelloInterval 取代 PollInterval 来发送 Hello 包.
3.Init: 表明在 DeadInterval 里收到了 Hello 包,但是 2-Way 通信仍然没有建 立起来.
4.two-way: 双向会话建立,而 RID 彼此出现在对方的邻居列表中。(若为广 播网络:例如:以太网。在这个时候应该选举 DR,BDR)
5.ExStart: 信息交换初始状态 ,在这个状态下 ,本地路由器和邻居将建立 Master/Slave 关系,并确定 DD Sequence Number,路由器 ID 大的的成为 Master.
6.Exchange: 信息交换状态,本地路由器和邻居交换一个或多个 DBD 分组 (也叫 DDP) 。DBD 包含有关 LSDB 中 LSA 条目的摘要信息)。
7.Loading: 信息加载状态:收到 DBD 后,将收到的信息同 LSDB 中的信息 进行比较。如果 DBD 中有更新的链路状态条目,则向对方发送一个 LSR,用于请 求新的 LSA 。
8.Full: 完全邻接状态,邻接间的链路状态数据库同步完成,通过邻居链路状 态请求列表为空且邻居状态为 Loading 判断。
3.3 LSA 的类型
LSA(链路状态广播)是链接状态协议使用的一个分组,它包括有关邻居和通 道成本的信息。 LSAs 被接收路由器用于维护它们的路由选择表。 LSA: Link-State Advertisement。LSA 常用类型分为以下几种:
类型 1:Router LSA:每个路由器都将产生 Router LSA,这种 LSA 只在本区域 内传播,描述了路由器所有的链路和接口,状态和开销.
类型 2:Network LSA:在每个多路访问网络中,DR 都会产生 Network LSA,它 只在产生这条 Network LSA 的区域泛洪描述了所有和它相连的路由器。
类型 3:Network Summary LSA:由 ABR 路由器始发,用于通告该区域外部的 目的地址.当其他的路由器收到来自 ABR 的 Network Summary LSA 以后,它不会 运行 SPF 算法,它只简单的加上到达该 ABR 的开销和 Network Summary LSA 中包含的开销,通过 ABR,至目标地址的路由和开销一起被加进路由表里。
类型 4:ASBR Summary LSA:由 ABR 发出,ASBR 汇总 LSA 除了所通告的目 的地是一个 ASBR 而不是一个网络外,其他同 Network Summary LSA.
类型 5:AS External LSA:发自 ASBR 路由器,用来通告到达 OSPF 自治系统 外部的目的地,或者 OSPF 自治系统那个外部的缺省路由的 LSA.这种 LSA 将在 全 AS 内泛洪(4 个特殊区域除外)
类型 7:NSSA External LSA:来自非完全 Stub 区域(not-so-stubby area)内 ASBR 路由器始发的 LSA 通告它只在 NSSA 区域内泛洪,这是与 LSA-Type5 的 区别.
3.4 OSPF 的区域
主干区(backbone area):主干区是 OSPF 的主区域,每个 AS 内必须有主干区, 所有其他区域连接至主干区,2 个区域之间需要传递路由信息,也将经过主干区域。 主干区拥有 AS 内部及外部路由。主干区域以 IP 地址 0.0.0.0 标识,即 area 0
常规区(regular area):连接至主干区域,不转发其他区域路由,仅拥有 AS 内部 路由。
末梢区域(stub area):只有一个区域相连的非骨干区域,不接受自治系统外部 的 LSA(类型 5),仅拥有本区域路由,使用默认路由访问其他区域及 AS 外部。
非完全末梢区域(NSSA):允许外部路由通告到 ospf 自治系统内部,而同时保 留自治系统其余部分的末梢区域部分,并将从 NSSA 收到的 AS 外部路由 LSA 7 转通过 ABR 换为 LSA5 通告给 AS 内部,拥有本区及外部路由。
4.FortiGate OSPF 配置
4.1 GateA 配置
4.2 GateB 配置
4.3 GateC 配置
4.4 配置完成后各个 Gate 路由表
GateA OSPF 路由表
GateB OSPF 路由表
GateC OSPF 路由表
4.5 通过命令查看 OSPF 状态
查看 OSPF 邻居状态
bash
GateA # get router info ospf neighbor OSPF process 0:
Neighbor ID Pri State Dead Time Address
Interface
0.0.0.8 1 Full/DROther 00:00:31 192.168.118.233 port1
0.0.0.9 1 Full/Backup 00:00:40 192.168.118.235 port1
GateA # get router info ospf route
C 172.16.1.0/24 [10] is directly connected, port5, Area 0.0.0.1
IA 172.16.2.0/24 [20] via 192.168.118.235, port1, Area 0.0.0.0
IA 172.16.3.0/24 [20] via 192.168.118.233, port1, Area 0.0.0.0
C 192.168.118.0/24 [10] is directly connected, port1, Area 0.0.0.0
5.OSPF 路由重发布
路由重发布可将其他路由协议以外部路由方式引入到 OSPF 网络当中 ,如将 GateC 中的直连路由发布至 OSPF 网络。
重发布后的 GateA,B,C 路由表
GateA 路由表
GateB 路由表
GateC 路由表
6.Total stub 与 Total NSSA
Total Stub 与 NSSA 同普通 Stub,NSSA 区域的区别在于,Total stub,nssa 不 接收 LSA3,LSA4 的路由更新。可以通过命令行将其配置不接受汇总路由的更新。
bash
Total stub 配置
config router ospf
config area
edit 0.0.0.2
set stub-type no-summary #关闭汇总路由更新
set type stub next
end
end
Total NSSA 配置
config router ospf
config area
edit 0.0.0.3
set stub-type no-summary #关闭汇总路由更新
set type nssa next
end
end
7.OSPF 的 Troubleshooting
bash
查看 OSPF 协议状态
get router info ospf status
查看 OSPF 邻居信息及状态 get router info ospf neighbor 查看 OSPF 接口状态信息
get router info ospf interface 查看 OSPF 路由表
get router info ospf route 重启 OSPF 进程
execute router clear ospf process
详尽的 debug 信息可通过以下命令开启。
GateA # diagnose ip routerospf all all OSPF debug
events OSPF Events
ifsm OSPF Interface State Machine
level debug level
lsa OSPF Link State Advertisement
nfsm OSPF Neighbor State Machine
nsm OSPF NSM information
packet OSPF Packets
route OSPF route information
show show status of ospf debugging
开启 events 事件,关闭 debug,可以输入 diagnose debug disable
GateA # diagnose ip routerospf level info GateA # diagnose ip routerospf events en GateA # diagnose debug enable
GateA # id=36870 msg="OSPF: LSA[0.0.0.0:Type3: 172.16.2.0:0.0.0.9]: Instance(0xbffffa64) created with Link State Update"
id=36870 msg="OSPF: LSA[0.0.0.0:Type1:0.0.0.8:0.0.0.8]: Instance(0xbffffa64) created with Link State Update