在 batman-adv 网状网络中配置多个网关

Configuring multiple gateways in a batman-adv mesh network

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

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

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

预期的行为是:

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

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

这正是 IP 层的预期行为。

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

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

To inform clients possessing a valid DHCP lease about a gateway change (the link quality to the gateway could have dropped or the client is roaming around) batman-adv will also inspect incoming DHCP renewal packets. If their destination is not the currently selected gateway and below a certain TQ threshold (currently defaulting to a TQ of 50), the DHCP renewal packet is not forwarded, thereby forcing the client to request a new DHCP lease from a better-connected gateway.

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

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