第3章 OSPF高级
一、不规则区域
区域划分
OSPF为了适应中大型网络环境,设计了区域划分的规则:
-
区域之间必须存在ABR设备(域间路由器)
-
区域划分必须满足星型结构划分
而不规则区域便没有满足星型结构的划分。
非骨干区域
OSPF的不规则区域:不连续骨干,远离骨干的 非骨干区域。
解决方法
-
物理连接一根线缆让远离骨干的非骨干区域直接连接到骨干区域中。
-
通过构建VPN隧道的方式去连接一根虚拟线缆,将区域连接在一起。
配置
首先按照拓扑图进行基础的IP配置。
# 配置环回接口模拟用户私网,域间路由器ABR不需要配置 [R1-LoopBack0]ip address 192.168.1.1 255.255.255.0 [R3-LoopBack0]ip address 192.168.3.1 255.255.255.0 [R5-LoopBack0]ip address 192.168.5.1 255.255.255.0 # 启动OSPF进程并进行范围宣告 [R1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255 [R2-ospf-1-area-0.0.0.1]network 23.0.0.0 0.0.0.255 [R3-ospf-1-area-0.0.0.1]network 23.0.0.0 0.0.0.255 [R3-ospf-1-area-0.0.0.1]network 34.0.0.0 0.0.0.255 [R3-ospf-1-area-0.0.0.1]network 192.168.3.0 0.0.0.255 [R4-ospf-1-area-0.0.0.1]network 34.0.0.0 0.0.0.255 [R4-ospf-1-area-0.0.0.2]network 45.0.0.0 0.0.0.255 [R5-ospf-1-area-0.0.0.2]network 45.0.0.0 0.0.0.255 [R5-ospf-1-area-0.0.0.2]network 192.168.5.0 0.0.0.255 # 检查OSPF路由表和邻居简表 [R1]display ip routing-table protocol ospf [R1]display ospf peer brief
此时我们发现R5一条OSPF信息都没有接收到,因为区域2是非骨干区域,我们在R2和R4之间构建一根VPN虚拟隧道,将区域0和区域2连通。这里我们为了简便,选择GRE协议进行封装。
# 建立隧道,注意源和目标IP为23和34网段IP [R2-Tunnel0/0/0]ip address 24.0.0.1 24 [R2-Tunnel0/0/0]tunnel-protocol gre [R2-Tunnel0/0/0]source 23.0.0.1 [R2-Tunnel0/0/0]destination 34.0.0.2 # R4 同理配置 [R4-Tunnel0/0/0]ip address 24.0.0.2 24 [R4-Tunnel0/0/0]tunnel-protocol gre [R4-Tunnel0/0/0]source 34.0.0.2 [R4-Tunnel0/0/0]destination 23.0.0.1 # 范围宣告,注意宣告在区域0 [R2-ospf-1-area-0.0.0.0]network 24.0.0.0 0.0.0.255 [R4-ospf-1-area-0.0.0.0]network 24.0.0.0 0.0.0.255 # 查询OSPF路由表检查 [R2]display ip routing-table protocol ospf [R4]display ip routing-table protocol ospf
通过让没有连接到骨干区域的路由器,和区域0中的路由器连接隧道,并且将隧道宣告在区域0中,使得ABR设备合法化。那么在这里,R2和R4就是合法的ABR域间路由器。
但是这样做的话又会有新的问题:
问题1:会额外建立邻居关系,导致产生周期性的数据(hello报文),需要通过隧道封装占用额外的资源。
问题2:选路不佳,开销值太大(选择走构建的虚拟链路而非物理链路)。
原因:域内路由>域间路由。隧道接口的开销值为1562,再加上R2到R1之间的开销值1就等于1563。
虚链路V-link
OSPF为了解决不规则区域的问题,专门提出了一个解决方案:V-link虚链路。
-
合法的ABR:同时属于多个区域,并且有接口宣告在区域0。
-
非法的ABR:同时属于多个区域,没有接口宣告在区域0。
而在上一个拓扑图中,很明显R2是合法的ABR,而R4是非法ABR。V-link永远属于区域 0,在合法和非法ABR之间进行配置。
命令
建立V-LINK链路,在建立V-LINK链路的设备所在的区域中配置。
注意:V-link peer 指定的是对端合法的ABR,同时合法的ABR设备也需要指定自身去认可的非法ABR设备。
vlink-peer [邻居设备RID]
查看虚链路V-link的信息
display ospf vlink
重定向,引入B协议的路由,使A协议获取到B协议的路由信息。也可以在同一协议的不同进程中进行,注意要进入A协议的进程中。
import-route [协议名] [进程号]
配置
这里我们对R2和R4分别进行配置,注意在区域1中配置。
# 建立V-link链路,指定邻居ABR的RID,让双方之间互相认可 [R2-ospf-1-area-0.0.0.1]vlink-peer 4.4.4.4 [R4-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2 # 此时在R5中查看OSPF路由表,发现R5成功获取区域0和区域1的路由信息;而其他区域的设备也同样能够获取到区域2的信息 [R5]display ip routing-table protocol ospf [R1]display ip routing-table protocol ospf # 查看虚链路V-link信息 [R2]display ospf vlink
局限性
-
虚链路只能跨越一个区域,本质原因就是V-link指定的对象是一个设备的RID(不是IP地址)。
-
周期性的数据还是存在,因为V-Link也会建立邻居。
所以一般情况下,V-Link只作为临时的解决方案。
多进程双向重分布
即启动一个新的协议进程,强制将两个设备的信息进行共享。
ASBR:同时运行了两款协议或者同一款协议但是不同进程的设备。
配置
此时我们删除区域2和R4、R5的相关配置,在R4上启动一个新的OSPF进程,相当于R4成为了ASBR。
### 启动新的协议进程 [R4]ospf 2 router-id 4.4.4.4 # 进入新的进程区域并范围宣告网段 [R4-ospf-2]area 0 [R4-ospf-2-area-0.0.0.0]network 45.0.0.0 0.0.0.255 # R5 同理配置 [R5]ospf 2 router-id 5.5.5.5 [R5-ospf-2]area 0 [R5-ospf-2-area-0.0.0.0]network 45.0.0.0 0.0.0.255 # 宣告环回网段 [R5-ospf-2-area-0.0.0.0]network 192.168.5.0 0.0.0.255 # 但是此时查看OSPF路由表发现R4只能获取R5的环回路由信息,而R5没有信息,因为R4左右两边是不同的协议进程,无法互通 [R5]display ip routing-table protocol ospf
双向重分布
这里我们在R4(ASBR)的进程1中引入进程2的路由信息,注意要进行双向引入,在不同进程中引入对方的协议路由信息。
### 双向重定向 [R4-ospf-1]import-route ospf 2 [R4-ospf-2]import-route ospf 1 # 此时我们查表R1,成功获取到R5进程2的路由信息 [R1]display ip routing-table protocol ospf
查看R1的OSPF表可以发现,链路路径的开销值都很小(Cost = 1),只不过是从其他协议学习/引入的路由信息,域外路由信息的优先级较高(可靠性较低)。
-
O_ASE:域外路由信息,即从其他协议/进程学习(引入)过来的路由。
-
Pre:优先级,在路径选择中选择优先级值小的路径通过。
-
域外路由的优先级默认是150
-
因为域外其他协议的情况不清楚,路由可靠性较低。
-
二、LSA通告
LSA的三元组唯一标识一条LSA通告,通过SPF(最短路径优先)算法计算得出路由,并将信息存储在LSDB中。
-
LSA:链路状态通告(拓扑信息)
-
LSDB:链路状态数据库
LSA三元组:
-
Type:LSA类型
-
Ls id:链路状态ID