openwrt_树莓派_mesh自组织网络

openwrt

  • 需求:主要是为了进行无缝漫游,可以控制的路由器,同时尝试mesh自组织网络,并进行测试。
  • oepnwrt基于Linux系统,可以在做路由器的同时当作一个服务器来使用,扩展性非常强。

OpenWrt官方介绍:

OpenWrt项目是针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了一个完全可写的文件系统及软件包管理。这使您可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序。对于开发人员来说,OpenWrt是一个构建应用程序的框架,无需在其周围构建完整的固件; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。
OpenWrt/LEDE是一个为嵌入式设备(通常是无线路由器)开发的高扩展度的GNU/Linux发行版。与许多其他路由器的发行版不同,OpenWrt/LEDE是一个完全为嵌入式设备构建的功能全面、易于修改的由现代Linux内核驱动的操作系统。在实践中,这意味着您可以得到您需要的所有功能,却仍能避免臃肿。

安装openwrt

openwrt的设备支持列表如OpenWrt 支持的设备列表所示,各版本的树莓派都可以安装最新版本的OpenWrt,截止到2021年2月1日

  • OpenWrt 支持的树莓派版本
设备表 型号 更新日期 版本
Raspberry Pi 2B 1.0/1.1 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 2 B 1.2 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 3 B 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 3 B+ 21.02.1 raspberry_pi View/Edit data
Raspberry Pi A 21.02.1 raspberry_pi View/Edit data
Raspberry Pi B 21.02.1 raspberry_pi View/Edit data
Raspberry Pi B+ 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 4 B 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 4 400 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 3 Compute Module 3 21.02.1 raspberry_pi View/Edit data
Raspberry Pi 4 Compute Module 4 21.02.1 raspberry_pi View/Edit data
Raspberry Pi Zero 21.02.1 raspberry_pi View/Edit data
Raspberry Pi Zero W 21.02.1 raspberry_pi View/Edit data

下载 OpenWrt 镜像
在设备上面的表格中选择自己的树莓派型号,点击 View/Edit data ,然后进入 详情页面,选择“ Firmware OpenWrt Install URL ”,这个就是要下载的镜像,我们把它保存到本地。

树莓派4B下载地址:https://openwrt.org/toh/hwdata/raspberry_pi_foundation/raspberry_pi_foundation_raspberry_pi_4_b

因此下载地址为:http://downloads.openwrt.org/releases/21.02.1/targets/bcm27xx/bcm2711/openwrt-21.02.1-bcm27xx-bcm2711-rpi-4-squashfs-factory.img.gz

将 OpenWrt 镜像烧录到树莓派中,windows下可以使用 Etcher 软件烧录。同样OpenWrt 镜像支持树莓派从U盘启动:
但我尝试,此过程无法成功脸上wifi。

Openwrt固件

换个地址下载openwrt.cc

树莓派上的 OpenWrt 配置

以下是我的树莓派无线路由器配置过程。

  1. 登陆 OpenWrt
    用网线将树莓派和电脑相连接,然后在浏览器中输入192.168.1.1,即可打开登陆页面。

    选择openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img 并下载

  2. 烧录镜像

在电脑上用balenaEtcher(或其他可烧录镜像的软件)读取sd卡,烧录进刚刚下好的完整镜像

  1. 进入配置界面

将SD卡塞进树莓派,连接电源(注意:这时候树莓派不要连接网线到路由器)

电脑或者手机通过wifi连接openwrt,浏览器输入192.168.1.1进入openwrt的管理界面

默认用户root 密码password

OpenWrt 登陆页面
自己设置一个密码,点击login登陆

mesh自组织网络

如下图所示,mesh网络由MPP、MP、MAP三种设备组成:

  • MPP(mesh portal point):连接无线mesh网络和其他类型的网络,并与mesh网络内部MP/MAP节点进行通信。这个节点具有Portal功能,通过这个节点,mesh内部的节点可以和外部网络通信。
  • MP(mesh point):在mesh网络中,使用IEEE 802.11sMAC和PHY协议进行无线通信,并且支持mesh功能的节点。该节点支持自动拓扑、路由的自动发现、数据包的转发等功能。
  • MAP(mesh access point):任何支持AP功能的mesh point,可以为Station提供接入功能。

