article/openwrt/frr-动态路由.md
2025-02-15 19:29:46 +08:00

13 KiB
Raw Blame History

FRR 动态路由

FRR 动态路由软件包 组件

这些配置行似乎来自于某种网络服务或路由器的配置文件,每一行都代表对一个特定的网络守护进程(daemon)的启用yes或禁用no设置。

FRR 支持的协议

  1. frr

这是 FRRouting 的核心包,包含了 FRR 的基础框架和多个路由协议守护进程(如 RIP、OSPF、BGP 等)。安装该包后,你可以运行 FRR 的所有路由协议服务和工具。

  1. frr-babeld

Babel 是一种适用于 IP 网络的动态路由协议。这个包安装的是 Babel 路由协议守护进程,它用于支持 Babel 协议。Babel 是一种自适应的距离矢量协议,适用于小型到中型的网络。

用于动态路由发现和更新,特别适用于无线网络和 ad-hoc 网络。

  1. frr-bfdd

BFDDBFDBidirectional Forwarding Detection是一种快速检测路径故障的协议。这个包提供了 BFD 守护进程,可以帮助快速发现路由器之间的连接故障,并根据路由协议快速进行故障恢复。

用于加速故障检测,并使路由协议更快地重新计算路径。

  1. frr-bgpd

BGPBorder Gateway Protocol是 Internet 上主要的外部网关协议。该包安装的是 BGP 路由协议守护进程,用于 BGP 配置和管理,支持 IPv4 和 IPv6 的路由交换。

用于与其他自治系统AS交换路由信息常用于大规模网络如互联网骨干网络中的路由控制。

  1. frr-eigrpd

EIGRPEnhanced Interior Gateway Routing Protocol是 Cisco 开发的一种内部网关协议IGP。这个包安装的是 EIGRP 路由协议守护进程

用于在同一自治系统内交换路由信息EIGRP 是 Cisco 特有的协议,适用于企业网络。

  1. frr-fabricd

这是 Fabric 路由协议守护进程,用于支持 数据中心网络中的 Fabric 路由协议,主要用于网络设备间的直接连接,简化网络架构和拓扑管理。

通常用于大型数据中心的网络结构中,提供更高效的流量路由和管理。

  1. frr-isisd

IS-ISIntermediate System to Intermediate System是一种内部网关协议IGP主要用于大规模的服务提供商网络。这个包安装的是 IS-IS 路由协议守护进程

用于在大型网络中进行高效的路由选择IS-IS 主要在运营商和大规模网络中使用。

  1. frr-ldpd

LDPLabel Distribution Protocol用于 MPLS 网络中,帮助路由器之间分配标签。该包安装的是 LDP 守护进程

在 MPLS 网络中,帮助管理标签分发和路由决策,优化数据包的转发路径。

  1. frr-libfrr

这是 FRR 的库包,它提供了 FRR 所需的共享库。安装该包可以为其他 FRR 组件提供支持。

作为 FRR 的核心库文件,其他 FRR 组件依赖于它来提供基本的路由处理功能。

  1. frr-nhrpd

NHRPNext Hop Resolution Protocol是用于 IP 网络中查找下一跳信息的协议,特别适用于 VPN 和 IP 网络互联。这个包安装的是 NHRP 守护进程

用于基于 NHRP 协议查找 IP 地址的下一跳,通常用于 VPN 和其他隧道协议中。

  1. frr-ospf6d

OSPFv3Open Shortest Path First version 3是用于 IPv6 网络的路由协议。这个包安装的是 OSPFv3 路由协议守护进程

提供对 IPv6 网络的路由支持OSPFv3 是 OSPF 的扩展版本,支持 IPv6 地址族。

  1. frr-ospfd

OSPFOpen Shortest Path First是一个广泛使用的内部网关协议IGP它使用链路状态协议来计算最佳路径。这个包安装的是 OSPF 路由协议守护进程

用于基于链路状态协议的路由计算,适用于大型企业网络中的路由配置。

  1. frr-pbrd

PBRPolicy-Based Routing是基于策略的路由协议允许根据数据包的内容如源 IP、目标 IP 等)决定路由路径。这个包安装的是 PBR 守护进程

提供基于策略的路由决策,允许对流量进行更细粒度的控制。

  1. frr-pimd

PIMProtocol Independent Multicast是用于组播路由的协议适用于需要多播的应用。这个包安装的是 PIM 守护进程

为网络提供组播支持,适用于需要组播(如视频流、广播等)的网络应用。

  1. frr-ripd

