batman-adv

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

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

配置

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

$ insmod batman-adv.ko

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

$ 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 mesh接口、vlan和hardif都有其他设置,可以使用batctl修改。有关此的详细信息可以在其手册中找到。

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

$ batctl -M bat0 orig_interval
1000

并更改其值

$ batctl -M bat0 orig_interval 3000

在非常移动的场景中,您可能希望将发起者间隔调整为较低的值。这将使mesh对拓扑变化更加敏感,但也会增加开销。

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

用法

为了使用您新创建的mesh,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

在调查mesh网络的问题时,有时需要查看更详细的调试消息。必须在编译batman-adv模块时启用此功能。将batman-adv作为内核的一部分构建时,请使用“make menuconfig”并启用选项B.A.T.M.A.N. debuggingCONFIG_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/上的可选订阅)

您也可以联系作者