这三种设备配置也不一样,他们之间是通过mesh链路连接在一起的,但是需要保证mesh节点工作的信道号和mesh id号必须相同!

设置开放性环状网络

在此示例中,我们将配置一个mesh节点以使用mesh网络,该节点将自动与使用相同配置(mesh和信道)的任何其他对等节点连接。
每个mesh节点都需要如下设置:

  1. 使用编译iw的内核并正确安装引导多个节点。
  2. 选择一个mesh id。mesh id是一个将在mesh节点信标中使用的字符串。只有具有相同mesh id的网格点才能相互通信。mesh id的最大长度为32个字节。在本文档中,我们将网格ID称为$MESH_ID。
  3. 在每个节点上为wlanN设备添加一个新的Mesh接口。您可以选择网格接口的名称。“mesh”是一种流行的选择。在本文中,我们将mesh 接口称为$MESH_IFACE,我起名为mesh0。

使用第二张网卡wlan1来做mesh组网,过程如下:

  1. 关闭wlan1

ip link set wlan1 down

  1. 添加mesh

iw dev wlan1 interface add mesh0 type mp

  1. 查看是否创建成功

ifconfig -a | grep mesh0

输出 mesh0 Link encap:Ethernet HWaddr E8:4E:06:96:A6:51

  1. 注意:默认情况下,所有mesh接口都从信道1开始。

iw dev mesh0 set channel 1

  1. 关闭mesh0并设置mesh id
1
2
ip link set mesh0 down
iw dev mesh0 set meshid mymesh
  1. 启动mesh0

ifconfig mesh0 up

  1. 分配ip,mesh组网要在同一个网段下

ifconfig mesh0 192.168.1.171

这样一台设备就配置好了。配置其他设备的时候只需要分陪不同的IP即可。在默认配置中,mesh节点将自动尝试创建所有其他具有相同mesh id的网格节点的对等链接。

或者使用另一种方式:

  1. 使用phy接口,使用iw list,查看网卡对应的phy,我的wlan1对应的phy1,先关掉wlan1
1
2
ip link set wlan1 down
iw phy phy1 interface add mesh0 type mp mesh_id mymesh
  1. 验证是否创建成功

ifconfig -a | grep mesh0

  1. 启用mesh0

ifconfig mesh0 up

  1. 设置ip,假设为192.168.1.171

ifconfig mesh0 192.168.1.171

方法三:

树莓派启动后,默认有有线网卡 eth0、无线网卡wlan0;为了支持 Mesh,还需加载 USB 的无线 wlan 驱动,驱动加载完成后,系统会显示 wlan1接口。

  1. 先通过 Openwrt 设置 wlan0 为 ap 模式,为移动终端等提供无线 WiFi接入;
  2. 再设置 wlan1 网卡为 Mesh 模式,同时所有不同的树莓派 wlan1网卡的 Mesh 信道都必须设置一致,由于无线信道带宽重叠原因,一般信道 1,6,11 为互不干扰信道,在此将 Mesh网络信道设置为 1信道;
  3. 接着设置 wlan1 网卡的 MAC 地址及 IP 地址,由于在 Mesh 网络中,识别不同设备是通过 MAC 来识别的,因此必须设置不同的 MAC 地址;同时设置 IP 地址为同一掩码范围内的 IP地址,如 192.168.2.0/24;
  4. 连接测试 Mesh 网络状态,各终端使用 ping 命令测试网络通断、丢包率等;
  5. 为了使无线骨干网与移动网络等网系联通,这只 桥 接 网 卡 用 于 连 接 eth0,wlan0,wlan1,同 时 配 置iptables 出入站规则;将 MPP 网关节点的 eth0 网卡接口通过有线连接至 4G 无线网关 CPE 上;为 eth0 配置 4G 固定 IP地址,测试 MPP,MP等节点与 4G 网络通畅状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
