介绍

介绍

介绍

我正在尝试在运行以下协议的两个主机之间建立 RIPv2 协议的基本通信:BIRD 路由守护进程

我有Host A一个接口,enp0其地址为10.0.1.50/24
我还有另一个主机,其Host B接口enp1的地址为10.1.1.25/24。这些接口通过电缆直接连接。如果我在两台机器上都添加静态路由,我就可以在两台机器之间 ping 通。

配置文件

我有以下bird.conf内容Host A

protocol kernel {
        learn;                  # Learn all alien routes from the kernel
        persist;                # Don't remove routes on bird shutdown
        scan time 20;           # Scan kernel routing table every 20 seconds
        export all;             # Default is export none
}

protocol device {
    scan time 10;           # Scan interfaces every 10 seconds
}

protocol direct {
        interface "enp0"
}

protocol rip MyRIP {    
    export all;
    import all;
    interface "enp0" { mode multicast;};
}

onbird.confHost B相同的,只是enp0被替换为enp1

初步结果

在两台主机上启动 bird 守护进程后,我可以执行tcpdump -ni enp0 -vv

13:21:41.943537 IP (tos 0xc0, ttl 1, id 4933, offset 0, flags [none], proto UDP (17), length 132)
    10.1.1.25.520 > 224.0.0.9.7742: [udp sum ok] UDP, length 104
13:21:41.943704 IP (tos 0xc0, ttl 1, id 150, offset 0, flags [none], proto UDP (17), length 272)
    10.0.1.50.520 > 224.0.0.9.7742: [bad udp cksum 0xec48 -> 0x1219!] UDP, length 244

我可以跳入birdcl命令行并运行show rip neighbors并获取一个空表。

使其发挥作用

如果我将地址设置为位于同一子网,我就可以运行show rip neighbors,并且可以10.0.1.50在邻居列表中看到。

包起来

如果链路两端不是在同一个子网上?

我对于网络的工作方式一定存在某种错误的认识,路由器不是需要一直与不在同一子网上的邻居通信吗?

我并不纠结于针对 BIRD 的答案。

答案1

很久以前,当网络上的协议比 TCP/IP 还多时,我就运行了 RIP。当时是 RIPv1,使用广播。网络拓扑看起来有点像这样:

[10.0.0.0/24] <-- router --> [10.0.1.0/24] <-- router --> [10.0.2.0/24]
[10.0.3.0/24] <-- router ------^        ^---- router  --> [10.0.4.0/24]
[10.0.5.0/24] <-- router -------^      ^----- router  --> [10.0.6.0/24]

所有路由器将共享一个只有路由器的子网。对于双路由器设置,它们之间只有一条电缆,就像您现在所做的那样。对于更大的设置,将有一个运行子网的快速网络设备(希望是交换机,但并非总是如此)。这样,所有东西都在 2 跳之外,路由收敛变得简单。这就是我们当时所拥有的。

随后出现了 RIPv2 和多播,跳数越多,收敛问题就越少。如果将多播 TTL 设置为跳数直径的 +1,则每个路由器都会有效地直接向其他每个路由器进行通告,从而使收敛速度更快。

不过,需要考虑的关键问题是:查看 TCPDUMP 输出上的源地址。

 10.1.1.25.520 > 224.0.0.9.7742
 10.0.1.50.520 > 224.0.0.9.7742

路由器10.0.1.50已被告知 处的路由器10.1.1.25具有 的本地子网10.1.1.0/24。但是, 处的路由器10.0.1.50没有到地址 的路由10.1.1.25,因此不会将其添加到表中。多播是您的公告渠道,但它无法承载路由流量。

但一切还没有失去。

如果由于某种原因您只能使用单条电缆,则可以定义虚拟接口。其中enp0.0位于 10.3.1.0/24 上,enp0.1位于 10.0.1.0/24 上。这样,您就可以使用 10.3.1.0/24 作为“路由网络”。

相关内容