少校
- 注册时间
- 2010-1-31
- 金币
- 2019 个
- 威望
- 5 个
- 荣誉
- 1 个
尚未签到
|
本帖最后由 dato 于 2013-12-1 10:21 编辑
采购unifi ap时,当时主要是想这家公司在UBNT系列网桥那么好的用户反馈那么它的unifi ap系列应该也不差。实际安装测试时,又遇到了类似ddwrt下atheros蕊片的一些怪问题,个人真心排斥atheros蕊片。最近一直在浏览它的用户论坛,也是有大量用户反应ping延迟问题,隔几天需要重启才能让客户端接入之类的。
曾经被人问到,就发了个主题“无线存在水桶原理,信号最差的客户端决定所有人的连接质量”。但是没有人给出一个比较好的解释,当初发现这个问题其实是一个tplink 841n v3刷ddwrt时在某种临界状态时,会导致所有客户端类似断网的情况发生,只有ifconfig ath0 down;ifconfig ath0 up才能使无线恢复正常。有一次,公司因为无线接不进去,员工才不管这个接入点在哪里信号好不好,只管连接就是了。最后发现那台tplink 941上面挂了19个用户。而就坐在tplink 941旁的管理人员却很难登录WEB管理界面,那ping高延迟丢包情况根本不能看,显然这时候无线跟距离没关系了。看到很多无线网络性能优化文档提到踢除信号差的用户,显然这个水桶原理是存在的。
前段时间接到电话说网络慢的像蜗牛一样,这些年有看到3000ms的ping还没看到有上万的ping,能不慢吗。这台电脑跟unifi ap间的直线距离只有3米不到。
64 bytes from 192.168.10.27: seq=1180 ttl=64 time=11839.121 ms
64 bytes from 192.168.10.27: seq=1181 ttl=64 time=11330.665 ms
64 bytes from 192.168.10.27: seq=1182 ttl=64 time=10471.025 ms
那么有些什么情况将会成为那块最短的木板呢?
1,当一个用户从一个办公区域移动到另外一个办公区域时,结果发现AP根本没切换到靠近信号最强的那个,可能还连接到最初连接的那个AP,而此时由于距离改变,障碍物的影响,重叠区域的信号干扰都可能导致连接质量急剧下降。
2,设备进入节能模式。笔记本我看win8下会进入 中等节能 模式,手机之类的都有可能,监测到一部android手机它的RSSI值最低时才8
3,还是这些未认证的设备啊,由于mac过滤是在中心交换机上操作的,这些设备虽然拿不到IP,但是在AC管理界面依旧能看到这些设备连在无线网络上取得了169开头的微软内部保留地址。
4,还有别的吗,想不出来了。
当时看中unifi ap的一个特性,它具有自动踢除信号弱用户的功能,这个功能v3系列可以通过内置功能实现(没测试成功),v2可以通过第三方扩展unifi lab通过curl操作AC管理界面实现。所以在布署AP时就采用了同一个SSID,但是第一次带着win8自带的无线管理软件,走到4个接入点虽然连接的都是同样的一个SSID,可是其实输入了4次的同样的无线密码。显然这个跟所谓的无逢漫游实现不是一回事。跟v3 的Zero-ndoff实现也不一样。http://community.ubnt.com/t5/UniFi-Frequently-Asked-Questions/UniFi-What-is-Zero-Handoff/ta-p/412719
由于没有采用管理机进行在线管理,迫切的希望找到一种方法来自动踢除这些信号弱的用户导致的整体无线性能下降情况发生。
前几天搜索的时候发现可以在unifi ap里实现半自动化的cron实现。cron计划任务配合脚本将扩展很多管理任务。
crond for airos 5
http://community.ubnt.com/t5/airOS-Software-Configuration/crond-for-airos-5/td-p/350458
这个帖子里的内容,你需要用下面的命令再重新修复一下
------------------------------------------------------------------------
wget -O airos5-crond.tar http://webserver/airos5-crond.tar
tar xvf airos5-crond.tar
user=admin #设置你的AC设置的登录用户
chgrp -R $user /etc/persistent
chown -R $user /etc/persistent
ln -s /etc/persistent/etc/crontabs/ubnt /etc/persistent/etc/crontabs/$user
echo "echo UTC-8>/etc/TZ">>/etc/persistent/rc.prestart
echo "/usr/bin/crond &">>/etc/persistent/rc.prestart
/etc/persistent/rc.prestart
save
------------------------------------------------------------------------
开心前几天把/bin目录试了个遍,终于发现有个mca-dump命令,它输出if_table(本机eth0 mac地址),radio_table,scan_table(周边AP mac),vap_table(本机athx mac地址),sta_table(接入客户端mac)
造了个脚本
第一段,用mca-dump获得所有mac地址,iwlist ath0 ap获得周边 AP mac地址,ifconfig获得本机mac地址
第二段,把在wmac.tmp文本里的mac地址从mac.lst里面剔除掉剩下的就是接入客户端的mac了。
第三段,将获得的rssi值进行判断处理,如果低于20,则进行iwpriv $ath addmac mac(将mac加入黑名单);iwpriv $ath kickmac mac(踢除该用户);sleep 30(延迟30秒让客户端再重新搜索信号好的AP进行连接; iwpriv $ath maccmd 3(清空黑名单);
RSSI value = Signal Strength (dBm) - Noise Floor (dBm).
"rssi": 48,
"noise": -86,
"signal": -38,
添加cron任务在每天的办公时间9-18点之间每10分钟运行一次踢除操作。
/etc/persistent/etc/crontabs/ubnt
*/10 9-17 * * * /etc/persistent/kick_dato.sh
#!/bin/sh
#etc/persistent/kick_dato.sh
cd /bin;mca-dump | grep -Eo ..\(\:..\){5} >/tmp/mac.lst
iwlist ath0 ap | grep -Eo ..\(\:..\){5} | tr A-Z a-z >/tmp/wmac.tmp
ifconfig | grep -Eo ..\(\:..\){5} | tr A-Z a-z >>/tmp/wmac.tmp
xcl=/tmp/wmac.tmp
_f=/tmp/mac.lst
if [ -e $xcl ] ; then
while read kmac ; do
sed -i -e "/${kmac}/d" $_f
done < $xcl;fi
for i in $(cat /tmp/mac.lst); do rssi=`mca-sta $i | sed -n "/rssi/p" |grep -o "[0-9]\+"`
if [ $rssi -lt 20 ] ;then #设置rssi小于多少则条件成立
b=`mca-sta $i | sed -n "/mac/p" |grep -Eo ..\(\:..\){5}`
for ath in `ls /proc/sys/net | grep ath` ; do iwpriv $ath addmac "$b";iwpriv $ath kickmac "$b";done
echo "`(date +"%m/%d/%Y %T")` kickmac_$b rssi_$rssi" >> /etc/persistent/log;fi;done
sleep 30;for ath in `ls /proc/sys/net | grep ath` ; do iwpriv $ath maccmd 3;done
日志输出------------------------------------------------------------------------
r1 这台AP今天又无缘无故重启了,这日志跟其它AP配不上对。
BZ.v2.4.6# uptime
19:50:41 up 5:00, load average: 0.00, 0.00, 0.00
BZ.v2.4.6# cat log
10/23/2013 17:40:02 kickmac_ec:35:86:07:XX:XX rssi_11 #看到踢到不同的AP上了,奇怪了怎么同一时间连接到2台AP上
BZ.v2.4.6# date
Wed Oct 23 19:51:41 UTF 2013
r2
BZ.v2.4.6# uptime
19:52:12 up 19:10, load average: 0.00, 0.07, 0.16
BZ.v2.4.6# cat log
10/22/2013 10:30:02 kickmac_98:fe:94:XX:XX:XX rssi_28
10/22/2013 10:40:03 kickmac_98:fe:94:XX:XX:XX rssi_27
10/22/2013 11:50:04 kickmac_98:d6:f7:XX:XX:XX rssi_8 #这部android手机信号最差时
10/22/2013 12:00:03 kickmac_f4:f1:5a:XX:XX:XX rssi_19
10/23/2013 09:00:02 kickmac_f4:f1:5a:XX:XX:XX rssi_11
10/23/2013 10:00:04 kickmac_98:d6:f7:XX:XX:XX rssi_18
10/23/2013 10:30:04 kickmac_78:92:9c:XX:XX:XX rssi_16
10/23/2013 11:00:05 kickmac_78:92:9c:XX:XX:XX rssi_18
10/23/2013 11:10:05 kickmac_78:92:9c:XX:XX:XX rssi_14
10/23/2013 11:40:03 kickmac_98:d6:f7:XX:XX:XX rssi_10
10/23/2013 13:30:02 kickmac_00:26:c7:XX:XX:XX rssi_16 #看起来这个用户依然没成功把它踢到其它AP上,是sleep 30不够还是它未连接过其它同SSID AP
10/23/2013 13:40:03 kickmac_00:26:c7:XX:XX:XX rssi_14
10/23/2013 13:50:02 kickmac_00:26:c7:XX:XX:XX rssi_13
10/23/2013 14:00:02 kickmac_00:26:c7:XX:XX:XX rssi_14
BZ.v2.4.6# date
Wed Oct 23 19:52:25 UTF 2013
l2
BZ.v2.4.6# uptime
19:54:27 up 19:44, load average: 0.06, 0.01, 0.00
BZ.v2.4.6# cat log
10/23/2013 10:20:02 kickmac_8c:00:6d:XX:XX:XX rssi_9
10/23/2013 14:10:02 kickmac_ec:35:86:07:XX:XX rssi_14
10/23/2013 15:40:02 kickmac_74:ea:3a:XX:XX:XXrssi_6 #HOHO在一侧走廊前部的台式电脑竟然连到另外一侧走廊中部的AP上。。。
10/23/2013 17:40:02 kickmac_ec:35:86:07:XX:XX rssi_9 #看到踢到不同的AP上了,奇怪了怎么同一时间连接到2台AP上
BZ.v2.4.6# date
Wed Oct 23 19:54:32 UTF 2013
--------------------------------------
上面都不用看直接跳到这里,将unifi.tar放到你自己的web服务器上。每次在unifi ap启动时 执行 /etc/persistent/rc.prestart就可以,将rc.prestart改名为profile似乎也行,只不过仍然需要一次终端登录过程,算了保险点还是手动执行/etc/persistent./rc.prestart吧
cd /etc/persistent
wget -O unifi.tar http://webserver/unifi.tar
tar xvf unifi.tar -C /
user=admin
#chgrp -R $user /etc/persistent
#chown -R $user /etc/persistent
ln -s /etc/persistent/etc/crontabs/ubnt /etc/persistent/etc/crontabs/$user
chmod +x *.*
save
/etc/persistent/rc.prestart
file.txt
rc_dato.sh 重启unifi 服务,有待观察是否效果等同于reboot,是否有用。
rc.prestart.sh 修改过的启动文件增加了同步北京时间和启动crond进程
rb_dato.sh 发生过几次ping不到AP的情况而且是同一台,希望它能自己重启吧
注意修改网关IP,并修改下列文件
/etc/persistent/etc/crontabs/ubnt
*/10 9-17 * * * /etc/persistent/rb_dato.sh
kick_dato.sh 踢除RSSI值<20的用户
cplog_dato.sh 备份日志以备分析如果需要,需要修改cron任务
生成tar压缩包方法
cd /
tar -cf /etc/persistent/unifi.tar etc/persistent/file.txt etc/persistent/cplog_dato.sh etc/persistent/rc.prestart etc/persistent/rc_dato.sh etc/persistent/rb_dato.sh etc/persistent/kick_dato.sh etc/persistent/cplog_dato.sh etc/persistent/etc
附件在这里
* 2013年12月1日星期日
- 可运行在 Tomato 上的免输密码登录 SSH 程序 SSHPASShttp://www.right.com.cn/forum/thread-133334-1-1.html
(出处: 恩山WIFI论坛)
通过/etc/rc.d/rc restart 操作,目前手头的最长的已经运行uptime 11天时间了,当然有时候是因为公司停电,有时候可能因为看门狗的问题。因为没有tomato下ssh 登录方法,上面的链接SZPUNK提供了一个静态版本可以运行在shibby tomato 115版本,哈这下可以重运行rc.prestart 脚本了 sshpass -p only2w ssh admin@r1 rc.prestart
* 2013年10月13日星期日
- 生成文档
- 怎么感觉写的东西很凌乱
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
1
查看全部评分
-
|