article/openwrt/frr-动态路由.md
2024-12-26 10:24:29 +08:00

347 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## FRR 动态路由
FRR 动态路由软件包 组件
这些配置行似乎来自于某种网络服务或路由器的配置文件,每一行都代表对一个特定的网络守护进程(daemon)的启用yes或禁用no设置。
### 1. `frr`
这是 FRRouting 的核心包,包含了 FRR 的基础框架和多个路由协议守护进程(如 RIP、OSPF、BGP 等)。安装该包后,你可以运行 FRR 的所有路由协议服务和工具。
### 2. `frr-babeld`
Babel 是一种适用于 IP 网络的动态路由协议。这个包安装的是 **Babel 路由协议守护进程**,它用于支持 Babel 协议。Babel 是一种自适应的距离矢量协议,适用于小型到中型的网络。
- **作用**:用于动态路由发现和更新,特别适用于无线网络和 ad-hoc 网络。
### 3. `frr-bfdd`
BFDDBFDBidirectional Forwarding Detection是一种快速检测路径故障的协议。这个包提供了 **BFD 守护进程**,可以帮助快速发现路由器之间的连接故障,并根据路由协议快速进行故障恢复。
- **作用**:用于加速故障检测,并使路由协议更快地重新计算路径。
### 4. `frr-bgpd`
BGPBorder Gateway Protocol是 Internet 上主要的外部网关协议。该包安装的是 **BGP 路由协议守护进程**,用于 BGP 配置和管理,支持 IPv4 和 IPv6 的路由交换。
- **作用**用于与其他自治系统AS交换路由信息常用于大规模网络如互联网骨干网络中的路由控制。
### 5. `frr-eigrpd`
EIGRPEnhanced Interior Gateway Routing Protocol是 Cisco 开发的一种内部网关协议IGP。这个包安装的是 **EIGRP 路由协议守护进程**
- **作用**用于在同一自治系统内交换路由信息EIGRP 是 Cisco 特有的协议,适用于企业网络。
### 6. `frr-fabricd`
这是 **Fabric 路由协议守护进程**,用于支持 **数据中心网络中的 Fabric 路由协议**,主要用于网络设备间的直接连接,简化网络架构和拓扑管理。
- **作用**:通常用于大型数据中心的网络结构中,提供更高效的流量路由和管理。
### 7. `frr-isisd`
IS-ISIntermediate System to Intermediate System是一种内部网关协议IGP主要用于大规模的服务提供商网络。这个包安装的是 **IS-IS 路由协议守护进程**
- **作用**用于在大型网络中进行高效的路由选择IS-IS 主要在运营商和大规模网络中使用。
### 8. `frr-ldpd`
LDPLabel Distribution Protocol用于 MPLS 网络中,帮助路由器之间分配标签。该包安装的是 **LDP 守护进程**
- **作用**:在 MPLS 网络中,帮助管理标签分发和路由决策,优化数据包的转发路径。
### 9. `frr-libfrr`
这是 **FRR 的库包**,它提供了 FRR 所需的共享库。安装该包可以为其他 FRR 组件提供支持。
- **作用**:作为 FRR 的核心库文件,其他 FRR 组件依赖于它来提供基本的路由处理功能。
### 10. `frr-nhrpd`
NHRPNext Hop Resolution Protocol是用于 IP 网络中查找下一跳信息的协议,特别适用于 VPN 和 IP 网络互联。这个包安装的是 **NHRP 守护进程**
- **作用**:用于基于 NHRP 协议查找 IP 地址的下一跳,通常用于 VPN 和其他隧道协议中。
### 11. `frr-ospf6d`
OSPFv3Open Shortest Path First version 3是用于 IPv6 网络的路由协议。这个包安装的是 **OSPFv3 路由协议守护进程**
- **作用**:提供对 IPv6 网络的路由支持OSPFv3 是 OSPF 的扩展版本,支持 IPv6 地址族。
### 12. `frr-ospfd`
OSPFOpen Shortest Path First是一个广泛使用的内部网关协议IGP它使用链路状态协议来计算最佳路径。这个包安装的是 **OSPF 路由协议守护进程**
- **作用**:用于基于链路状态协议的路由计算,适用于大型企业网络中的路由配置。
### 13. `frr-pbrd`
PBRPolicy-Based Routing是基于策略的路由协议允许根据数据包的内容如源 IP、目标 IP 等)决定路由路径。这个包安装的是 **PBR 守护进程**
- **作用**:提供基于策略的路由决策,允许对流量进行更细粒度的控制。
### 14. `frr-pimd`
PIMProtocol Independent Multicast是用于组播路由的协议适用于需要多播的应用。这个包安装的是 **PIM 守护进程**
- **作用**:为网络提供组播支持,适用于需要组播(如视频流、广播等)的网络应用。
### 15. `frr-ripd`
RIPRouting Information Protocol是一个距离矢量协议适用于小型或中型的网络。这个包安装的是 **RIP 路由协议守护进程**
- **作用**:实现 RIP 协议,进行路由信息的传播,适用于简单的内部网络。
### 16. `frr-ripngd`
RIPngRIP next generation是 RIP 协议的扩展,支持 IPv6 网络。这个包安装的是 **RIPng 路由协议守护进程**
- **作用**:提供 RIP 协议的 IPv6 支持,适用于 IPv6 网络中的动态路由。
### 17. `frr-staticd`
Staticd 组件用于管理 **静态路由**,这些路由是手动配置的,并不通过动态路由协议传播。这个包安装的是 **静态路由守护进程**
- **作用**:管理静态路由的配置,适用于不需要动态路由的网络部分。
### 18. `frr-vrrpd`
VRRPVirtual Router Redundancy Protocol是一个用于提供虚拟网关冗余的协议。这个包安装的是 **VRRP 守护进程**
- **作用**:提供网关冗余服务,保证网络的高可用性,当主网关故障时,自动切换到备用网关。
### 19. `frr-vtysh`
VTYSH 是 **FRR 的命令行界面工具**,用于与 FRR 进程进行交互,配置和管理各种路由协议。
- **作用**提供一个统一的命令行界面CLI来管理 FRR 配置,包括所有路由协议和 Zebra。
### 20. `frr-watchfrr`
Watchfrr 组件是一个监控工具,用于检测 FRR 路由协议进程的健康状态并进行管理。
- **作用**:监控 FRR 各个路由协议守护进程的运行状态,确保路由协议的稳定性。
### 21. `frr-zebra`
Zebra 是 FRR 的核心组件之一,负责将路由协议的路由信息传递给内核,并管理网络接口和静态路由。这个包安装的是 **Zebra 路由守护进程**
- **作用**:与操作系统内核进行交互,管理路由表、接口配置等。
rip 配置
```bash
router rip
network 192.168.123.0/24
network 192.168.192.0/24
!
interface eth0
ip rip send version 2
ip rip receive version 2
!
interface eth1
ip rip send version 2
ip rip receive version 2
```
第一段申明一个rip 路由
宣告两个子网
```
network 192.168.123.0/24
network 192.168.192.0/24
#静态路由
route 10.147.17.0/24
```
申请监听来自那个接口的 rip 路由包
```
interface eth0
ip rip send version 2
ip rip receive version 2
!
```
`ip rip send version 2` 发送V2协议包
`ip rip receive version 2` 接收V2协议包
根据你提供的 `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**: 每条路由的类型。
- `R`RIP协议路由
- `C`:连接路由(直接连接的路由)
- `S`:静态路由
- `O`OSPF协议路由
- `B`BGP协议路由
- **Sub-codes**: 路由的子类型。
- `(n)`:正常路由
- `(s)`:静态路由
- `(d)`:默认路由
- `(r)`:由其他协议重分发的路由
- `(i)`:接口路由(指向接口的路由)
### 路由信息解析
#### 1. **C(i) 10.147.17.0/24**
```bash
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 Hop**`0.0.0.0`,表示这是一个直接连接的网络,因此不需要下一跳地址。
- **Metric**:度量值为 `1`,表示该路由的度量值,这里是直接连接的网络,度量值是最小的。
- **From**`self`,表示该路由是从本设备的接口直接学习到的。
- **Tag**`0`,这是一个路由标签,用于标识或分类路由。
- **Time**`0`,表示此路由是立即学习到的,没有过期时间。
#### 2. **C(i) 192.168.123.0/24**
```bash
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**
```bash
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 Hop**`10.147.17.219`,表示该路由的下一跳地址是 `10.147.17.219`,即该路由是通过 `10.147.17.219` 路由器到达的。
- **Metric**:度量值为 `2`,表示到达该网络的路径的跳数或成本,`2` 表示通过该路径的跳数为 2。
- **From**`10.147.17.219`,表示该路由是从 `10.147.17.219` 路由器学到的。
- **Tag**`0`,路由标签。
- **Time**`02:27`,表示该路由自学习以来已经存在了 2 分 27 秒。
#### 4. **C(i) 192.168.192.0/24**
```bash
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 配置模式:
```plaintext
router rip
```
2. **使用 `interface` 命令指定接口** 你可以使用 `interface` 命令来为特定接口启用 RIP。比如如果你想在接口 `eth0` 和 `tun0` 上启用 RIP配置如下
```plaintext
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
```
上面的配置会确保 `eth0` 和 `tun0` 接口参与 RIP 协议。
### 另一种方法:通过 `passive-interface` 或 `no passive-interface`
如果你只希望在某些接口上启用 RIP 而在其他接口上禁用,你可以使用 `passive-interface` 或 `no passive-interface` 命令。
- **`no passive-interface`**:启用该接口上的 RIP 协议。
- **`passive-interface`**:禁用该接口上的 RIP 协议(该接口不会发送 RIP 更新,但会接收 RIP 更新)。
例如:
```plaintext
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 只在你指定的接口上广播。