RaspberryPi 自组网
利用 batman-adv进行mesh组网,让多个Raspberry进行网络互通。
需要自己安装一个网卡用来联网
使用树莓派自带的wlan口wlan0进行组网
配置过程中需要下载软件安装包,因此需要联网
连接网络
我用的是有屏幕连接,连接之后,在wpa_supplicant中配置了我的wifi信息,包括wifi名称和密码以及优先级(非必须)
其次在interfaces中配置了端口wlan0的信息。
步骤如下:
配置wap_supplicant文件
在命令行中输入
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
进入界面后,添加下面语句
ctrl_interface=DIR=/var/run/wpa_supplicnat GROUP=netdev
update_config=1
country=CN
network={
ssid=''XXXX''
psk=''XXXX''
priority=10
}
ssid是WiFi的名称,psk是WiFi的密码,priority是优先级,有多个WiFi的时候可以设置优先级,选择联网的匹配顺序,priority值越大,优先级越高。
配置interfaces文件
在命令行中输入
sudo nano /etc/network/interfaces
进入界面后,添加下面语句
auto wlan1
allow-hotplug wlan1
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf #让wlan1端口通过WiFi配置文件进行联网
#配置wlan0 设置为ad-hoc模式,方便组网
auto wlan0
iface wlan0 inet static
address 99.0.0.1
netmask 255.255.255.0
network 99.0.0.0
broadcast 99.0.0.255
wireless-channel 1
wireless-essid test-adhoc
wireless-mode ad-hoc
auto wlan0 //表示如果有wlan设备,使用wlan0设备名
allow-hotplug wlan0 //表示wlan设备可以热插拨
iface wlan0 inet dhcp //表示如果有WLAN网卡wlan0 (就是WIFI网卡), 则用dhcp获得IP地址
这里使用iface wlan0 inet static //将wlan0配置为静态地址,用来和其余树莓派进行组网
设置多个Pi的IP地址应该在同一网段(例如99.0.0.0)
wireless-channel 01
wireless-essid test-adhoc #ad-hoc网络的名称,可以任取,但要保持一致
wireless-mode ad-hoc #将模式设置为ad-hoc模式
所有树莓派的这几个信息设置应该保持一致,将channel设置为01,当然也可以设置成其他频道,但所有Pi应该保持一致
可以在命令窗口使用以下语句进行查看有哪些channel可用
sudo iwlist wlan0 channel
完成apt-get的安装更新
在命令窗口中输入
sudo apt-get update && sudo apt-get upgrade -y
完成apt-get的安装
然后重启
sudo reboot -n
设置batman-adv
安装batman-adv软件
sudo apt-get install -y batctl
配置start-batman-adv.sh文件
在命令行中输入以下命令
sudo nano ~/start-batman-adv.sh
在打开的窗口中输入以下命令
#!/bin/bash
# batman-adv interface to use
sudo batctl if add wlan0
sudo ifconfig bat0 mtu 1468
# Tell batman-adv this is a gateway client
sudo batctl gw_mode client
# Activates batman-adv interfaces
sudo ifconfig wlan0 up
sudo ifconfig bat0 up
保存并退出
将start-batman-adv.sh文件变成可执行文件
在窗口中输入命令
sudo chmod +x ~/start-batman-adv.sh
确保加载batman-adv内核模块
echo 'batman-adv' | sudo tee --append /etc/modules
停止dhcp 进程尝试管理无线局域网接口wlan0:
echo 'denyinterfaces wlan0' | sudo tee --append /etc/dhcpcd.conf
将启动start-batman-adv.sh文件写入开机启动项中
sudo nano /etc/rc.local
在exit 0前插入
/home/pi/start-batman-adv.sh &
之后重启树莓派即可
查看网络节点
在命令窗口输入
sudo barctl n
可以查看到包含的树莓派设备的ad-hoc端口的MAC地址,如果想要识别出来每个MAC地址对应的是哪个树莓派
可以在etc文件夹下建立一个文件
sudo nano /etc/bat-hosts
在弹出的窗口中输入以下命令
MAC 名称
即 将对应的MAC地址映射成为对应设置的名称
在命令窗口输入
sudo batctl n
可以观察到此时显示的已经是设置的名称而不是MAC地址,可以更方便的分辨对应的设备
ping
在命令窗口输入
ping xxxxxx #对应树莓派的ip地址
如果ping通表示已经互通
linux下ping命令的使用
-d:使用Socket的S0_DEBUG功能;
-c<完成次数>:设置完成要求回应的次数;
-f:极限检测;
-i<间隔秒数>:指定收发信息的间隔时间;
-I<网络界面>:使用指定的网络界面送出数据包; #(大i)
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
-n:只输出数值;
-p<范本样式>:设置填满数据包的范本样式;
-q:不显示指令执行过程,开头和结尾的相关信息除外;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上;
-R:记录路由过程;
-s<数据包大小>:设置数据包的大小;
-t<存活数值>:设置存活数值TTL的大小;
-v:详细显示指令的执行过程。
参考
参考以下链接中的部分设置,同时加入了自己的设置,以此满足自己的需求
https://github.com/binnes/WiFiMeshRaspberryPi