RIPv2:广告中的奇怪规则

RIPv2:广告中的奇怪规则

在 Linux 上 Quagga 的当前版本中,我发现有一条规则可以抑制某些路由信息通过 RIPv2 向邻居路由器通告。

一张图片胜过千言万语

如果路由器 r1 通过接口 'nic0' 连接到另一个路由器 r2,并且 r1 有另一个接口 'nic1' 连接到另一个网络 'net1'。那么 r1 希望将到 'net1' 的路由通告给其邻居 r2。网络(例如 net0)是连接 r1 和 r2 的网络,即 10.3.1.32/27,而网络 'net1' 即 10.3.1.0/24。

在这种情况下,10.3.1.0/24(通过 nic1)的路由条目将不会被发送到 r2,因为 Quagga 中的 RIPv2 程序内部抑制了该条目并将其丢弃。

我查看了Quagga的RIPv2源代码,发现是因为一条规则:10.3.1.0/24有一个网络前缀,该网络前缀包含在10.3.1.32/27的网络前缀中,换句话说,10.3.1.0的最左边24位是10.3.1.32的最左边27位的子字符串。

但我不明白为什么会有这样的规则。这是由 RIPv2 标准定义的,还是 Quagga 的怪癖?据我所知,net0 和 net1 之间的重叠是有效的,并且由于路由中的“最长网络前缀匹配规则”,因此不应该成为问题,而对于路由器 r2,它确实需要知道存在一个更大的网络 net1(与 net0 相比)可以通过 r1 到达。如果 Quagga 抑制了此路由信息,则 r2 将不知道这一点,并且无法从 r2 端的 net0 访问 net1 中的主机。

有人知道吗?

谢谢,伍迪

答案1

如果 10.3.1.0/24 网络直接连接到 R1,则可能会出现问题。在这种情况下,R1 的两个接口上的 IP 地址重叠。我不是 Linux 专家,但我知道 Cisco 路由器不支持此功能(而且我敢肯定其他任何路由器/防火墙也不支持此功能)。

如果网络没有直接连接到 R1,那么网络中必须有第三个路由器,我们将其称为 R0。R0 直接连接到 10.3.1.0/24 网络,并通过其他网络(例如 172.16.0.0/24)连接到 R1。在这种情况下,设置应该可以正常工作。我已经在 Cisco 路由器上测试过了。

      10.0.0.0/8 is variably subnetted, 4 subnets, 4 masks
R        10.3.1.0/24 [120/1] via 172.16.0.101, 00:00:13, Ethernet0/1 (nic1)
C        10.3.1.32/27 is directly connected, Ethernet0/0 (nic0)

也许 Quagga——尽管它没有抱怨——也无法处理其两个接口上重叠的 IP 范围。

相关内容