Table of Contents

基于802.11的无线mesh网状网络

802.11s 是一个无需建立基础设施就可以连接无线设备的开源标准. 它在 Layer 2 上运行,并确保所有节点可以在桥接二层网络上看到彼此(就像他们都插入到交换机上一样). 任何 Layer 3 基础设施都可以在此之上工作. IP router 和 DHCP clients 都能很好运行. 可以根据用例实现更复杂的基础设施。(例如 Batman, Bird, OLSR 等),这些增强的包更多地针对城市级别规模的大型基础设施方案,而不是典型的家庭mesh应用。相比之下,基本的 802.11s 网格适用于家庭mesh的应用场景。

该视频是使用OpenWRT构建简单网状网络的一个很好的入门教程: https://www.youtube.com/watch?v=kMgs2XFClaM

现状

802.11s 在 OpenWrt 19.07 及更高版本稳定工作, 包括身份验证和加密, 假设有硬件/驱动程序支持 并且已经安装了 wpad-mesh-openssl (或同等的工具wpad-mesh-wolfssl)。

:!: 有一个ARP中继错误 (在v19.07.4确认),这意味着处于mesh网格中只有在Mesh Portal (MPP)的无线范围内的Mesh-Points才正常工作. 参见: https://forum.openwrt.org/t/bug-report-802-11s-mesh-v19-07-4/78524/4

什么是网状网络?

网状网络是多点对多点的第二层宏路由回程,用于实现网状对等设备之间的互联。网状对等设备通常是非用户设备,如路由器、接入点、CPE 等。

一般来说,手机、平板电脑、笔记本电脑等用户设备无法连接到网状网络,而是通过网状网关(一种特殊类型的网状对等设备)实现连接。

提示 您确定需要网状网络吗?

如果您正在寻找一种解决方案,使您的用户设备能够 从一个接入点无缝漫游到另一个接入点您要找的不是网状网络

一些制造商出于营销目的,使用 “Mesh “一词来描述其非标准、闭源、专有的 “漫游 “功能,这给许多人在进入网络基础设施的国际标准和开源固件世界时造成了极大的困惑。

  1. 网状网络的公认标准是 ieee802.11s。
  2. 用户设备快速漫游的公认标准是 ieee802.11r。

这是两个完全不相关的标准。

有关配置快速漫游的详细信息,请参阅:dawn

802.11s Mesh

802.11s 可在 OpenWrt 19.07 及更高版本中可靠运行,包括身份验证和加密,前提是有硬件/驱动程序支持、已安装 “wpad-mesh-openssl”(或同等软件)和 “mesh11sd “软件包。 另请参见:The Mesh11sd Project

802.11s 接口需要设置许多操作参数,然后 接口才会启动并成为网状网络的一部分。

mesh11sd 软件包可监控并动态设置和重置这些必要的网格参数。

一直以来,在无线配置中无法设置所需的网状网参数(因为接口尚未建立)被一些人解释为 “ARP 中继错误”,因为所有网状网节点之间的第 2 层(mac 路由)网络永远不会同时处于活动状态。

配置

如果需要运行加密的mesh网络, 需要安装支持mesh加密的wpad版本.

在写这篇文档的时候, 需要以下的wpad版本之一:

如果默认安装了这些,就需要删除这些加密功能较少的组件:

# opkg remove wpad-mini
# opkg remove wpad-basic
# opkg remove wpad-basic-wolfssl
# opkg remove wpad-basic-openssl
# opkg remove wpad-basic-mbedtls

安装依赖项 (改为wpad-mesh-openssl),才能提供mesh网络的加密,wolfssl是性能更好适合嵌入式设备轻量化的加密库,openssl是常见的主流加密库:

# opkg install wpad-mesh-wolfssl

或者

# opkg install wpad-mesh-openssl

或者

# opkg install wpad-mesh-mbedtls

这样安装只是提供mesh网络的加密

建议安装wpad-wolfssl

# opkg install wpad-wolfssl

或者

# opkg install wpad-openssl

或者

# opkg install wpad-mbedtls

就可以把加密提供于mesh、ap等所有网络中了

说明:

  1. 从2019年9月开始, wpad-openssl 或者 wpad-wolfssl 可以 进行 802.11s 加密,wpad-mbedtls 后来加入支持.
  2. wpad-basic-* 仅支持 802.11r802.11w
  3. wpad-mesh-* 仅支持 802.11r/w and 802.11s
  4. wpad-* ,例如 wpad-wolfsslwpad完整版 提供支持 802.11k/v/r/w and 802.11s
  5. wpad完整版 意味着没有进行任何修剪以减小其大小。

无线网络配置

编辑 /etc/config/wireless 并确定:

