所谓无线漫游简单理解就是多个路由器,多个wifi. 当手机信号差的时候自动切换信号强的wifi.可以做到无感知切换.

 

从WIFI覆盖问题说起

单个路由器很难做到家里都覆盖.

 

那么有两个方案.

 

1,加大路由器WIFI功率.比如购买大功率的AP或者大功率的路由器.

2,加路由器数量.比如每个房间放一个.

 

原来是设置相同WIFI,相同密码.这样,也会切换WIFI,但是要在信号差到手机自动断开的时候才会切换另外的.

 

802.11r就完美解决这个问题(这不是新鲜玩意.很多年前的标准了.)

 

它使得WIFI之间切换平滑,无感知. 它可以叫做 "无缝漫游".

 

 

从17年开始,openwrt的luci已经带这个功能了,而且设置很简单.

 

软件包

wpad (1907版好像看不到这个包了,应该是默认集成了)

wpad-mesh-openssl   或者 其他ssl

 

路由器基本设置

 

 

我家是客厅 主路由器,

书房 和主卧各一个.

3个路由都是大麦的DW33D. (并不要求同一个型号路由器,我是图烧录固件方便.而且这个路由器便宜.)

通过有线链接. (房间埋了网线,)当然用无线桥接也可以,不过意义不大.

 

主路由

基本宽带拨号,其他暂时不需要设置.

(我自己改了子网掩码.不作说明)


IP我设置为192.168.2.1

 

二级路由

关闭DHCP(建议操作) :

网络--接口--lan(编辑)--DHCP服务器--勾选 忽略此接口

DHCP的 IPV6设置中继模式

 

修改二级路由器IP,我两个二级路由器.分别设置LAN口IP

192.168.2.5

192.168.2.4

 

网关ip指向主路由器(非必须)

网络--接口--lan(编辑)--常规设置--IPV4网关

 

 

 

如果关闭了DHCP,那么用网线 连接二级路由的LAN 口和主路由Lan口. (也就是路由器当交换机的用法.)

 

 

 

漫游设置

我这里以2.4G为例子,5G的无线漫游方式相同.

 

 

 

前面准备

 

复制三个路由器无线的2.4G网络mac值.(要组5G网络漫游就复制5G的)

有几个路由器就复制几个.

自己新建一个文档存起来.

 

比如我的是


14:3D:F2:CA:33:04

二级
14:3D:F2:CB:E8:6C
14:3D:F2:CD:08:2C

 

整理下

 

第一行是mac,

第二行是去掉了冒号的mac

第三行是mac进行MD5计算得到的32位值(这个可以自己弄个随机32位值)我觉得还是MD5方便点.正好32位长.


14:3D:F2:CA:33:04
143DF2CA3304
DB0B9F1219D167C9F2BC3B4158881C91

二级路由

14:3D:F2:CB:E8:6C
143DF2CBE86C
A8B47AC7692C3B5B9ED28733793A0160


14:3D:F2:CD:08:2C
143DF2CD082C
3CC605EFAAF35407887B0C2C12339E7D

 

 

NAS ID和R1 密钥持有者

每个路由器都不一样

这两个值都填自己路由wifi的mac值(去掉冒号的)

 

 

 

外部 R0KH 列表

这里所有路由器填写内容都一样.

有多少个路由器,就添加多少行.

每行分别是每个路由器的.

mac,不带冒号mac,mac的MD5值

用英文逗号分隔

14:3D:F2:CA:33:04,143DF2CA3304,DB0B9F1219D167C9F2BC3B4158881C91

 

 

 

外部 R1KH 列表

 

这里也是,所有路由填写内容都一样.

有多少个路由器,就添加多少行.

每行分别是每个路由器的.

mac,mac,mac的MD5值

用英文逗号分隔

14:3D:F2:CA:33:04,14:3D:F2:CA:33:04,DB0B9F1219D167C9F2BC3B4158881C91

 

R1 推送PMK

这个请务必勾选,如果不勾选,有些设备不会自动切换.

 

wifi名字和密码

所有路由器wifi名字相同密码相同,加密方式相同.

 

信道

暂时我所有信道都是一样.

不过之前看到一种说法要错开信道.

这个待验证后再补充.

 

 

 

漫游测试

 

 

丢包是因为我两个二级路由器都是没有天线的,

裸板路由器.没有外壳没有天线的路由器.

因为淘宝买来更便宜. 50包邮两个DW33D(仅主板,要自己配电源,配天线)

 

 

 

 

