|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 deyafe 于 2019-10-4 19:59 编辑
用原生OPENWRT的系统做无线中继,都有可能会出现这样的现象,就是在被中继的WIFI信号因某些原因(如上级路由关机等情况)消失了,做中继的路由自身与被中继路由同频率的AP信号有可能也跟着消失(我现在用的版本看人品,有时会有时不会)。如果路由器还有有线设备连着,可以用有线设备进入路由器查看上级路由是否掉线;但如果路由器只做无线中继,挂在高处,不方便插网线连接的,出现这种情况只能怀疑是路由器死机了。
我这里没拉宽带,上班只能用手机流量,没布网线,有时候需要两个路由来中继手机热点,而且水果手机开热点不能固定信道,就算把路由器的信道设定为AUTO有时候也不能自动连上,于是就写了个小脚本来解决这个问题,以下是脚本内容:
- #!/bin/sh
- ping -c 4 www.baidu.com //ping百度4次,4次都不通就认为外网不通了
- if [ $? -ne 0 ] ;then //$?是ping的结果,假如外网不通
- {
- AA=$(uci get wireless.@wifi-iface[?].disabled) //AA是变量可以自己定义,括号里的命令是获取做客户端的SSID开关状态并赋予变量AA,wifi-iface[?]是SSID节点,通过uci show wireless查询
- if [ ! $AA ] ;then AA="0" //因为SSID打开时disabled的值默认是没有的,所以要判断disabled的值是否存在,不存在就认为SSID处于打开状态,然后赋予变量AA值为0
- fi
- iwinfo wlan? scan > /tmp/wifi //搜索热点信号列表并保存,wlan?是无线网卡,2.4g跟5.0g是不同的,这个要自己区分,可以通过ifconfig对比MAC查询
- grep -qw "SSIDNAME" /tmp/wifi //从保存的列表中寻找被中继的SSID是否存在,SSIDNAME是被中继的WIFI名称
- if [ $? -eq 0 ] ;then //假如被中继的SSID存在
- if [ "$AA" = "1" ] ;then //并且做客户端的SSID已经关闭
- uci set wireless.@wifi-iface[?].disabled=0 //重新打开做客户端的SSID
- uci -q commit //保存
- /etc/init.d/network restart //重启网络
- fi
- elif [ "$AA" = "0" ] ;then //假如被中继的SSID不存在并且路由器做客户端的SSID处于打开状态
- uci set wireless.@wifi-iface[?].disabled=1 //那就关闭做客户端的SSID
- uci -q commit //保存
- /etc/init.d/network restart //重启网络
- fi
- }
- fi
- exit
复制代码 可以用putty ssh进入路由通过VI命令或用WinSCP在/etc下新建一个脚本文件,不要在/tmp下建立,重启后就没有了,个人建议用WinSCP建立脚本文件,编辑方便点,脚本保存后记得用chmod +x赋予执行权限,然后直接在putty里输入/etc/脚本文件名 执行一次脚本,看脚本是否有问题,没有问题就可以通过定时任务执行这个脚本了。这样就能实现上级路由WIFI信号消失后自动关闭本路由上的无线clietn,上级路由WIFI信号恢复后重新打开本路由上的无线clietn,clietn关闭后AP信号是可以自动恢复的,不会出现时有时无的现象
|
|