开放最短路径优先 v3 - OSPFv3
OSPFv3 是 OSPFv2 的修订版本,支持 IPv6 地址族。
IETF 定义了 OSPFv3 的扩展,以支持多个地址族(IPv6 和 IPv4)。FRR 不支持多个地址族。
基本 OSPFv3 配置
您可以使用编号接口或未编号接口配置 OSPF。
当您启用或禁用 OSPF 时,FRR 服务将重新启动,这可能会影响流量。
NVUE 命令不支持 OSPFv3。
OSPFv3 编号
要使用编号接口配置 OSPF,您需要指定路由器 ID、IP 子网前缀和区域地址。交换机上 IP 地址与网络子网匹配的所有接口都将进入指定的区域。OSPF 尝试在这些接口上发现其他 OSPF 路由器。Cumulus Linux 将所有匹配的接口网络地址添加到 Type-1 路由器 LSA,并通告给发现的邻居,以实现正确的可达性。
如果您不想在某些接口上建立 OSPF 邻接关系,但又想在 OSPF 数据库中通告这些网络,则可以将这些接口配置为被动接口。被动接口会创建一个数据库条目,但不发送或接收 OSPF hello 数据包。例如,在数据中心拓扑中,面向主机的接口不需要运行 OSPF,但是,您必须将相应的 IP 地址通告给邻居。
以下示例命令在 leaf01 和 spine01 上配置编号的 OSPF。

leaf01 | spine01 |
---|---|
|
|
编辑
/etc/frr/daemons
文件以启用ospf6
守护程序,然后启动 FRR 服务(请参阅 FRRouting)。编辑
/etc/network/interfaces
文件以配置环回和 swp51 的 IP 地址
cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 2001:db8::a0a:0a01/128
auto swp51
iface swp51
address 2001:db8::a00:0101/127
运行
ifreload -a
命令以加载新配置cumulus@leaf01:~$ sudo ifreload -a
从 vtysh shell,配置 OSPF
cumulus@leaf01:~$ sudo vtysh ... leaf01# configure terminal leaf01(config)# router ospf6 leaf01(config-ospf6)# ospf6 router-id 10.10.10.1 leaf01(config-ospf6)# interface lo area 0.0.0.0 leaf01(config-ospf6)# interface swp51 area 0.0.0.0 leaf01(config-ospf6)# exit leaf01(config)# interface swp1 leaf01(config-if)# ipv6 ospf6 passive leaf01(config-if)# exit leaf01(config)# interface swp2 leaf01(config-if)# ipv6 ospf6 passive leaf01(config-if)# end leaf01# write memory leaf01# exit
编辑
/etc/frr/daemons
文件以启用ospf6
守护程序,然后启动 FRR 服务(请参阅 FRRouting)。编辑
/etc/network/interfaces
文件以配置环回和 swp1 的 IP 地址cumulus@spine01:~$ sudo nano /etc/network/interfaces ... auto lo iface lo inet loopback address 2001:db8::a0a:0a65/128 auto swp1 iface swp1 address 2001:db8::a00:0100/127
运行
ifreload -a
命令以加载新配置cumulus@spine01:~$ sudo ifreload -a
从 vtysh shell,配置 OSPF
cumulus@spine01:~$ sudo vtysh ... spine01# configure terminal spine01(config)# router ospf6 spine01(config-ospf6)# ospf6 router-id 10.10.10.101 spine01(config-ospf6)# interface lo area 0.0.0.0 spine01(config-ospf6)# interface swp1 area 0.0.0.0 spine01(config-ospf6)# end spine01# write memory spine01# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.1
interface lo area 0.0.0.0
interface swp51 area 0.0.0.0
interface swp1
ipv6 ospf6 passive
interface swp2
ipv6 ospf6 passive
...
...
router ospf6
ospf router-id 10.10.10.101
interface lo area 0.0.0.0
interface swp1 area 0.0.0.0
...
OSPFv3 未编号
未编号接口是没有唯一 IP 地址的接口;多个接口共享同一个 IP 地址。
要配置未编号接口,请获取另一个接口(称为锚点)的 IP 地址,并将其用作未编号接口的 IP 地址。锚点通常是交换机上的环回接口。
OSPFv3 未编号仅支持点对点接口。
以下示例命令在 leaf01 和 spine01 上配置未编号的 OSPFv3。

