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
日志记录/调试¶
所有错误消息、警告和信息消息都将发送到内核日志。根据您的操作系统发行版,可以通过多种方式之一读取此日志。尝试使用以下命令:dmesg
、logread
,或查看文件 /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/ 选择订阅)
您也可以联系作者
Marek Lindner <mareklindner@neomailbox.ch>
Simon Wunderlich <sw@simonwunderlich.de>