如何configurationBIRD路由器与另一个子网上的邻居进行通信?

介绍

我试图在运行BIRD路由守护进程的两台主机之间build立与RIPv2协议的基本通信。

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

configuration文件

Host A上有以下的bird.conf

 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;}; } 

Host B上的enp0是相同的,只不过enp0enp0取代

初步结果

在两台主机上启动这个守护进程之后,我可以做一个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

包起来

如果链路的两端不在同一个子网上,我怎么能让这些路由器把邻居列为邻居呢?

我必须对networking的工作原理有一些不正确的想法,路由器不需要和不在同一子网上的邻居通话吗?

我没有挂上BIRD特定的答案。

早在有线协议比TCP / IP更多的情况下,我运行RIP。 当时,它是RIPv1,它使用广播。 networking拓扑看起来有点像这样:

 [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] 

所有的路由器将共享一个只有路由器的子网。 对于双路由器设置,就像你在做的那样,它们之间有一根电缆串在一起。 对于较大的设置,将有一个快速的networking设备运行子网(希望是一个开关,但不是总是)。 这样一切都是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地址的路由,所以它不会将它添加到表中。 多播是您的公告频道,但不能传送路由stream量。

一切都不会丢失。

如果出于某种原因限制为单根电缆,则可以定义虚拟接口。 其中enp0.0位于10.3.1.0/24,enp0.1 enp0.1 。 这样你可以使用10.3.1.0/24作为你的“路由networking”。