BATMAN.adv系列02:网络搭建,有线接入BATMAN.adv网络
原创文章,转发请注明链接和作者。(而且作者很懒,没有检查错别字)
摘要
本文主要讲解如何通过openwrt的路由器搭建batman网络,包括通过有线接入batman网络。本文假定路由器已经成功安装了openwrt系统,由于安装系统的较多,本文不再赘述。
1 batman-adv的安装
首先需要确保自己的路由器安装了batman-adv安装方法有很多种,这里推荐2种。通过以下命令可以查看是否安装了batman-adv
opkg list | grep kmod-batman-adv
如果常规安装了通常会有以下输出:
kmod-batman-adv - 4.9.172+2018.1-7
1.2 okpg安装法
输入opkg install kmod-batman-adv即可安装batman-adv
输入opkg install batctl可以安装一个batman-adv的管理工具,虽然不是必须,但是推荐安装一下
1.3 编译安装
此方法类似于重新编译openwrt,因此需要参考内核编译的相关内容,这里以WNDR4300为例讲解,以下操作在Linux中进行,作者采用的是ubunt18
- 下载Openwrt源码,然后进入源码的根目录
- 更新安装包:
./scripts/feeds update –a - 安装软件包到feeds文件夹:
./scripts/feeds install –a - 添加Batman源码和Batman调试工具batctl
scripts/feeds install kmod-batman-adv
scripts/feeds install batctl - 通过输入下文进入配置:
make menuconfig - 根据自己的路由器型号选择型号:
Subtarget ---> Generic devices with NAND flash
Target System ---> Atheros AR7xxx/AR9xxx
Target Profile ---> NETGEAR WNDR4300v1 - 将Batman源码添加进编译选项中
Kernel modules ---> Network Support ---> kmod-batman-adv - 添加Batman的调试工具batctl
Network --->batctl - 添加iperf带宽测试工具。
Network - - - >iperf - 为OpenWrt系统添加LuCI,方便通过网络界面控制
LuCI ---> Collections ---> luci - (可选)为例方便控制我们可以添加以下服务
Network ---> SSH ---> openssh-client
Network ---> SSH ---> openssh-client-utils
Network ---> SSH ---> openssh-keygen
Network ---> SSH ---> openssh-server
Network ---> SSH ---> openssh-sftp-client
Network ---> SSH ---> openssh-sftp-server - 开始编译,其中V=s表示显示详细信息,-jx表示x个线程(推荐与核心数相同):
make V=s -j4
第一次编译的时间较长,由电脑的CPU确定。
完成上述工作后,需要将编译好的系统植入路由器。读者根据当前路由器情况选择一种更新固件的办法:
1、路由器还是原生系统或者忘记密码了希望重置整个openwrt系统:
百度或谷歌搜索将编译好的镜像烧录至路由器的办法,本文不提供
2、已经烧录好了openwrt,想换成本文刚刚编译好的系统:
(不同路由器路径会不同)可以在/bin/targets/ar71xx/nand/可以找到一个文件openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar。登陆路由器管理界面之后进入:System--->Backup.Flash Firmware,选择openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar刷入。好像还有别的升级办法,具体自己搜索。
2 组建无线batman网络
这一步主要是使得各个路由器可以通过batman网络互联。
下面会涉及到对许多文件的修改,可以使用ssh连接路由器后用vim命令打开文件并且修改,也可以通过fts或者sftp等方式把文件下载到电脑中然后修改并上传。
2.1 对/etc/config/wireless文件的修改
1、本次修改以2.4G 无线网络为例。修改2.4G Wifi的硬件配置如下,本设置相当于是对wifi工作的频率等物理信息进行设置,标红的部分下文会有讲解:
config wifi-device 'radio0'
option type 'mac80211'
option channel '9'
option hwmode '11g'
option path 'platform/ar934x_wmac'
option htmode 'HT40'
option country 'US'
其中channel应该根据自己的要求设置,应该选择一个干扰比较少的信道。
option hwmode '11g' :表示是802.11g
不了解802.11协议中带宽的可以参考:https://kknews.cc/zh-hk/tech/qe8x8nr.html
2、然后将2.4G的网络配置修改如下,本设置相当于是对网络中协议相关的部分进行设置,标红的部分下文会有讲解:
config wifi-iface 'wmesh'
option device 'radio0'
option ifname 'adhoc0'
option network 'batnet'
option mode 'adhoc'
option ssid 'mesh'
option mcast_rate '18000'
option bssid '02:CA:FE:CA:CA:40'
option encryption 'none'
option device 'radio0':表明设定设备为'radio0'
option ifname 'adhoc0':将设备的接口设定为adhoc0
option network 'batnet':设定使用的是batman网络
option mode 'adhoc':表明2.4G的网络工作在adhoc模式
option ssid 'mesh':将wifi名称设置为mesh,对于ssid不了解的可以自行搜索。
option bssid '02:CA:FE:CA:CA:40':将wifi的bssid设置成02:CA:FE:CA:CA:40。对于,对于bssid不了解的可以自行搜索。
注意:在同一个网络中的所有Batman节点,应满足以下几个条件:(1)Wifi的频率相同,channel相同;(2)MAC地址不同,如果MAC地址相同的话,就不能够组网,这是当所有自组网不能组网的时候首先应该被排除的一个条件(3)bssid相同。
可能会有一个“ option disabled '1' ”的选项,见到了记得改成0
2.2 对/etc/config/network的配置
这里我们首先保证路由器直接可以ping通,之后再做桥接
1、添加如下
config interface 'batnet'
option mtu '1560'
option proto 'batadv'
option mesh 'bat0'
option routing_algo 'BATMAN_V'
config interface 'batnet':添加一个网络接口,名为batnet
- option proto 'batadv':该接口使用batadv协议
- option mesh 'bat0':mesh网络为名为bat0
- option routing_algo 'BATMAN_V' :使用BATMAN_V路由算法
2、添加如下
config interface 'bat'
option ifname 'bat0'
option type 'bridge'
option proto 'static'
option mtu '1560'
option ipaddr '10.0.0.1'
option netmask '255.0.0.0'
这里设置了一个桥接以及路由器在btaman网络中的IP地址
config interface 'bat':添加一个网络接口,名为bat
option ifname 'bat0':选择一个物理层的接口名为bat0,实际上bat0就是batman-adv对应的物理接口,向该接口发包就会在batman网络中转发
option type 'bridge':设定此网络接口为桥接
option proto 'static':静态IP协议
option ipaddr '10.0.0.1':这里就是设置路由器自己的IP地址,不同路由器应该要有不同的IP,可以根据需要选择合适的网段,通常可以作为内网的网段10.0.0.0~10.255.255.255,172.16.0.0~172.31.255.255,192.168.0.0~192.168.255.255。
option netmask '255.0.0.0':这是根据网段选择的掩码
2.3 测试
记得,做到这一步需要先重启一下
输入batctl n可以查看路由器是找到了btaman网络中的其他路由器。
使用ping命令检查是否可以通过IP连同对应的路由器
3 有线设备接入batman网络
默认情况下,所的有线接口都是桥接在一起,然后通过WAN口访问网络的,现在需要将一个有线接口桥接到bat0网络,这样就可以是的有线设备接入batman网络了。然后对有线设备静态分配一个IP就可以在batman中使用IP连接不同设备了。
这里需要了解VLAN的相关内容,关于VLAN的内容可以参考:
https://baijiahao.baidu.com/s?id=1628398215665219628&wfr=spider&for=pc
这部分设计的配置文件都是/etc/config/network
3.1 系统默认的VLAN设置
打开路由器管理界面就,在Network下来菜单中的Switch可以看到VLAN的配置情况。这里显示untragged的就相当于接入了VLAN,tagged的我们不会用到,无需理会。
我们再从配置文件中查看,选择一个路由器查看/ect/config/network文件可以看到,系统一开始就已经创建了两个VLAN,其中1,2,3,4,0被连接到了VLAN1上,VLAN1在lan接口中被配置成了桥接。这个lan接口可以在路由器管理界面中的在Network下来菜单中的Interface中看到。
3.2 修改配置文件使得有线接入BATMAN网络
这里我们开始修改配置文件使得有线接入BATMAN网络,这里我们只选择一个接口接入BATMAN网络,多个接口的情况相似,以下有几个需要注意的点:
- 配置文件中的编号和实际中LAN口的编号会有所不同,配置完之后去Network下来菜单中的Switch中看一眼,这一点下面会再次强调。
- 因为VLAN1被lan接口占用了,所有我们应该新建一个VLAN
3.2.1 修改VLAN
本人新建了一个VLAN3,并且将4号接口从VLAN1中移除,接入到了VLAN3中,记得VLAN3中也需要有加入0号口并且处于tageted状态。这样,网卡中同时也会出现一个名为eth0.3的虚拟网卡。(不同路由器可能会有不同的switch设备,最后生成的可能也不一定是eth0.3,可能会是eth1.3等)
3.2.2 桥接入batman网络
将eth0.3加入bat接口,保存,然后重启路由器就可以了
3.2 有线接口的编号和配置文件中的可能不一样
注意:有线接口的编号和配置文件中的可能不一样
下面有一个本人路由器的例子由上文可知,我在配置文件中选择加入VLAN3的编号是4,但是实际上在Network下来菜单中的Switch界面可以看到,发生变化的接口是LAN1
4.1 有线接入设备的设置
这里以ubutnu18为例,设置静态ip就可以了。接入后,所有的BATMAN.adv网络中的有线接口相当于在一个交换机下,同给路由器配置的BATMAN.adv ip地址可以直接访问路由器。