RIPRouting Information Protocol是一个距离矢量协议适用于小型或中型的网络。这个包安装的是 RIP 路由协议守护进程

实现 RIP 协议,进行路由信息的传播,适用于简单的内部网络。

  1. frr-ripngd

RIPngRIP next generation是 RIP 协议的扩展,支持 IPv6 网络。这个包安装的是 RIPng 路由协议守护进程

提供 RIP 协议的 IPv6 支持,适用于 IPv6 网络中的动态路由。

  1. frr-staticd

Staticd 组件用于管理 静态路由,这些路由是手动配置的,并不通过动态路由协议传播。这个包安装的是 静态路由守护进程

管理静态路由的配置,适用于不需要动态路由的网络部分。

  1. frr-vrrpd

VRRPVirtual Router Redundancy Protocol是一个用于提供虚拟网关冗余的协议。这个包安装的是 VRRP 守护进程

提供网关冗余服务,保证网络的高可用性,当主网关故障时,自动切换到备用网关。

  1. frr-vtysh

VTYSH 是 FRR 的命令行界面工具,用于与 FRR 进程进行交互,配置和管理各种路由协议。

提供一个统一的命令行界面CLI来管理 FRR 配置,包括所有路由协议和 Zebra。

  1. frr-watchfrr

Watchfrr 组件是一个监控工具,用于检测 FRR 路由协议进程的健康状态并进行管理。

监控 FRR 各个路由协议守护进程的运行状态,确保路由协议的稳定性。

  1. frr-zebra

Zebra 是 FRR 的核心组件之一,负责将路由协议的路由信息传递给内核,并管理网络接口和静态路由。这个包安装的是 Zebra 路由守护进程

与操作系统内核进行交互,管理路由表、接口配置等。

rip 配置

#协议
router rip
 #在这个网段上广播
 network 192.168.123.0/24
 network 192.168.192.0/24
 
 #将这个路由广播出去
 route 192.168.1.0/24
!

#指定这个接口上协议版本
interface eth0
 # send   发送的协议
 ip rip send version 2
 # receive   接收的协议
 ip rip receive version 2
!

#在这个接口上广播路由
interface eth1
 ip rip send version 2
 ip rip receive version 2

常用命令


# 全全局配置
configure terminal

#在全局配置下进行RIP 配置 
route rip

#配置好后 输入 end 结束配置, write 保存配置
end
write



#查看rip 状态
show ip rip status

#查看路由
show ip route

#查看RIP 路由
show ip route rip

show ip rip 命令输出的内容主要显示了 RIP 协议的路由表信息,包括每个网络的下一跳、度量值、路由来源等。下面是对输出的逐行解析:

输出内容

Codes: R - RIP, C - connected, S - Static, O - OSPF, B - BGP
Sub-codes:
      (n) - normal, (s) - static, (d) - default, (r) - redistribute,
      (i) - interface

     Network            Next Hop         Metric From            Tag Time
C(i) 10.147.17.0/24     0.0.0.0               1 self              0
C(i) 192.168.123.0/24   0.0.0.0               1 self              0
R(n) 192.168.124.0/24   10.147.17.219         2 10.147.17.219     0 02:27
C(i) 192.168.192.0/24   0.0.0.0               1 self              0

Codes 和 Sub-codes 说明

  • Codes: 每条路由的类型。
    • RRIP协议路由
    • C:连接路由(直接连接的路由)
    • S:静态路由
    • OOSPF协议路由
    • BBGP协议路由
  • Sub-codes: 路由的子类型。
    • (n):正常路由
    • (s):静态路由
    • (d):默认路由
    • (r):由其他协议重分发的路由
    • (i):接口路由(指向接口的路由)

路由信息解析

1. C(i) 10.147.17.0/24

C(i) 10.147.17.0/24     0.0.0.0               1 self              0
  • C(i):这是一条 "连接路由",即直接连接的网络。 (i) 表示它是一个通过接口直接连接的网络。

  • 10.147.17.0/24:这是网络地址,表示该设备有一个直接连接到 10.147.17.0/24 子网的接口。

  • Next Hop0.0.0.0,表示这是一个直接连接的网络,因此不需要下一跳地址。

  • Metric:度量值为 1,表示该路由的度量值,这里是直接连接的网络,度量值是最小的。

  • Fromself,表示该路由是从本设备的接口直接学习到的。

  • Tag0,这是一个路由标签,用于标识或分类路由。

  • Time0,表示此路由是立即学习到的,没有过期时间。

