实验拓扑
配置IP,必须在每个路由器上配置lo0
略
配置OSPF,把所有的接口都宣告进OSPF
R1
router ospf 1
network 1.1.1.0 0.0.0.255 area 0
network 192.168.12.0 0.0.0.255 area 0
===========================================
R2
R2(config)#int range e0/0 -1 , lo0
R2(config-if-range)#ip ospf 1 area 0
=========================================
R3
R3(config)#int lo0
R3(config-if)#ip ospf 1 area 0
R3(config-if)#int e0/0
R3(config-if)#ip ospf 1 area 0
R3(config-if)#int e0/1
R3(config-if)#ip ospf 1 area 0
========================================
R4
R4(config)#int range lo0 , e0/0
R4(config-if-range)#ip ospf 1 area 0
检查,在任意路由器上,检查路由学习的状况。
R2#show ip route ospf
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/11] via 192.168.12.1, 00:02:22, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/11] via 192.168.23.3, 00:01:16, Ethernet0/1
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/21] via 192.168.23.3, 00:00:07, Ethernet0/1
O 192.168.34.0/24 [110/20] via 192.168.23.3, 00:00:07, Ethernet0/1
OSPF简介
- OSPF在Cisco设备上的管理距离为110
- OSPF使用cost作为度量值,计算公式是
- 参考单位(默认是10^5^Kbit/sec)/链路更新消息入口的带宽=开销(Cost)
- OSPF计算度量值是累加每个LSA入口
- 在计算的时候,cost没有小数,超出就进1,并且要加上IP所在的接口的开销(cost)
- 查看接口带宽信息
show int e0/0
- 参考单位建议修改为本网络中最大的带宽,不然1Gbps和100Mbps将会都是1
- 比如改为1Gbps,在OSPF的协议配置模式下
auto-cost reference-bandwidth 1000
- 链路状态的工作原理
- 首先每个路由对自己的链路状态进行描述,产生LSA(链路状态通告)
- 邻居之间互相交换自己产生和学习到的LSA,最终都存在数据库中
- 通过数据库中链路状态的信息,开始绘画拓扑图,就像下图
- 根据拓扑,使用SPF(最短路径优先)算法计算出每个目的地的最佳路径下一跳,然后放入路由表,完成网络收敛。
- 网络收敛完成,指的是路由表进入稳定状态。
- OSPF协议号为89,这个是携带在OSPF消息的IP报头中的,用于提示解封装的时候,采用89号(OSPF)结构去解析后续的二进制。
- 由于OSPF无法修改别人的LSA信息,每个路由器收到的都是原始信息,并且可以计算得到完整拓扑,所以不存在RIP协议中道听途说导致信息失误的可能。并且SPF算法可以保障无环路。
三张表
邻居表
R2#sh ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 1 FULL/DR 00:00:37 192.168.23.3 Ethernet0/1
1.1.1.1 1 FULL/BDR 00:00:35 192.168.12.1 Ethernet0/0
Neighbor ID:邻居的Router-ID
Pri:优先级
State:邻居状态/接口的角色
Dead Time:死亡时间,一个40s倒计时的计时器,每次收到ospf的hello消息(10s一次)就会重置
Interface:建立邻居的接口
链路状态数据库
每个区域中的路由器都有该区域的链路状态数据库。如果是ABR,那么就有两个区域的数据库。
R2#sh ip ospf database
OSPF Router with ID (2.2.2.2) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
1.1.1.1 1.1.1.1 26 0x80000004 0x00718B 3
2.2.2.2 2.2.2.2 25 0x80000003 0x0014DF 3
Summary Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
3.3.3.3 2.2.2.2 11 0x80000001 0x0031EC
192.168.23.0 2.2.2.2 44 0x80000001 0x0002A8
Router Link States (Area 1)
Link ID ADV Router Age Seq# Checksum Link count
2.2.2.2 2.2.2.2 19 0x80000003 0x00C12D 2
3.3.3.3 3.3.3.3 20 0x80000002 0x00D5F8 3
Summary Net Link States (Area 1)
Link ID ADV Router Age Seq# Checksum
1.1.1.1 2.2.2.2 21 0x80000001 0x008D98
2.2.2.2 2.2.2.2 52 0x80000001 0x00FA31
192.168.12.0 2.2.2.2 52 0x80000001 0x007B3A
- 不同的OSPF进程,数据库也是互相之间隔离
- 不同区域的OSPF数据库内容,也是会分开存放
- 同一个区域的OSPF数据库内容,不同类别也是分来存放
- 数据库中大致内容
- Link ID
- 链路的ID,可以理解为各种目的地
- ADV Router
- 这条数据库信息的来源路由器的Router-ID
- Age
- LSA的寿命,数据库每一条都是一个LSA信息。
- 秒数,最大是3600秒,然后这条LSA就会被删除
- 稳定情况下OSPF会每隔1800秒,将数据库中自己的条目更新给所有的邻居一遍,来刷新他们的数据库
- 如果数据库发生了变化,会立即触发更新
- Seq
- 序列号,每次收到相同Link ID 的LSA更新,就回将Seq加1
- 序列号的范围是0x80000001~0x7fffffff
- 如果序列号变成0x7fffffff之后,再次更新条目,就变成了0x80000000,OSPF会认为这个编号是一种错误,然后就不会使用,直到下一个1800s到来,序列号变为0x80000001才会正常。
- Checksum
- LSA的校验值
- Link ID
OSPF名词
router-id
- 运行OSPF的路由器都会互相之间转发链路状态,为了让OSPF路由器收到这些链路状态的时候,可以对节点进行标注,所以都需要产生一个唯一的Route-id,类似于路由器的名字。不过是IP地址格式的。
- Route-id的选举顺序
- 手动指定
- 自动选举
- 优先选择环回接口IP地址大的作为route-id
- 没有环回接口的情况下,优选物理接口IP地址大的作为route-id
- 为了稳定性,route-id在ospf启动的时候就被选中,并且在重启ospf进程之前,都不会变化,哪怕手动指定都不会影响route-id。
DR/BDR
当OSPF路由器在一个多路访问网络(MA)情况下,相互建立邻居关系,会导致频繁的重复更新链路状态信息,如下拓扑
当某台路由器链路状态信息发生变化的时候,会通告给自己所有的邻居,也就是R1会更新给R2和R3,然而R2的链路状态信息发生了变化,也会通告给自己所有的邻居,也就是更新给R3,R3也会做同样的事情。
在这种网络情况下,OSPF为了方式不必要的更新,选出来一个指定路由器(DR),当非指定路由器(DR other)的链路信息发生变化的时候,首先更新给DR,再由DR更新给其他的路由器。
为了防止DR故障导致更新不及时,还在这个内网选出一个作为备用指定路由器(BDR)。
- 虽然是说指定**路由器**,但是这个DR是接口的角色,一台路由器不同的接口可以属于不同的角色
DR/BDR选举顺序
- 比较优先级,默认优先级是1,可以手动修改
- 优先级无法判断出来,就根据route-id的大小来判断,最大的成为DR
- BDR是在DR选出来之后,在剩下的路由器里面按照上面两个的规则选出
DR一旦被选中,除非DR故障,不然不会再变化。也就是DR和BDR角色不会被抢占。
R3#sh ip ospf int e0/0
---------省略-------------
Transmit Delay is 1 sec, State DR, Priority 1
---------省略-------------
- 上面的拓扑,我们修改R1的优先级,改完之后,需要重置R3的ospf来主动放弃DR身份
interface Ethernet0/0
ip ospf priority 10
如果OSPF接口优先级为0,那么将会直接放弃自己的DR或者BDR身份,并且不再参与选举,哪怕一个DR都没有,自己都不会做的DR或者BDR。
这么做完以后,R2成为DR。因为DR故障了,一定是BDR成为DR,然后剩下的路由器重新选举一个BDR。
DR和BDR会监听
224.0.0.5
和224.0.0.6
这两个组播地址,其他路由器只会监听224.0.0.5
这个组播地址。当需要更新消息的时候,会发送给
224.0.0.6
这样DR和BDR就收到更新,DR在收到之后会发送给224.0.0.5
这个地址,之后本广播域所有的路由器都可以学习到更新。
邻居建立过程
- Down
- Init
- 当路由器收到了对方的Hello消息,但是却没有在Hello消息中看到自己的Router-ID
- Two-way
- 在收到的Hello消息中,发现了自己和邻居的Route-ID,表示对方也发现自己,建立了双向通信。
- 开始选举DR和BDR,由于不能保证所有路由器启动OSPF时间一样的,所以这个状态会有一个Wait time,默认是40s。
- 我们可以修改OSPF接口的网络类型,避免在点对点链路上OSPF的2way等待时间,在接口上配置
ip ospf network point-to-point
- Exstart
- 交换不携带数据的DBD消息,通过消息中router-id的大小来选择谁主导这个过程
- route-id数值大的,会来主导,成为master,其他slave路由器在接下的步骤需要配合master
- Exchange
- slave路由器将自己链路状态数据库的描述信息发送给master
- master会比对自己的链路状态数据库,然后将对方需要的内容描述信息发回去。
- Loading
- 根据上一步的摘要,开始交换完整的LSA(链路状态通告)数据库信息
- Full
- 初步数据库同步完成,进入正常的邻居状态
- Hello消息维持关系
- 触发更新,当链路状态数据库发生变化的时候,会更新
建立邻居的条件
- 相邻两台路由器运行OSPF协议(至少是逻辑上相连)
- 两台路由器直接连接(至少是逻辑上直接连接)
- 在同一个自制系统(在OSPF中表现不明显,因为OSPF后面加上的是进程号,不同进程号之间是可以建立邻居)
- Hello/Dead时间一致(这个时间会在hello包中被携带)
- 区域ID一致
- 认证密码一致
- MTP值一致
消息类型
消息类型 | 描述 |
---|---|
Hello | 发现OSPF的邻居,维护邻居关系,在Hello中会携带OSPF的基本信息, 比如自己和邻居的Route-ID,区域ID,认证信息等等其他的基本信息。 |
DBD | DataBase Description 这种消息有两种, 一个是不携带任何的数据,只有一个报头,主要用于在exstart状态的时候判断谁来主导信息交换过程 第二种是携带链路状态数据库的描述信息,可以理解为书的目录 |
LSR | Link State Request 用于请求完整的链路状态数据信息 |
LSU | Link State Upadte 用于发送完整的链路状态数据信息 |
LSAck | Link State Ack 用于确认收到消息,来保障可靠传输 |
OSPF多区域
由于SPF算法会消耗一定资源,如果OSPF网络过于庞大,会导致OSPF资源快速消耗,解决这个问题最好的方案就是划分区域,每个区域的路由器只需要负责计算自己这个区域的拓扑即可。
对于数据转发的过程来说,在本区域中可以得到全区拓扑,如果目的地不是本区域,只需要知道怎么跨越区域边界,到达目标所在区域即可,不需要知道那个区域的拓扑。
OSPF为了防止分区域过于零碎,导致部分区域的路由无法被其他区域学到,OSPF规定了两种区域
- 骨干区域:区域号必须是
0
或者0.0.0.0
,骨干区域负责所有非骨干区域之间的数据传递。 - 非骨干区域:区域号可以是非0的其他数字,非骨干区域必须要和骨干区域相连。
OSPF还规定两种不同的路由器角色:
- 区域边界路由器: area border router(简称ABR)
- 至少有一个接口属于骨干区域,一个接口属于非骨干区域
- 自制系统边界路由器:autonomous system boundary router(简称ASBR)
- 需要引入OSPF外部的路由条目
将上面的拓扑进行更改
R2#sh ip route ospf
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/11] via 192.168.12.1, 00:10:49, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/2] via 192.168.23.3, 00:10:54, Ethernet0/1
4.0.0.0/32 is subnetted, 1 subnets
O IA 4.4.4.4 [110/12] via 192.168.23.3, 00:09:40, Ethernet0/1
O IA 192.168.34.0/24 [110/11] via 192.168.23.3, 00:10:28, Ethernet0/1
路由表中,标注了O
的条目是本区域的,标注了O IA
是其他区域学来的。
OSPF区域各种组合
如果把区域改成这样
查看R2和R1的路由表
R2#sh ip route ospf
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/11] via 192.168.12.1, 00:02:53, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/2] via 192.168.23.3, 00:00:27, Ethernet0/1
4.0.0.0/32 is subnetted, 1 subnets
O IA 4.4.4.4 [110/12] via 192.168.23.3, 00:00:07, Ethernet0/1
O IA 192.168.34.0/24 [110/11] via 192.168.23.3, 00:00:27, Ethernet0/1
====================================================================
R1#sh ip route
1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 1.1.1.0/24 is directly connected, Loopback0
L 1.1.1.1/32 is directly connected, Loopback0
192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.12.0/24 is directly connected, Ethernet0/0
L 192.168.12.1/32 is directly connected, Ethernet0/0
R1#sh ip ospf nei
Neighbor ID Pri State Dead Time Address Interface
2.2.2.2 0 FULL/ - 00:00:37 192.168.12.2 Ethernet0/0
观察到R1和R2的邻居关系是正常的,但是R1无法学习到其他区域的路由。
观察R2和R3的路由信息概述
R2#sh ip protocols
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 2.2.2.2
Number of areas in this router is 2. 2 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
Routing on Interfaces Configured Explicitly (Area 1):
Loopback0
Ethernet0/1
Routing on Interfaces Configured Explicitly (Area 2):
Ethernet0/0
Routing Information Sources:
Gateway Distance Last Update
3.3.3.3 110 00:01:47
4.4.4.4 110 00:03:21
1.1.1.1 110 00:04:33
Distance: (default is 110)
===================================================
R3#sh ip protocols
---------省略----------
It is an area border router
---------省略----------
发现R2并没有成为ABR,所以R2无法帮助R1去学习其他区域的路由。
解决区域断连
非骨干区域如果没有和骨干区域直接相连,称为区域断连。
解决方案1:虚链路
我们在R2和R3之间建立一个虚拟的连接,然后这个虚拟的连接属于area 0
R2(config)#router ospf 1
R2(config-router)#area 1 virtual-link 3.3.3.3
检查虚链路邻居关系,还有R2是否成为ABR
R2#sh ip ospf nei
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 0 FULL/ - 00:00:01 192.168.23.3 OSPF_VL0
3.3.3.3 0 FULL/ - 00:00:32 192.168.23.3 Ethernet0/1
1.1.1.1 0 FULL/ - 00:00:35 192.168.12.1 Ethernet0/0
R2#show ip ospf virtual-links
Virtual Link OSPF_VL0 to router 3.3.3.3 is up
R2#show ip protocols
------省略-----------
Router ID 2.2.2.2
It is an area border router
------省略-----------
再次查看R1的路由表
R1#show ip route ospf
2.0.0.0/32 is subnetted, 1 subnets
O IA 2.2.2.2 [110/11] via 192.168.12.2, 00:03:45, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O IA 3.3.3.3 [110/12] via 192.168.12.2, 00:03:45, Ethernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O IA 4.4.4.4 [110/22] via 192.168.12.2, 00:02:32, Ethernet0/0
O IA 192.168.23.0/24 [110/11] via 192.168.12.2, 00:03:45, Ethernet0/0
O IA 192.168.34.0/24 [110/21] via 192.168.12.2, 00:02:32, Ethernet0/0
ospf通过虚链路学习到的LSA是没有老化时间的,邻居关系不需要hello来维持,所以及时一端加了认证或者发生了变动,也不能及时发现。
解决方案2:VPN
可以在R2和R3之间打通一条虚拟专用网络,这个虚拟专用网络的隧道我们加入OSPF area 0,这样R2一样成为ABR
在R2和R3上打通一条IPIP隧道,并且加入area 0
interface Tunnel0
ip address 172.16.23.3 255.255.255.0
ip ospf 1 area 0
tunnel source Ethernet0/0
tunnel mode ipip
tunnel destination 192.168.23.2
检查邻居关系
R2#sh ip ospf nei
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 0 FULL/ - 00:00:38 172.16.23.3 Tunnel0
3.3.3.3 0 FULL/ - 00:00:39 192.168.23.3 Ethernet0/1
1.1.1.1 0 FULL/ - 00:00:36 192.168.12.1 Ethernet0/0
R2#show ip protocols
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 2.2.2.2
It is an area border router # R2满足了ABR的条件
Number of areas in this router is 3. 3 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
Routing on Interfaces Configured Explicitly (Area 0): # 可以看到area 0的情况
Tunnel0
Routing on Interfaces Configured Explicitly (Area 1):
Loopback0
Ethernet0/1
Routing on Interfaces Configured Explicitly (Area 2):
Ethernet0/0
Routing Information Sources:
Gateway Distance Last Update
3.3.3.3 110 00:00:18
4.4.4.4 110 00:00:18
1.1.1.1 110 00:00:22
Distance: (default is 110)
查看R1的路由表
R1#sh ip route ospf
2.0.0.0/32 is subnetted, 1 subnets
O IA 2.2.2.2 [110/11] via 192.168.12.2, 00:01:04, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O IA 3.3.3.3 [110/12] via 192.168.12.2, 00:01:04, Ethernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O IA 4.4.4.4 [110/1021] via 192.168.12.2, 00:01:04, Ethernet0/0
172.16.0.0/24 is subnetted, 1 subnets
O IA 172.16.23.0 [110/1010] via 192.168.12.2, 00:01:03, Ethernet0/0
O IA 192.168.23.0/24 [110/11] via 192.168.12.2, 00:01:04, Ethernet0/0
O IA 192.168.34.0/24 [110/1020] via 192.168.12.2, 00:01:04, Ethernet0/0
LSA类别
LSA类别 | 说明 |
---|---|
1 | 路由器LSA |
2 | 网络LSA |
3 | 网络汇总LSA |
4 | ASBR汇总LSA |
5 | AS外部LSA |
6 | 组成员LSA |
7 | NSSA区域外部LSA |
8 | 外部属性LSA |
9 | Opaque LSA(链路本地范围) |
10 | Opaque LSA(本地区域范围) |
11 | Opaque LSA(AS范围) |
Router Link States(type 1)
每个路由器针对它所在的区域产生LSA1,描述区域内部与路由器直连的链路的信息(包括链路类型,Cost等)
LSA1只允许在本区域内洪泛,不允许跨越ABR
LSA中会标识路由器是否是ABR(B比特置位),ASBR(E比特置位)或者是Virtual-link(V比特置位)的端点的身份信息
R1#sh ip ospf database router 2.2.2.2
OSPF Router with ID (1.1.1.1) (Process ID 1)
Router Link States (Area 0)
LS age: 55
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 2.2.2.2
Advertising Router: 2.2.2.2
LS Seq Number: 80000006
Checksum: 0x7739
Length: 84
Number of Links: 5
Link connected to: a Stub Network
(Link ID) Network/subnet number: 2.2.2.2
(Link Data) Network Mask: 255.255.255.255
Number of MTID metrics: 0
TOS 0 Metrics: 1
Link connected to: another Router (point-to-point)
(Link ID) Neighboring Router ID: 3.3.3.3
(Link Data) Router Interface address: 192.168.23.2
Number of MTID metrics: 0
TOS 0 Metrics: 10
Link connected to: a Stub Network
(Link ID) Network/subnet number: 192.168.23.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 10
Link connected to: another Router (point-to-point)
(Link ID) Neighboring Router ID: 1.1.1.1
(Link Data) Router Interface address: 192.168.12.2
Number of MTID metrics: 0
TOS 0 Metrics: 10
Link connected to: a Stub Network
(Link ID) Network/subnet number: 192.168.12.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 10
Net Link States(type 2)
- 描述TransNet(包括Broadcast和NBMA网络)网络信息;
- 由DR生成,描述其在该网络上连接的所有路由器以及网段掩码信息,以及这个MA所属的路由器;
- LSA类型2只在本区域Area内洪泛,不允许跨越ABR;
- Network LSA ID是DR进行宣告的那个接口的IP地址
- Network LSA 中没有COST字段
R1#show ip ospf database network 192.168.1.3
OSPF Router with ID (1.1.1.1) (Process ID 1)
Net Link States (Area 0)
LS age: 310
Options: (No TOS-capability, DC)
LS Type: Network Links
Link State ID: 192.168.1.3 (address of Designated Router)
Advertising Router: 3.3.3.3
LS Seq Number: 80000002
Checksum: 0x8D16
Length: 36
Network Mask: /24
Attached Router: 3.3.3.3
Attached Router: 1.1.1.1
Attached Router: 2.2.2.2
Summary Net Link States(type 3)
由ABR生成,实际上就是将区域内部的Type1 Type2的信息收集起来以路由子网的形式扩散出去, 这就是Summay LSA中Summay的含义(注意这里的summary与路由汇总没有关系);
R2#sh ip ospf database summary 192.168.12.0
OSPF Router with ID (2.2.2.2) (Process ID 1)
Summary Net Link States (Area 1)
LS age: 229
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(Network)
Link State ID: 192.168.12.0 (summary Network Number)
Advertising Router: 2.2.2.2
LS Seq Number: 80000001
Checksum: 0x7B3A
Length: 28
Network Mask: /24
MTID: 0 Metric: 10
Summary ASB Link States(type 4)
ASBR Summary LSA由ABR生成,用于描述ABR能够到达的ASBR它的链路状态ID为目的ASBR的RID。
R3#sh ip ospf database asbr-summary 1.1.1.1
OSPF Router with ID (3.3.3.3) (Process ID 1)
Summary ASB Link States (Area 1)
LS age: 341
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(AS Boundary Router)
Link State ID: 1.1.1.1 (AS Boundary Router address)
Advertising Router: 2.2.2.2
LS Seq Number: 80000001
Checksum: 0x75B0
Length: 28
Network Mask: /0
MTID: 0 Metric: 10
Type-5 AS External Link States(type 5)
Autonomous System External LSA由ASBR生成用于描述OSPF自治域系统外的目标网段信息链路状态ID是目的地址的IP网络号。
R3#sh ip ospf database external 0.0.0.0
OSPF Router with ID (3.3.3.3) (Process ID 1)
Type-5 AS External Link States
LS age: 203
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 0.0.0.0 (External Network Number )
Advertising Router: 1.1.1.1
LS Seq Number: 80000004
Checksum: 0x7553
Length: 36
Network Mask: /0
Metric Type: 1 (Comparable directly to link state metric)
MTID: 0
Metric: 100
Forward Address: 0.0.0.0
External Route Tag: 1
Type-7 AS External Link States(type 7)
7类LSA的内容和5类LSA的内容是一样的,都是ASBR产生,用于记录外部路由条目的。
7类LSA的ASBR一定属于NSSA区域。
R3#sh ip ospf database nssa-external 10.1.0.0
OSPF Router with ID (3.3.3.3) (Process ID 1)
Type-7 AS External Link States (Area 1)
LS age: 557
Options: (No TOS-capability, Type 7/5 translation, DC, Upward)
LS Type: AS External Link
Link State ID: 10.1.0.0 (External Network Number )
Advertising Router: 3.3.3.3
LS Seq Number: 80000001
Checksum: 0x172
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 20
Forward Address: 3.3.3.3
External Route Tag: 0
注入默认路由
- 在局域网中,指引流量离开的那个地址,我们称之为网关
- 在一个自制系统(可以想象成一个公司的内网,由很多网段组成)中,指引每个网段如何去往互联网的条目,我们称之为默认路由,或者缺省路由
OSPF产生默认路由的方式
R1(config)#router ospf 1
R1(config-router)#default-information originate [always]
# 如果不带always,那么这台路由器上必须有*的路由才能生效,加了always那么总是生效。
OSPF注入的默认路由默认是O*E2,也就是2类的外部路由。
- 1类外部路由会累加内部开销
- 2类外部路由不会累加内部开销
我们将默认路由改为1类,查看开销
R3#sh ip route
O*E2 0.0.0.0/0 [110/1] via 192.168.23.2, 00:04:03, Ethernet0/0
# 改为1之前,度量值始终是1,不会增加
R1(config-router)#default-information originate always metric-type 1 metric 100
# 下面修改为1,同时我们还能顺带改度量值
R3#sh ip route ospf
O*E1 0.0.0.0/0 [110/120] via 192.168.23.2, 7w0d, Ethernet0/0
# 发现由原本的100,累积到了120,说明累加内部开销
特殊区域
由于非骨干区域只能学到本区域的拓扑,以及骨干区域传来的其他区域和AS外部的条目,所以非骨干区域可以对路由条目进行精简
- 比如可以不学习AS外部的条目,只要是OSPF内部没学到的路由器统统交给骨干区域。
- 比如可以不学习本区域以外的路由条目,反正要从骨干区域走,不如产生默认路由指向骨干。
对于需要进一步精简路由表,优化OSPF区域的情况,我们可以配置特殊区域。
骨干区域不可以配置成特殊区域
演示拓扑
在R1上创建三个loopback接口,172.16.1~3.1/24,用于模拟外部注入的路由条目。
R1
interface Loopback1
ip address 172.16.1.1 255.255.255.0
interface Loopback2
ip address 172.16.2.1 255.255.255.0
interface Loopback3
ip address 172.16.3.1 255.255.255.0
router ospf 1
redistribute connected subnets
在非骨干区域查看,确认学到了外部的条目
R3#sh ip route ospf
O E2 172.16.1.0 [110/20] via 192.168.13.1, 00:00:54, Ethernet0/0
O E2 172.16.2.0 [110/20] via 192.168.13.1, 00:00:54, Ethernet0/0
O E2 172.16.3.0 [110/20] via 192.168.13.1, 00:00:54, Ethernet0/0
stub
stub区域用于让非骨干区域不去学习外部的路由条目,通过指向ABR的默认路由来访问外部,做到精简路由条目的目的。
stub区域中,没有4、5类LSA。
我们将area 1配置为stub,需要在所有参与area 1的路由器上配置如下命令,否则无法建立邻居
router ospf 1
area 1 stub
查看R3的链路状态数据库
R3#sh ip ospf database
OSPF Router with ID (3.3.3.3) (Process ID 1)
Router Link States (Area 1)
Link ID ADV Router Age Seq# Checksum Link count
1.1.1.1 1.1.1.1 21 0x8000000E 0x0066B1 2
3.3.3.3 3.3.3.3 32 0x80000006 0x009767 2
4.4.4.4 4.4.4.4 26 0x80000007 0x00C924 2
Net Link States (Area 1)
Link ID ADV Router Age Seq# Checksum
192.168.13.3 3.3.3.3 27 0x80000003 0x00980C
192.168.14.4 4.4.4.4 22 0x80000003 0x008713
Summary Net Link States (Area 1)
Link ID ADV Router Age Seq# Checksum
0.0.0.0 1.1.1.1 104 0x80000001 0x0093A6 # 多出来一条指向ABR的条目
1.1.1.1 1.1.1.1 104 0x80000003 0x0061D2
2.2.2.2 1.1.1.1 104 0x80000002 0x00998D
5.5.5.5 1.1.1.1 104 0x80000002 0x00739D
6.6.6.6 1.1.1.1 104 0x80000002 0x0045C7
192.168.12.0 1.1.1.1 104 0x80000003 0x00B306
192.168.25.0 1.1.1.1 104 0x80000002 0x008A19
192.168.26.0 1.1.1.1 104 0x80000002 0x007F23
# 原本172.16开头的5类LSA消失
Totally stub
完全末梢区域可以让非骨干区域不去学习其他区域的路由,也不去学习OSPF外部的路由。
产生一条默认路由指向ABR,也就是除了本区域内部条目以外,完全依靠骨干区域和外部通信。
我们将area 2配置为stub,需要在所有参与area 2的路由器上配置如下命令,否则无法建立邻居
router ospf 1
area 2 stub
为了成为totally stub
,还需要在ABR上加上no-summary
router ospf 1
area 2 stub no-summary
查看路由表,发现现在只能学习到本区域的条目和一条指向ABR的默认路由
R5#sh ip route ospf
O*IA 0.0.0.0/0 [110/11] via 192.168.25.2, 00:00:16, Ethernet0/0
6.0.0.0/32 is subnetted, 1 subnets
O 6.6.6.6 [110/21] via 192.168.25.2, 00:00:06, Ethernet0/0
O 192.168.26.0/24 [110/20] via 192.168.25.2, 00:00:06, Ethernet0/0
查看链路状态数据库,发现4、5无法学习到,3类只剩下一条默认路由
R5#sh ip ospf database
OSPF Router with ID (5.5.5.5) (Process ID 1)
Router Link States (Area 2)
Link ID ADV Router Age Seq# Checksum Link count
2.2.2.2 2.2.2.2 61 0x8000000E 0x00B524 2
5.5.5.5 5.5.5.5 77 0x80000007 0x00CBFD 2
6.6.6.6 6.6.6.6 63 0x80000009 0x00FBBB 2
Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
192.168.25.5 5.5.5.5 77 0x80000003 0x003A48
192.168.26.6 6.6.6.6 69 0x80000003 0x00294F
Summary Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
0.0.0.0 2.2.2.2 114 0x80000001 0x0075C0
NSSA(not so stub area)
如果外部的路由是由特殊区域引入的,那么stub和t-stub两种无法满足需求,因为不允许5类LSA传递。
NSSA可以将OSPF外部路由以7类LSA进入特殊区域,然后再由特殊区域的ABR负责将条目转换为5类LSA转发到其他区域。
为了模拟这个过程,先删除area 1的stub配置,在R3上配置3个loopback,地址是10.1~3.0.1/24,然后引入OSPF。
R3
interface Loopback1
ip address 10.1.0.1 255.255.255.0
interface Loopback2
ip address 10.2.0.1 255.255.255.0
interface Loopback3
ip address 10.3.0.1 255.255.255.0
router ospf 1
redistribute connected subnets
下面我们在每一个参与area 1的设备上配置如下命令
router ospf 1
area 1 nssa
然后我们观察,发现无法学习到其他区域引入的外部路由条目,这个和stub区域一致。
R3#sh ip route ospf
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
O IA 1.1.1.1 [110/11] via 192.168.13.1, 00:03:12, Ethernet0/0
2.0.0.0/32 is subnetted, 1 subnets
O IA 2.2.2.2 [110/21] via 192.168.13.1, 00:03:12, Ethernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/21] via 192.168.13.1, 00:02:14, Ethernet0/0
5.0.0.0/32 is subnetted, 1 subnets
O IA 5.5.5.5 [110/31] via 192.168.13.1, 00:03:12, Ethernet0/0
6.0.0.0/32 is subnetted, 1 subnets
O IA 6.6.6.6 [110/31] via 192.168.13.1, 00:03:12, Ethernet0/0
172.16.0.0/24 is subnetted, 3 subnets
O N2 172.16.1.0 [110/20] via 192.168.13.1, 00:03:12, Ethernet0/0
O N2 172.16.2.0 [110/20] via 192.168.13.1, 00:03:12, Ethernet0/0
O N2 172.16.3.0 [110/20] via 192.168.13.1, 00:03:12, Ethernet0/0 # 这边能学到是因为R1也是area1的
O IA 192.168.12.0/24 [110/20] via 192.168.13.1, 00:03:12, Ethernet0/0
O 192.168.14.0/24 [110/20] via 192.168.13.1, 00:02:14, Ethernet0/0
O IA 192.168.25.0/24 [110/30] via 192.168.13.1, 00:03:12, Ethernet0/0
O IA 192.168.26.0/24 [110/30] via 192.168.13.1, 00:03:12, Ethernet0/0
这边的O N2和O E2是一样的,都是外部路由条目,不过O N2是nssa区域特有,也就是7类LSA学来的。
需要注意的是,NSSA并不会产生一条默认路由,下面我查看一下。
R3#sh ip ospf database
OSPF Router with ID (3.3.3.3) (Process ID 1)
Router Link States (Area 1)
Link ID ADV Router Age Seq# Checksum Link count
1.1.1.1 1.1.1.1 212 0x80000018 0x00DF24 2
3.3.3.3 3.3.3.3 270 0x80000010 0x0011D9 2
4.4.4.4 4.4.4.4 213 0x8000000C 0x004799 2
Net Link States (Area 1)
Link ID ADV Router Age Seq# Checksum
192.168.13.3 3.3.3.3 265 0x80000007 0x001880
192.168.14.4 4.4.4.4 219 0x80000005 0x000B85
Summary Net Link States (Area 1)
# 可以去看上面stub的数据库,这边是有0.0.0.0的,而nssa没有
Link ID ADV Router Age Seq# Checksum
1.1.1.1 1.1.1.1 271 0x80000005 0x00E445
2.2.2.2 1.1.1.1 271 0x80000004 0x001DFF
5.5.5.5 1.1.1.1 271 0x80000003 0x00F80F
6.6.6.6 1.1.1.1 271 0x80000003 0x00CA39
192.168.12.0 1.1.1.1 271 0x80000005 0x003778
192.168.25.0 1.1.1.1 271 0x80000004 0x000E8B
192.168.26.0 1.1.1.1 271 0x80000004 0x000395
Type-7 AS External Link States (Area 1)
Link ID ADV Router Age Seq# Checksum Tag
10.1.0.0 3.3.3.3 373 0x80000001 0x000172 0
10.2.0.0 3.3.3.3 373 0x80000001 0x00F47D 0
10.3.0.0 3.3.3.3 373 0x80000001 0x00E888 0
172.16.1.0 1.1.1.1 265 0x80000001 0x001DBF 0
172.16.2.0 1.1.1.1 265 0x80000001 0x0012C9 0
172.16.3.0 1.1.1.1 265 0x80000001 0x0007D3 0
其实在abr上添加一条命令,就可以做到与stub一样,产生默认路由
router ospf 1
area 1 nssa default-information-originate
Totally NSSA
与t-stub是一样的,唯一不同的是可以在特殊区域中引入外部的路由条目
在nssa区域的ABR上加上如下命令就可以配置为T-NSSA
router ospf 1
area 1 nssa no-summary
路由汇总
由于链路状态协议的特殊性,在传递的时候必须保持原本LSA的信息,不能更改别人的LSA,所以在同一个区域中,所有的路由器都知道拓扑,无法对路由条目进行操作。当然无法在同一个区域中汇总。
汇总OSPF区域间路由
在R4上配置3个loopback,地址是172.16.1~3.1/24,并且加入ospf area 2,然后我们观察汇总的特性
检查R3的路由表,可以看到明细路由
R3#sh ip route ospf
172.16.0.0/32 is subnetted, 3 subnets
O 172.16.1.1 [110/11] via 192.168.34.4, 00:01:24, Ethernet0/1
O 172.16.2.1 [110/11] via 192.168.34.4, 00:01:24, Ethernet0/1
O 172.16.3.1 [110/11] via 192.168.34.4, 00:01:24, Ethernet0/1
我们可以尝试在R4上配置汇总
R4
router ospf 1
area 2 range 172.16.0.0 255.255.0.0
R3#sh ip route ospf
172.16.0.0/32 is subnetted, 3 subnets
O 172.16.1.1 [110/11] via 192.168.34.4, 00:02:41, Ethernet0/1
O 172.16.2.1 [110/11] via 192.168.34.4, 00:02:41, Ethernet0/1
O 172.16.3.1 [110/11] via 192.168.34.4, 00:02:41, Ethernet0/1
# 在同一个区域中,OSPF是不支持汇总的
OSPF可以在ABR上对OSPF中的路由进行汇总,影响下游的区域。上图中,我们可以在R3上配置汇总命令
R3
router ospf 1
area 2 range 172.16.0.0 255.255.0.0
# 汇总哪个的区域路由,就写区域几,比如这条就是要汇总area 2
关闭R3上的汇总命令,换到R2上去配置,会发现无法汇总这个条目,原因是因为R2无法修改R3产生的LSA。
汇总OSPF外部路由
OSPF外部的路由由ASBR产生,所以只能由ASBR去修改或者汇总
在R1上配置3个环回接口10.1~3.0.1/24,然后导入到OSPF中
R1
interface Loopback1
ip address 10.1.0.1 255.255.255.0
interface Loopback2
ip address 10.2.0.1 255.255.255.0
interface Loopback3
ip address 10.3.0.1 255.255.255.0
router ospf 1
redistribute connected subnets
这些条目是由R1引入的,所以只能在R1上配置汇总命令
R1
router ospf 1
summary-address 10.0.0.0 255.0.0.0
抑制路由条目
抑制路由条目的做法在汇总操作中非常常见,汇总就是将明细路由进行抑制,然后本地产生一条汇总的路由发出去。
抑制区域间的条目,只能在ABR上进行。
抑制外部路由条目,只能在ASBR上进行。
区域间路由抑制更新
R3
router ospf 1
area 2 range 172.16.2.1 255.255.255.255 not-advertise
在R2上查看效果
R2#sh ip route ospf
172.16.0.0/32 is subnetted, 2 subnets
O IA 172.16.1.1 [110/21] via 192.168.23.3, 00:09:04, Ethernet0/1
O IA 172.16.3.1 [110/21] via 192.168.23.3, 00:09:04, Ethernet0/1
# 172.16.2.1消失
外部路由抑制更新
R1
router ospf 1
summary-address 10.2.0.0 255.255.255.0 not-advertise
在其他路由器上看效果
R3#sh ip route ospf
10.0.0.0/24 is subnetted, 2 subnets
O E2 10.1.0.0 [110/20] via 192.168.23.2, 00:02:43, Ethernet0/0
O E2 10.3.0.0 [110/20] via 192.168.23.2, 00:02:43, Ethernet0/0
抑制7类转发地址
在配置好了之后,我们在R2上抑制R1的条目
router ospf 1
area 1 range 1.1.1.1 255.255.255.255 not-advertise
我们发现R3不仅仅是1.1.1.1无法学习,连10.x.0.0/24也学习不到了
R3#sh ip route ospf
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/11] via 192.168.23.2, 00:11:48, Ethernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/11] via 192.168.34.4, 00:11:48, Ethernet0/1
172.16.0.0/32 is subnetted, 3 subnets
O 172.16.1.1 [110/11] via 192.168.34.4, 00:11:48, Ethernet0/1
O 172.16.2.1 [110/11] via 192.168.34.4, 00:11:48, Ethernet0/1
O 172.16.3.1 [110/11] via 192.168.34.4, 00:11:48, Ethernet0/1
O IA 192.168.12.0/24 [110/20] via 192.168.23.2, 00:11:48, Ethernet0/0
虽然R3路由表中没有10开头的地址,但是数据库中竟然还有
R3#sh ip ospf database
------------省略------------
Type-5 AS External Link States
Link ID ADV Router Age Seq# Checksum Tag
10.1.0.0 2.2.2.2 124 0x80000001 0x004F3A 0
10.2.0.0 2.2.2.2 124 0x80000001 0x004345 0
10.3.0.0 2.2.2.2 124 0x80000001 0x003750 0
查看详细内容
R3#sh ip ospf database external 10.1.0.0
OSPF Router with ID (3.3.3.3) (Process ID 1)
Type-5 AS External Link States
LS age: 171
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 10.1.0.0 (External Network Number )
Advertising Router: 2.2.2.2
LS Seq Number: 80000001
Checksum: 0x4F3A
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 20
Forward Address: 1.1.1.1 # 这个地址不可达,导致即使有LSA,也是无法使用的
External Route Tag: 0
通过上述的实验现象,说明了OSPF学到LSA之后,还是会进行可用性的判断。
R2
router ospf 1
area 1 nssa translate type7 suppress-fa
# 这条命令的意思是在翻译type7LSA的时候,将forward address改为0.0.0.0
下面查看R3的数据库,发现10开头的LSA已经有效了
R3#sh ip ospf database external 10.1.0.0
OSPF Router with ID (3.3.3.3) (Process ID 1)
Type-5 AS External Link States
LS age: 32
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 10.1.0.0 (External Network Number )
Advertising Router: 2.2.2.2
LS Seq Number: 80000002
Checksum: 0x1B71
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0
R3#show ip route ospf
10.0.0.0/24 is subnetted, 3 subnets
O E2 10.1.0.0 [110/20] via 192.168.23.2, 00:03:15, Ethernet0/0
O E2 10.2.0.0 [110/20] via 192.168.23.2, 00:03:15, Ethernet0/0
O E2 10.3.0.0 [110/20] via 192.168.23.2, 00:03:15, Ethernet0/0
# 发现1.1.1.1没学到,但是外部的条目都可以使用了
被动接口
这种情况下,想要将R1的e0/0口地址加入OSPF,但是PC或者服务器是不安全的,一旦被入侵,可能和R1建立邻居,从而破坏整个网络。
我们可以将R1的e0/0加入ospf之后,设置为被动接口,那么R1的e0/0接口就无法启动任何邻居。
R1
router ospf 1
passive-interface Ethernet0/0
身份验证
OSPF支持以下几种认证形式
Null
简单密码身份验证
MD5身份验证
接口认证
区域认证
interface Ethernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 [密码]
# 接口密文认证
router ospf 1
area 1 authentication message-digest
# 配置了上述命令后,所有area1的接口都必须加同样的密码
如果加了区域认证,虚链路的两端属于area 0 所以在给area 0加认证的时候,别忘了虚链路对端也是area 0。
HMAC
HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写
HMAC在OSPF中的过程大致如下
- OSPF将更新消息和密码放在一起,算一下MD5的值,比如值是A
- 然后OSPF将更新消息和A一起发给邻居,注意这个数据里面不带密码
- 邻居收到了之后,将更新消息和密码放在一起,算一下MD5的值,比如值是B
- 邻居发现A=B,就通过了对方的身份认证,如果A≠B,说明对方的认证密码和自己不一样,不能建立邻居。
OSPF综合实验
需求:
1,按照如图所示配置好路由器的接口地址。在每台路由器上必须建立loopback0接口。
2,配置好OSPF,区域划分如图所示,并且ospf的router-id必须为loopback0的地址。最终实现全网互联。
3,在R1、R2、R3、R4之间的多路访问网络里面,必须是的R1成为DR,R2成为BDR。在其余的链路里面必须保障OSPF邻居的快速建立,而不需要经过wait timer。
4,在R1和R2上建立loopback10,接口的地址为同样的100.1.1.1/32来模拟外网的接入。要求R1和R2都向内网通告一条缺省路由,正常的时候所有的路由器通过R1的缺省路由来访问外网,当R1无法正常工作的时候,通过R2来访问外网。(需要在R7上使用traceroute来测试路线。)
5,area 2为特殊区域,该区域无法学习到ospf其他区域的路由。R7的loopback0的地址通过redistribute connected subnets命令进入ospf。(观察R5和R6上的7.7.7.0路由的来源,思考原因。)
6,在R3上创建loopback1-3,地址为172.16.x.1/24(x为1-3)。并且宣告进OSPF区域1,要求在area 0只能看到一条汇总的路由172.16.0.0
7,area 0需要启用明文区域认证,R3和R5之间明文链路认证,R4和R6之间密文链路认证。
8,禁止area 2内的192.168.57.0/24和192.168.67.0/24被其他区域学习到。此刻思考区域0里面关于7.7.7.0的路由消失的原因,并且需要解决7.7.7.0消失的问题。