2

我已经能够使用在几个 Raspberry Pi 上运行的 batman-adv 设置无线网状网络。如果网络上的任何 Pi 充当网关,Pi 能够在网格上相互检测、相互通信并共享 Internet 连接。

我面临的问题是,如果网络上存在多个网关,客户端(通过网关接收互联网连接的设备)将永远不会切换到从任何其他网关获取互联网连接,而不是他们最初从中获得的网关,即使路由算法检测到它们与另一个网关的连接更好。

每个网关都运行一个 DHCP 服务器,为通过它们访问 Internet 的客户端分配 IP 地址。我使用的 DHCP 服务器是 dnsmasq。

预期的行为是:

  • 客户端向能够提供更好连接的网关发送 DHCP 请求并结束与当前 DHCP 服务器的租约,或者
  • 客户端保留从 DHCP 服务器分配的 IP 并(神奇地?)开始通过能够提供更好连接的网关访问互联网。

这些情况都没有发生。如果出于某种原因,向客户端提供 Internet 的网关断开,客户端将不会尝试创建新连接,直到 DHCP 租用超时。然而,这与 wiki 上关于此包的声明相矛盾:https ://www.open-mesh.org/projects/batman-adv/wiki/Gateways

请告知如何配置此网状网络,以便发生任何一种预期行为。

4

1 回答 1

2

这正是 IP 层的预期行为。

如果 DHCP 服务器提供默认网关,则该网关在租约期内保持不变。根据设计,DHCP 客户端无法确定默认网关是否已关闭。

DHCP 是一种基于轮询的协议;在 DHCP 客户端请求更新之前,DHCP 服务器无法主动更改租用参数。您的问题链接中的说明表明(强调):

为了通知拥有有效 DHCP 租约的客户端有关网关更改(到网关的链接质量可能已经下降或客户端正在漫游),batman-adv 还将检查传入的 DHCP 更新数据包。如果它们的目的地不是当前选择的网关并且低于某个 TQ 阈值(当前默认为 50 的 TQ),则不会转发 DHCP 更新数据包,从而迫使客户端从连接更好的网关请求新的 DHCP 租约。

请注意,更改是通过检查传入的更新数据包发生的。由于 DHCP 的性质,您需要等待更新网关的租约更新请求。

您可以设置较短的租用时间以提高轮询率,但如果您需要对故障网关做出实时反应,则需要使用实际的路由协议。

于 2020-07-26T06:28:40.867 回答