iw dev wlan1 del
iw phy phy1 interface add Mesh0 type Mesh
iw dev Mesh0 set Meshid myMesh
iw dev Mesh0 set channel 1
ifconfig Mesh0 hw ether 00:1C:11:11:11:11
ifconfig Mesh0 up
ifconfig Mesh0 192.168.2.1
配置 iptables出入站规则
iptables -F
iptables -X
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o Mesh0 -j ACCEPT
iptables -A FORWARD -i Mesh0 -o eth0 -j ACCEPT
iptables -L -n

验证使用iw dev mesh0 station dump和iw dev mesh0 mpath dump命令检查已建立的对等链接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

Station e8:4e:06:96:a2:44 (on mesh0)
inactive time: 950 ms
rx bytes: 3530
rx packets: 89
tx bytes: 170
tx packets: 3
tx retries: 0
tx failed: 0
rx drop misc: 9
signal: -30 dBm
signal avg: -30 dBm
Toffset: 1395514681956 us
tx bitrate: 54.0 MBit/s
tx duration: 0 us
rx bitrate: 54.0 MBit/s
rx duration: 0 us
mesh llid: 39650
mesh plid: 29147
mesh plink: ESTAB
mesh airtime link metric: 1906
mesh connected to gate: no
mesh connected to auth server: no
mesh local PS mode: ACTIVE
mesh peer PS mode: ACTIVE
mesh non-peer PS mode: ACTIVE
authorized: yes
authenticated: yes
associated: yes
preamble: long
WMM/WME: yes
MFP: no
TDLS peer: no
DTIM period: 2
beacon interval:1000
short slot time:yes
connected time: 61 seconds
associated at [boottime]: 274.466s
associated at: 1636042217164 ms
current time: 1636042278531 ms

1
2

DEST ADDR NEXT HOP IFACE SN METRIC QLEN EXPTIMEDTIM DRET FLAGS HOP_COUNT PATH_CHANGE

一些解释:
Destination MAC Address:目地mac地址。此mesh路径的目的地。直接路径的目的地和下一跳具有相同的MAC地址。
Next-hop MAC address:下一跳地址。直接路径的目的地和下一跳具有相同的MAC地址。
IFACE :专属网的名称
SN:此路径的目标序列号。 DSN用于确定节点路径信息的“新鲜度”。例如,假设节点接收到其路径表中已经存在的目的地的路径响应。如果路径响应的DSN较高,则它将替换现有路径,因为它将被认为是较新的。
Air Time Link Metric:路径的度量(或“成本”)。较低的度量标准是首选,并且在选择了多个路径的情况下,协议栈将选择成本最低的协议(即:空中链路度量最低的协议)。该值是使用预期的吞吐量得出的(metric = 1 + 8192 / Expected_throughput_mbps)预期吞吐量(Expected_throughput_mbps)取决于驱动程序(例如,某些包含重传)。
Frame Queue Length:此网格路径的排队帧数。
Expiration Time:此mesh路径过期的时间(以jiffies为单位)
Discovery Timeout:路径发现的剩余时间(如果正在发现此路径)。
Discovery Retries:重试发现的次数(如果正在发现此路径)。
Flags:它是一个位掩码,由该路径的以下状态标志组成:

MESH_PATH_ACTIVE = BIT(0),
MESH_PATH_RESOLVING = BIT(1),
MESH_PATH_DSN_VALID = BIT(2),
MESH_PATH_FIXED = BIT(3),
MESH_PATH_RESOLVED = BIT(4),

无线网桥

即一个路由器做中心路由器,开启dhcp,其他的路由器,自动分配ip地址,关闭dhcp,连接上其他路由器即可。其若非中心路由器脱离网络,其他路由器依旧可以维持通信正常。

管理界面的设置

注意事项:
mesh自组织网络,相较于无线网桥,其所有路由器均开启dhcp,若断开任意一个路由器,均可维持通信正常。

以下是管理界面配置mesh自组织网络,拥有长距离通信,扩充室内通信距离,其鲁棒性更高。

需要注意的是mesh共用同一个信道且ip需要相同。

其每个路由器的lan口需要不同,且开启dhcp,其中一个网卡开ap,一个mesh。

参考:

  • 简书
  • [1]李贤烈,郭超平,王盛青,靳俊程.基于树莓派的无线Mesh网络组织与实现[J].现代电子技术,2018,41(23):87-92+97.