batman-adv

Batman advanced 是一种新的无线网络方法,它不再基于 IP 操作。与使用 UDP 数据包交换信息并设置路由表的 batman 守护进程不同,batman-advanced 仅在 ISO/OSI 第 2 层上运行,并使用和路由(或者更好地说是桥接)以太网帧。它模拟所有参与节点的虚拟网络交换机。因此,所有节点都显示为链路本地,因此所有更高层的操作协议都不会受到网络内任何更改的影响。您几乎可以在 batman advanced 之上运行任何协议,突出的例子有:IPv4、IPv6、DHCP、IPX。

Batman advanced 被实现为一个 Linux 内核驱动程序,以最大限度地减少开销。它不依赖于任何(其他)网络驱动程序,并且可以在 wifi 以及以太网局域网、vpn 等上使用(任何具有以太网样式第 2 层的设备)。

配置

将 batman-adv 模块加载到您的内核中

$ insmod batman-adv.ko

该模块现在正在等待激活。您必须添加一些 batman-adv 可以运行的接口。可以使用 iproute2 工具 ip 创建 batman-adv 软接口

$ ip link add name bat0 type batadv

要激活给定的接口,只需将其附加到 bat0 接口即可

$ ip link set dev eth0 master bat0

对您希望添加的所有接口重复此步骤。现在,batman-adv 开始在此/这些接口上使用/广播。

要停用接口,您必须将其从“bat0”接口分离

$ ip link set dev eth0 nomaster

也可以使用 batctl 接口子命令执行相同的操作

batctl -m bat0 interface create
batctl -m bat0 interface add -M eth0

要分离 eth0 并销毁 bat0

batctl -m bat0 interface del -M eth0
batctl -m bat0 interface destroy

每个 batadv 网状接口、vlan 和硬接口都有额外的设置,可以使用 batctl 修改。有关此的详细信息,请参见其手册。

例如,您可以检查当前的始发者间隔(以毫秒为单位的值,它确定 batman-adv 发送其广播数据包的频率)

$ batctl -M bat0 orig_interval
1000

并且还可以更改其值

$ batctl -M bat0 orig_interval 3000

在高度移动的场景中,您可能希望将始发者间隔调整为较低的值。这将使网格对拓扑更改更加敏感,但也会增加开销。

可以通过 batadv 通用 netlink 系列访问有关当前状态的信息。batctl 通过其调试表子命令提供人类可读的版本。

用法

为了利用您新创建的网格,batman advanced 提供了一个新的接口“bat0”,您应该从现在开始使用它。添加到 batman advanced 的所有接口都不再相关,因为 batman 会为您处理它们。基本上,通过使用 batman 接口“交出”数据,batman 将确保数据到达其目的地。

“bat0”接口可以像任何其他常规接口一样使用。它需要一个 IP 地址,该地址可以静态配置,也可以动态配置(通过使用 DHCP 或类似服务)

NodeA: ip link set up dev bat0
NodeA: ip addr add 192.168.0.1/24 dev bat0

NodeB: ip link set up dev bat0
NodeB: ip addr add 192.168.0.2/24 dev bat0
NodeB: ping 192.168.0.1

注意:为了避免问题,请删除先前分配给现在由 batman advanced 使用的接口的所有 IP 地址,例如

$ ip addr flush dev eth0

日志记录/调试

所有错误消息、警告和信息消息都将发送到内核日志。根据您的操作系统发行版,可以通过多种方式之一读取此日志。尝试使用以下命令:dmesglogread,或查看文件 /var/log/kern.log/var/log/syslog。所有 batman-adv 消息都以“batman-adv:”为前缀。因此,要仅查看这些消息,请尝试

$ dmesg | grep batman-adv

在调查网格网络问题时,有时需要查看更详细的调试消息。必须在编译 batman-adv 模块时启用此功能。当构建 batman-adv 作为内核的一部分时,请使用“make menuconfig”并启用选项 B.A.T.M.A.N. debugging (CONFIG_BATMAN_ADV_DEBUG=y)。

可以使用 perf 基础设施访问这些额外的调试消息

$ trace-cmd stream -e batadv:batadv_dbg

默认情况下禁用额外的调试输出。可以在运行时启用它

$ batctl -m bat0 loglevel routes tt

将启用有关路由和转换表条目更改的调试消息。

通过 ethtool 可以获得进出 batman-adv 模块的不同类型的数据包的计数器

$ ethtool --statistics bat0

batctl

由于 batman advanced 在第 2 层上运行,因此参与虚拟交换机的所有主机对于第 2 层之上的所有协议都是完全透明的。因此,常用的诊断工具无法按预期工作。为了克服这些问题,创建了 batctl。目前,batctl 包含 ping、traceroute、tcpdump 和内核模块设置的接口。

有关更多信息,请参见手册页 (man batctl)。

batctl 可在 https://www.open-mesh.org/ 上找到

联系方式

请向我们发送评论、经验、问题,任何内容 :)

IRC

ircs://irc.hackint.org/ 上的 #batadv

邮件列表

b.a.t.m.a.n@lists.open-mesh.org (可在 https://lists.open-mesh.org/mailman3/postorius/lists/b.a.t.m.a.n.lists.open-mesh.org/ 选择订阅)

您也可以联系作者