刷了DD-WRT后,无线路由出现不稳定(断线)情况的解决方法

广告

今天给家里的TP-Link WR841N v7 路由刷了DDWRT,刷的过程很轻松很简单,刷完过后老妹说笔记本用Wifi连接会经常断线,大概1分钟就断一次。于是上网搜索了一下,发现是atheros的通病,据说这个CPU的刷了DD-WRT的会经常性出现无线断线的情况,而且原因未明,不过有网友写了一些脚本,据说可以解决这类问题,这里分享一下,顺便也给自己记一下,以后又需要可以拿来用,有多个脚本,每个脚本都有自己的优缺点,自己试试哪个适合自己吧:

shell脚本转自:http://www.right.com.cn/forum/viewthread.php?tid=48360&page=1#pid347883

原作者:dato


#!/bin/sh
if ! ping -c 1 192.168.12.40 >/dev/null;then #用于24小时在线的机器
echo "`(date +"%m/%d/%Y %T")` ping pc_print offline_" >> /tmp/log
client_count=$(grep -c 0x2 /proc/net/arp) 
if [ $client_count -eq 1 ]; then
echo "`(date +"%m/%d/%Y %T")` restart ifconfig ath0_" >> /tmp/log
ifconfig ath0 down && ifconfig ath0 up;fi;fi

#很明显不好需要一台在线的电脑,而且通过arp缓存存在消亡时间,判断可能实时性不好。

#!/bin/sh
for i in 1 2 3 #4 5
do sleep 18; ath0_wclist=$(wl_atheros assoclist) #dir600 wl_rt2880 wl_atheros assoclist
if [ -z "$ath0_wclist" ];then
pr="$(ps | awk '/hostapd/ {print $1}')"
/sbin/ifconfig ath0 down #不要将以下两项使用&&符号不然有问题
kill -9 $pr;/sbin/ifconfig ath0 up;hostapd -B /tmp/ath0_hostap.conf;iwconfig ath0 txpower 19
#echo "`(date +"%m/%d/%Y %T")` `ps | grep hostapd | grep -v grep`" >> /tmp/log
echo "`(date +"%m/%d/%Y %T")` restart ifconfig ath0_" >> /tmp/log;fi;done #rc restart;

#通过内置命令判断精度比较高,但是只适合机器数少的情况。客户端多可能存在执行效率问题。家里用的话这个是最佳方案

#!/bin/sh
xcl=/tmp/lanmac.lst
_f=/tmp/wlanmac.lst
if [ ! -f $xcl ]; then 
lanmac="00:26:18:81:5f:73 00:26:22:ca:85:96";for mac in $lanmac; do echo $mac >> $xcl;done;fi 
for i in 1 2 3 #4 5
do sleep 18;>$_f;ip n | awk '/:/{print $5}' >> $_f
while read mac;do sed -i -e "/^${mac}$/d" $_f;done < $xcl
count=`wc -l < $_f`  if [ $count == 0 ]; then  ifconfig ath0 down && ifconfig ath0 up;iwconfig ath0 txpower 19;/tmp/firewall_dato.sh echo "`(date +"%m/%d/%Y %T")` restart ifconfig ath0_" >> /tmp/log;fi;done
#通过剔除有线客户端mac来判断无线客户端mac不是很准确,不推荐

#!/bin/sh
for i in 1 2 3 #4 5
do FRAME1=$(ifconfig wifi0 | grep frame: | sed -r 's/.*frame:(.+).*/\1/')
sleep 18;FRAME2=$(ifconfig wifi0 | grep frame: | sed -r 's/.*frame:(.+).*/\1/')
if [ $FRAME1 -eq $FRAME2 ] ; then 
ifconfig ath0 down && ifconfig ath0 up;iwconfig ath0 txpower 19;/tmp/firewall_dato.sh
echo "`(date +"%m/%d/%Y %T")` restart ifconfig ath0_" >> /tmp/log;break;fi;done

#通过匹配发包值的变化来判断无线接口是否有问题,是为了解决上面那个客户端多的情况的,
#但是也有缺点有时候部分客户端并不能正确断线,结果很杯具,有跟没有一样。

#!/bin/sh
d=`date +"%m/%d/%Y"`;count=`tail /tmp/log -n 60 | grep "$d" | grep -c ath0`
if [ $count -lt 60 ];then
for i in 1 2 #3 4 5
do FRAME1=$(ifconfig ath0 | grep "RX b"  | cut -d: -f2 | cut -d" " -f1)
sleep 25;FRAME2=$(ifconfig ath0 | grep "RX b"  | cut -d: -f2 | cut -d" " -f1)
if [ $FRAME1 -eq $FRAME2 ] ; then ifconfig ath0 down && ifconfig ath0 up;iwconfig ath0 txpower 19; #/tmp/firewall_dato.sh
echo "`(date +"%m/%d/%Y %T")` restart ifconfig ath0_" >> /tmp/log;break;fi;done;fi

#改进版

还有一段:http://www.right.com.cn/forum/viewthread.php?tid=53766
原作者:dato

#!/bin/sh
remote_ip="8.8.8.8" #google的DNS服务器或者设成当地的DNS服务器。
#telnet到路由用 nslookup qq.com之类的命令进行查询,测试是否可ping
if ! ping -c 1 $remote_ip >/dev/null; then echo "`(date +"%m/%d/%Y %T")` wan_ipaddr_ dropped_ redial_ " >> /tmp/log
#以下三行针对不同蕊片的无线启用命令。应该至少15XXX系列也能用吧。更高不清楚
#ifconfig ath0 down && ifconfig ath0 up; #针对atheros tp841
#iwpriv ra0 radio_off && iwpriv ra0 radio_on; #针对ralink dlink600
#wl -i eth0 radio off && wl -i eth0 radio on; #针对brocom nw618
ls /opt #读硬盘操作,没有环境只能用简单的ls读来让硬盘有反应。

选择其中一段脚本,添加到自定义脚本中(http://192.168.1.1/Diagnostics.asp),然后到cron写

*/1 0-23 * * * root /tmp/custom.sh

让脚本在0到23点,每分钟执行一次

 

最后说一下,我没有使用到文中提到的脚本,因为最后问题解决了,因为刷DDWRT前后,我配置的无线都是同样的,刷了之后,并没有删除笔记本的热点,因为直接可以使用了,之后我删除了笔记本保存的热点,然后重新连接,问题就解决了……


5 thoughts on “刷了DD-WRT后,无线路由出现不稳定(断线)情况的解决方法”

  1. ccc说道:

    可以用,亲测可以。感谢! [YCT:09]

  2. cad说道:

    一般能用不敢下手乱刷

    1. 暗黑游侠说道:

      没刷就对了,我已经刷回来了,太不稳定了

  3. dhhp说道:

    我有个路由,无线路由,刷了ddwrt,很稳定。是淘宝上面买的那种改装的路由器,可以插usb下载东西的。

    1. 暗黑游侠说道:

      其实我也想买一个可以插USB设备的路由,有时候白天要用,不方便挂下载….

发表评论

电子邮件地址不会被公开。 必填项已用*标注

百度XML GoogleXML SiteMap