config wifi-iface 'mesh'
        option device 'radio0' #设置无线网卡设备
        option disabled '0'
        option network 'lan'
        option ifname 'mesh0'
        option mode 'mesh' #mesh模式
        option mesh_id 'your-mesh-name' # 可以任意字符串, 所有同一个mesh_id的节点连接成一个网格(如果有密码还要加上密码)
        option encryption 'sae' # 如果无需加密就设置为 'none'
        option key 'your-secret-password'

注意: 客户端设备的访问是通过桥接‘ap’和‘mesh’接口来实现的,这一点很重要,选项option network 'lan' 的作用是把 'mesh' 接口桥接到了 'lan'。 您要加入mesh网络的每个设备都必须以相同的方式进行配置,即相同的mesh_id,相同的通道channel,相同的密钥。 这种无线wireless配置可能足以满足组建两三个较近的mesh节点的“mesh”网络。 但是,由大量mesh网状节点组成的有机、自主自我管理的mesh网络需要额外的配置。

此配置应该足以启动mesh网络,因此您现在可以重新初始化wifi并查看它是否有效:

重载网络

# /etc/init.d/network reload

查看它是否有效

# wifi
# iw dev mesh0 info

应该可以看到类似于以下内容的输出:

Interface mesh0
	ifindex 10
	wdev 0x3
	addr 12:34:56:78:9a:bc
	type mesh point
	wiphy 0
	channel 2 (2417 MHz), width: 20 MHz, center1: 2417 MHz
	txpower 28.00 dBm
	multicast TXQ:
		qsz-byt	qsz-pkt	flows	drops	marks	overlmt	hashcol	tx-bytes	tx-packets
		0	0	129166	0	0	0	0	9107016		129167

如果你想在你的mesh网格上运行一个像OLSR这样的路由协议,就禁用 802.11s的内置路由选项 option mesh_fwding '0' .

对于网格参数的完整列表,您可以检查以下变量的值 mac80211.sh Source:

或者也可以用以下命令

# iw dev <devname> get mesh_param 

来获取可用mesh网格参数表, 不过没文档.

然后重启无线网络看它的工作情况:

# wifi
# logread -l 20 -f
# iw dev wlan0 station dump

无线硬件支持

:!: 支持 802.11s (type mesh) 取决于无线驱动程序. 大多数最新的开源驱动程序都是可以的.

使用以下方法来确定你的硬件是否支持 802.11s mesh.

iw list | grep "Supported interface modes" -A 9

...
      Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
                 * P2P-client
		 * P2P-GO
...

例如: ath9k的路由器

iw list
...
valid interface combinations:
		 * #{ managed, WDS } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, #{ IBSS } <= 1,
		   total <= 2048, #channels <= 1, STA/AP BI must match
		 * #{ IBSS, AP, mesh point } <= 1,
		   total <= 1, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz }
...

例如: ath9k_htc的USB外设

iw list
...
valid interface combinations:
		 * #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
		   total <= 2, #channels <= 1
...

使用命令行方式

iw 是一种新的基于 nl80211 的wireless devices命令行实用配置工具.more...

创建新的 interface “mesh0”

iw phy phy0 interface add mesh0 type mp mesh_id mymesh

确认新 interface 存在

ifconfig -a | grep mesh0

     mesh0      Link encap:Ethernet  HWaddr 00:18:39:14:48:B5

打开你的 mesh0 interface

ifconfig mesh0 up

为接口配置IP地址。 如: 10.0.0.x

ifconfig mesh0 10.0.0.1

默认情况下, mesh points 会使用 channel 1 并自动尝试创建具有相同mesh ID和channel的mesh节点的对等连接.

验证

使用iw命令显示对等链路或mesh网格中可达节点的表

iw dev $MESH_IFACE station dump
iw dev $MESH_IFACE mpath dump

例如:

iw dev $MESH_IFACE station dump
    Station 00:15:6d:84:14:10 (on mesh)
         inactive time:  1320 ms
         rx bytes:   352
         rx packets: 4
         tx bytes:   174
         tx packets: 2
         signal:     -61 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  32577
         mesh plid:  15969
         mesh plink: ESTAB
    Station 00:15:6d:84:14:09 (on mesh)
         inactive time:  3370 ms
         rx bytes:   1064
         rx packets: 12
         tx bytes:   545
         tx packets: 7
         signal:     -53 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  41036
         mesh plid:  24435
         mesh plink: ESTAB

封锁处于mesh网格中单个节点

需要 iw-full 包!

通过MAC地址封锁处于mesh网格中的节点

iw dev $MESH_IFACE station set $MAC_TO_BLOCK plink_action block

验证以上是否生效 (iw dev $MESH_IFACE station dump)

	mesh plink:	BLOCKED

解除:

iw dev $MESH_IFACE station set $MAC_TO_UNBLOCK plink_action open

根据 this source plink_action 不会在mesh网格链接的重连中持久化。

更多资料