2. C(i) 192.168.123.0/24

C(i) 192.168.123.0/24   0.0.0.0               1 self              0
  • 这条路由的解析与第一条相似,是一个直接连接的网络 192.168.123.0/24,度量值为 1,并且由本机接口学习到。

3. R(n) 192.168.124.0/24

R(n) 192.168.124.0/24   10.147.17.219         2 10.147.17.219     0 02:27
  • R(n):这是一个由 RIP 协议学习到的路由,(n) 表示正常的 RIP 路由。

  • 192.168.124.0/24:目标网络是 192.168.124.0/24,这是一个通过 RIP 协议学到的路由。

  • Next Hop10.147.17.219,表示该路由的下一跳地址是 10.147.17.219,即该路由是通过 10.147.17.219 路由器到达的。

  • Metric:度量值为 2,表示到达该网络的路径的跳数或成本,2 表示通过该路径的跳数为 2。

  • From10.147.17.219,表示该路由是从 10.147.17.219 路由器学到的。

  • Tag0,路由标签。

  • Time02:27,表示该路由自学习以来已经存在了 2 分 27 秒。

4. C(i) 192.168.192.0/24

C(i) 192.168.192.0/24   0.0.0.0               1 self              0
  • 这条路由表示 192.168.192.0/24 是通过本机接口直接连接的网络,度量值为 1

总结

  • C(i) 类别的路由表示直接连接的子网,度量值为 1,即最佳路径。
  • R(n) 类别的路由表示通过 RIP 协议学到的路由。它是通过其他路由器 10.147.17.219 学到的,度量值为 2,表示该路径的跳数是 2。
  • 所有路由的下一跳信息和度量值都提供了路由信息的详细描述,表明如何到达不同的网络。

这些路由信息可以帮助你了解 FRR 当前的 RIP 路由表,具体到哪些路由是直接连接的(如 C(i) 路由)以及哪些路由是通过 RIP 协议学习到的(如 R(n) 路由)。

如果你希望在 FRR 中 指定具体的接口 上启用 RIP 协议并广播路由信息,你可以通过 interface 命令来配置。与 network 命令不同,interface 命令可以直接指定哪些接口参与 RIP而不必依赖于网络地址范围。

使用 interface 命令指定接口

在 FRR 中,如果你想在具体的接口上启用 RIP 协议并广播路由信息,步骤如下:

  1. 进入 RIP 配置模式 你首先需要进入 RIP 配置模式:

    router rip
    
  2. 使用 interface 命令指定接口 你可以使用 interface 命令来为特定接口启用 RIP。比如如果你想在接口 eth0tun0 上启用 RIP配置如下

    router rip
     network 192.168.123.0   # 启用 RIP 广播 192.168.123.0 网络
     network 10.147.17.0     # 启用 RIP 广播 10.147.17.0 网络
    
     # 通过 interface 命令启用 RIP
     interface eth0
      ip rip enable    # 在 eth0 上启用 RIP
    
     interface tun0
      ip rip enable    # 在 tun0 上启用 RIP
    

    上面的配置会确保 eth0tun0 接口参与 RIP 协议。

另一种方法:通过 passive-interfaceno passive-interface

如果你只希望在某些接口上启用 RIP 而在其他接口上禁用,你可以使用 passive-interfaceno passive-interface 命令。

  • no passive-interface:启用该接口上的 RIP 协议。
  • passive-interface:禁用该接口上的 RIP 协议(该接口不会发送 RIP 更新,但会接收 RIP 更新)。

例如:

router rip
 network 192.168.123.0   # 启用 RIP 广播 192.168.123.0 网络
 network 10.147.17.0     # 启用 RIP 广播 10.147.17.0 网络

 # 默认情况下,所有接口都可能是 passive禁用 RIP需要手动启用
 no passive-interface eth0   # 启用 eth0 接口的 RIP
 no passive-interface tun0   # 启用 tun0 接口的 RIP

 passive-interface br-lan    # 禁用 br-lan 接口上的 RIP

配置的解释:

  • no passive-interface:启用该接口的 RIP 协议,可以发送和接收 RIP 更新。
  • passive-interface:禁用该接口的 RIP 协议,只接收 RIP 更新,而不会发送。

总结:

  1. 使用 interface 命令来指定具体的接口启用 RIP。
  2. 使用 no passive-interface 来启用接口上的 RIP使用 passive-interface 来禁用接口上的 RIP 更新。

这种方式可以确保你有更多的控制,确保 RIP 只在你指定的接口上广播。