天线我准备自己画.

 

我参考网上的图,自己画了几个PCB天线.

打板中,过几天看看那种天线效果好.

 

 

 

更新

 

打好了天线的PCB板子了.

 

准备把天线加上去.试试效果

 

 

 

 

 

 

 

 

测试效果

 

 

不丢包了.

 

 

补充

 

  1. 多个路由器,产品型号不一定要一个.只要刷了支持802.11r的都可以.
  2. 如果已经配置好了,如果有个路由器不想用,可以关掉,不影响其他路由器漫游功能.
  3. 如果还要添加,要所有路由器里面都加上去.

 

 

弱信号踢出

我原来是ZTE  AXON 7手机,自己刷了linage os安卓9系统,能自动切换.

后面我换了LG 某个手机,也是安卓9, 发现无法自动切换.除非信号差的非常厉害.才会.

然后就需要用到弱信号踢出了.这样手机会再次自动连接比较强的节点.

 

 

脚本

原作者的链接--> https://github.com/smallerxie/wifi-kickout/blob/master/kickout.sh

 

下面是完整搬运过来的

有个 -75dBm的阀值,

里面也有白名单mac,

同时支持2.4G和5G网络.

 

#!/bin/sh

### kickout.sh #####

# threshold (dBm), always negative 
thr=-75

# mode (string) = "white" or "black", always minuscule !
# black: only the clients in the blacklist can be kicked out.
# white: kick out all the clients except those in the whitelist.
mode="white"

# In "black" mode, only the clients in the blacklist can be kicked out.
blacklist="00:00:00:00:00:00 00:00:00:00:00:00"

# In "white" mode, the clients in the whitelist will not be kicked out.
whitelist="00:00:00:00:00:00 00:00:00:00:00:00"

# Specified logfile
logfile="/tmp/kickout-wifi.log"
datetime=`date +%Y-%m-%d_%H:%M:%S`
if [[ ! -f "$logfile" ]]; then
	echo "creating kickout-wifi logfile: $logfile"
	echo "$datetime: kickout-wifi log file created." > $logfile
fi

# function deauth
function deauth () 
{
	mac=$1
	wlan=$2
	rssi=$3
	echo "kicking $mac with $rssi dBm (thr=$thr) at $wlan" | logger
	echo "$datetime: kicking $mac with $rssi dBm (thr=$thr) at $wlan" >> $logfile
	ubus call hostapd.$wlan del_client \
	"{'addr':'$mac', 'reason':5, 'deauth':true, 'ban_time':3000}"
# "ban_time" prohibits the client to reassociate for the given amount of milliseconds.
}

# wlanlist for multiple wlans (e.g., 5GHz/2.4GHz)
wlanlist=$(ifconfig | grep wlan | grep -v sta | awk '{ print $1 }')

#loop for each wlan
for wlan in $wlanlist
do
	maclist=""; maclist=$(iw $wlan station dump | grep Station | awk '{ print $2 }')
	#loop for each associated client (station)
	for mac in $maclist
	do
		echo "$blacklist" | grep -q -e $mac
		inBlack=$?	#0 for in Blacklist!
		echo "$whitelist" | grep -q -e $mac
		inWhite=$?	#0 for in Whitelist!

		if [ $mode = "black" -a $inBlack -eq 0 ] || [ $mode = "white" -a $inWhite -ne 0 ]
			then
				rssi=""; rssi=$(iw $wlan station get $mac | \
				grep "signal avg" | awk '{ print $3 }')
				if [ $rssi -lt $thr ]
					then
						##skip wlan if necessary
						#if [ $wlan = wlan0 ];then
						#	echo "ignored $mac with $rssi dBm (thr=$thr) at $wlan" | logger
						#	echo "$datetime: ignored $1 with $rssi dBm (thr=$thr) at $wlan" >> $logfile
						#	continue
						#fi
						##
						deauth $mac $wlan $rssi
				fi
		fi
####
	done
done
####

# sleep 10s and call itself.
#sleep 10; /bin/sh $0 &

###

 

定时任务

每1分钟运行一次

crontab -e编辑计划任务

*/1 * * * * /bin/sh /root/kickout.sh

 

我脚本文件是保存在 /root/kickout.sh ,如果每分钟无法满足可以自己再写过一些脚本,实现多少秒级别的延时.

 

 

 

参考

 

https://post.smzdm.com/p/ar07p90z/pic_13/

http://www.wifizoo.net/archives/517

https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=337083&extra=&ordertype=1&mobile=no