leaf01 | spine01 |
---|---|
|
|
编辑
/etc/frr/daemons
文件以启用ospf6
守护程序,然后启动 FRR 服务(请参阅 FRRouting)。编辑
/etc/network/interfaces
文件以配置环回和 swp51 的 IP 地址
cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 2001:db8::a0a:0a01/128
auto swp1
iface swp1
address 2001:db8::a0a:0a01/128
运行
ifreload -a
命令以加载新配置cumulus@leaf01:~$ sudo ifreload -a
从 vtysh shell,配置 OSPFv3
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# router ospf6
leaf01(config-ospf6)# ospf6 router-id 10.10.10.1
leaf01(config-ospf6)# interface lo area 0.0.0.0
leaf01(config-ospf6)# interface swp51 area 0.0.0.0
leaf01(config-ospf6)# exit
leaf01(config)# interface swp1
leaf01(config-if)# ipv6 ospf6 passive
leaf01(config-if)# exit
leaf01(config)# interface swp2
leaf01(config-if)# ipv6 ospf6 passive
leaf01(config-if)# exit
leaf01(config)# interface swp51
leaf01(config-if)# ipv6 ospf6 network point-to-point
leaf01(config-if)# end
leaf01# write memory
leaf01# exit
编辑
/etc/frr/daemons
文件以启用ospf6
守护程序,然后启动 FRR 服务(请参阅 FRRouting)。编辑
/etc/network/interfaces
文件以配置环回和 swp1 的 IP 地址
cumulus@spine01:~$ sudo nano /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 2001:db8::a0a:0a65/128
auto swp1
iface swp1
address 2001:db8::a0a:0a65/128
运行
ifreload -a
命令以加载新配置cumulus@spine01:~$ sudo ifreload -a
从 vtysh shell,配置 OSPFv3
cumulus@spine01:~$ sudo vtysh
...
spine01# configure terminal
spine01(config)# router ospf6
spine01(config-ospf6)# ospf router-id 10.10.10.101
spine01(config-ospf6)# interface lo area 0.0.0.0
spine01(config-ospf6)# interface swp1 area 0.0.0.0
spine01(config-ospf6)# exit
spine01(config)# interface swp1
spine01(config-if)# ipv6 ospf6 network point-to-point
spine01(config-if)# end
spine01# write memory
spine01# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.1
interface lo area 0.0.0.0
interface swp51 area 0.0.0.0
interface swp1
ipv6 ospf6 passive
interface swp2
ipv6 ospf6 passive
interface swp51
ipv6 ospf6 network point-to-point
...
...
router ospf6
ospf6 router-id 10.10.10.101
interface lo area 0.0.0.0
interface swp1 area 0.0.0.0
interface swp1
ipv6 ospf6 network point-to-point
...
可选 OSPFv3 配置
本节介绍可选配置。本节中提供的步骤假定您已按照上面的基本 OSPF 配置中所述配置了基本 OSPFv3。
接口参数
您可以为每个接口定义以下 OSPF 参数
- 网络类型(点对点或广播)。广播是默认设置。除非您打算将以太网介质用作具有多个连接路由器的 LAN,否则将接口配置为点对点。点对点提供简化的邻接状态机,因此无需 DR/BDR 选举和LSA 反射。有关更多信息,请参阅 RFC5309。
OSPFv3 未编号需要点对点。
- Hello 间隔。在接口上发送 hello 数据包之间的秒数。默认值为 10 秒。
- 死亡间隔。邻居停止听到 hello 数据包后声明路由器关闭之前的秒数。默认值为 40 秒。
- 在广播接口上成为 OSPF DR 的优先级。默认优先级为 1。
- 通告前缀列表。前缀列表定义出站路由过滤器。
- 成本。成本决定了到目标的最短路径。
以下命令示例将 swp51 上的网络类型设置为点对点。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp51
switch(config-if)# ipv6 ospf6 network point-to-point
switch(config-if)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
interface swp51
ipv6 ospf6 network point-to-point
...
以下命令示例将 swp51 的 hello 间隔设置为 5 秒,死亡间隔设置为 60 秒,优先级设置为 5。hello 间隔和死亡间隔可以是 1 到 65535 秒之间的任何值。优先级可以是 0 到 255 之间的任何值(0 将接口配置为永远不会成为广播接口上的 OSPF 指定路由器 (DR))。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp51
switch(config-if)# ipv6 ospf6 hello-interval 5
switch(config-if)# ipv6 ospf6 network dead-interval 60
switch(config-if)# ipv6 ospf6 network priority 5
switch(config-if)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
interface swp51
ipv6 ospf6 hello-interval 5
ipv6 ospf6 dead-interval 60
ipv6 ospf6 priority 5
...
以下示例命令使用名为 myfilter
的 IPv6 通告前缀列表配置接口 swp51
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp51
switch(config-if)# ipv6 ospf6 advertise prefix-list myfilter
switch(config-if)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
interface swp51
ipv6 ospf6 advertise prefix-list myfilter
...
以下示例命令配置 swp51 的成本。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp51
switch(config-if)# ipv6 ospf6 cost 1
switch(config-if)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
interface swp51
ipv6 ospf6 cost 1
...
要显示配置的 OSPF 接口参数值,请运行 vtysh show ipv6 ospf6 interface
命令。
SPF 计时器默认值
OSPF3 使用以下默认计时器来防止连续的 SPF 使 CPU 负担过重
- 从初始事件到 SPF 运行的 0 毫秒
- 连续 SPF 运行之间 50 毫秒(该数字随每个 SPF 加倍,直到达到 SPF 运行之间的最大时间)
- SPF 之间最大 5000 毫秒
以下示例命令将从初始事件到 SPF 运行的毫秒数更改为 80,将连续 SPF 运行之间的毫秒数更改为 100,并将 SPF 之间最大毫秒数更改为 6000。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# timers throttle spf 80 100 6000
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf router-id 10.10.10.1
passive-interface swp1
passive-interface swp2
network swp51 area 0.0.0.0
timers throttle spf 80 100 6000
...
要查看配置的 SPF 计时器值,请运行 vtysh show ipv6 ospf6
命令。
配置 OSPFv3 区域
您可以使用不同的区域来控制路由。您可以
- 限制 OSPFv3 区域到达另一个区域。
- 通过为特定地址范围内的所有路由创建摘要路由来管理路由表的大小。
以下部分提供了命令示例。
以下示例命令从路由表中删除 3:3::/64
路由。如果表中没有路由,则该网络中的任何目的地都不可达。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# area 0.0.0.0 range 3:3::/64 not-advertise
switch(config-ospf6)# end
switch# write memory
switch# exit
以下示例命令为 2001::/64 范围内的所有路由创建摘要路由
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# area 0.0.0.0 range 2001::/64 advertise
switch(config-ospf6)# end
switch# write memory
switch# exit
您还可以配置摘要路由的成本,Cumulus Linux 使用该成本来确定到目标的最短路径。成本值必须介于 0 到 16777215 之间。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# area 0.0.0.0 range 2001::/64 cost 160
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.1
area 0.0.0.0 range 3:3::/64 not-advertise
area 0.0.0.0 range 2001::/64 advertise
area 0.0.0.0 range 2001::/64 cost 160
...
Stub 区域
外部路由是从另一个协议重新分发到 OSPF 中的路由。它们具有 AS 范围的洪泛范围。通常,外部链路状态占 LSDB 的很大一部分。Stub区域通过不洪泛 AS 外部 LSA 来减小 LSDB 大小。
所有路由器都必须同意某个区域是 Stub 区域,否则它们不会成为 OSPF 邻居。
要配置 Stub 区域
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# area 0.0.0.1 stub
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.63
area 0.0.0.1 stub
...
Stub 区域仍然接收有关属于同一 OSPF 域的其他区域的网络的信息。如果未配置摘要(或摘要不全面),则信息可能会使节点不堪重负。完全 Stub 区域解决了这个问题。完全 Stub 区域中的路由器在其 LSDB 中保留有关其区域内路由的信息。
要配置完全 Stub 区域
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# area 0.0.0.1 stub no-summary
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.63
area 0.0.0.1 stub no-summary
...
以下是区域类型差异的简要摘要
类型 | 行为 |
---|---|
正常非零区域 | LSA 类型 1、2、3、4 区域范围、类型 5 外部、区域间路由摘要 |
Stub 区域 | LSA 类型 1、2、3、4 区域范围、无类型 5 外部、区域间路由摘要 |
完全 Stub 区域 | LSA 类型 1、2 区域范围、默认摘要、不允许类型 3、4、5 LSA 类型 |
自动成本参考带宽
当您设置自动成本参考带宽时,Cumulus Linux 会动态计算 OSPF 接口成本以支持更高速度的链路。100Gbps 链路速度的默认值为 100000。链路速度低于 100Gbps 的接口的成本更高。
为避免路由环路,请将带宽设置为所有 OSPF 路由器上的一致值。
以下示例命令配置 90Gbps 链路速度的自动成本参考带宽
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# auto-cost reference-bandwidth 90000
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.1
interface lo area 0.0.0.0
interface swp51 area 0.0.0.0
auto-cost reference-bandwidth 90000
...
管理距离
当两个不同的协议为同一目标提供路由信息时,Cumulus Linux 使用管理距离来选择要使用的路由协议。距离越小,协议越可靠。例如,如果交换机从管理距离为 110 的 OSPFv3 接收到一条路由,并从管理距离为 100 的 BGP 接收到同一条路由,则交换机选择 BGP。
Cumulus Linux 提供了多个命令来更改 OSPF 路由的管理距离。默认值为 110。
此示例命令设置一组路由的距离,而不是特定路由。
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# distance 254
switch(config-ospf6)# end
switch# write memory
switch# exit
此示例命令将内部路由的 OSPF 管理距离更改为 150,将外部路由的 OSPF 管理距离更改为 220
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# distance ospf6 intra-area 150 inter-area 150 external 220
switch(config-ospf6)# end
switch# write memory
switch# exit
此示例命令将内部路由的 OSPF 管理距离更改为 150,以路由器的同一区域内的子网或网络
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# distance ospf6 intra-area 150
switch(config-ospf6)# end
switch# write memory
switch# exit
此示例命令将内部路由的 OSPF 管理距离更改为 150,以路由器不属于的区域中的子网
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# router ospf6
switch(config-ospf6)# distance ospf6 inter-area 150
switch(config-ospf6)# end
switch# write memory
switch# exit
vtysh 命令将配置保存到 /etc/frr/frr.conf
文件中。例如
...
router ospf6
ospf6 router-id 10.10.10.1
interface lo area 0.0.0.0
distance ospf6 intra-area 150 inter-area 150 external 220
...
故障排除
Cumulus Linux 提供了多个 OSPFv3 故障排除命令
目的 | vtysh 命令 |
---|---|
显示邻居状态 | show ipv6 ospf6 neighbor |
验证 LSDB 在网络中的所有路由器上是否相同 | show ipv6 ospf6 database |
确定 Cumulus Linux 未正确转发 OSPF 路由的原因 | show ipv6 ospf6 route |
显示 OSPF 接口 | show ipv6 ospf6 interface |
帮助可视化网络视图 | show ipv6 ospf6 spf tree |
显示有关 OSPFv3 进程的信息 | show ipv6 ospf6 |
以下示例显示了 vtysh show ipv6 ospf6 neighbor
命令输出
cumulus@leaf01:mgmt:~$ sudo vtysh
...
leaf01# show ipv6 ospf6 neighbor
Neighbor ID Pri DeadTime State/IfState Duration I/F[State]
10.10.10.101 1 00:00:34 Full/BDR 00:02:58 swp51[DR]
以下示例显示了 vtysh show ipv6 ospf6 route
命令输出
cumulus@leaf01:mgmt:~$ sudo vtysh
...
leaf01# show ipv6 ospf6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued route, r - rejected route
O 2001:db8::a00:100/127 [110/100] is directly connected, swp51, weight 1, 00:00:20
O 2001:db8::a0a:a01/128 [110/10] is directly connected, lo, weight 1, 00:01:40
O>* 2001:db8::a0a:a65/128 [110/110] via fe80::4638:39ff:fe00:2, swp51, weight 1, 00:00:15
要捕获 OSPF 数据包,请运行 sudo tcpdump -v -i swp1 ip proto ospf6
命令。