迫不得已:WAN自查&重启端口

适用路由系统:华硕RT-ac86u/asuswrt-Merlin/


河北电信的辣鸡光猫标称1000Mbps,安装的时候因为家里宽带只有一百兆用着也没发现什么异常,20年初全国宽带统一提速的时候带宽提到了300Mbps这时候就出现了巨恶心的情况:当瞬时速率过高或者长时间不关机时光猫Bridge直接就会断裂,表现就是光猫后台一切正常,路由器显示公网端连接异常。这种状况有时候等个十来分钟光猫那端就自己好了有时候不得不重启解决;但是无论如何路由器端是不会自己重启wan端口的:因为它甚至都不知道发生了甚么事!让我不得不从床上爬起来到客厅给它重启,这还是我在家的情况;我出来上学我妈更不知道咋解决就只能一个电话给我打过来。

在网上我也没有搜到这种情况,不过又想到了在学校整路由器的时候后用到的极路由的一个插件:定时重拨。

NKU的运营商无线网有个特点,当某设备连接在网络上但是一段时间(我也不清楚具体时间,但大概估计在1~2小时左右)没有网络活动时会自动断掉这个设备的网络连接,但是你在接入设备上并不知道你被断了网!这对我桥接的路由器产生了很大影响,经常早晨起来一看手机没有啥消息,出宿舍改流量信息才被接收。

于是在论坛找到了这个定时重播的插件。对这个解包之后看到实际它的原理就是每过一段时间就重启一下路由器的wan端口来做到重拨的效果,那么我只要把这个定时的条件改成定时ping一下baidu.com,发现ping不通就重启一下端口就好了,我又参考了一个Merlin固件自动重启的插件,学(摘)习(抄)了一下语法。话不多说开搞!

首先是自启动脚本,顺便加上日志更新以便我之后检查,这里我选择了一直皆在路由上做虚拟内存和jffs扩容的u盘做存储,以防哪天路由器炸了我也能直接接电脑看日志。

init-start //放在路由器启动脚本的文件夹里

#!/bin/sh

sleep 20 //重启后休眠20s,防止开机无限判断wan端口断开不断重启
cru a ScheduledCheckWan "* * * * * /jffs/scripts/check_wan.sh >> /tmp/mnt/sda1/check_wan.log 2>&1" //每分钟运行一次检查脚本并写入log文件
cru a ScheduledCleanCheckWanLog "0 5 * * 1 echo "" > /tmp/mnt/sda1/check_wan.log" //每周一凌晨五点清除日志

check_wan.sh //放在/jffs/scripts下

#!/bin/sh
 
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") //记录时间
wget -4 --spider --quiet --tries=5 --timeout=3 www.baidu.com //测试ipv4地址 检测网站是否可用 安静模式(无信息输出) 尝试五次 允许超时三次
if [ "$?" == "0" ]; then //执行成果为0,失败不为0
        echo '['$LOGTIME'] ChinaNet Accessed.'
else
        echo '['$LOGTIME'] Problem decteted, restart Wan in 6 seconds......'
        sleep 6
        /sbin/service restart_wan //重启WAN端口
 
fi

终于通过我的一通操作网络裂开的频率降到了一个月犯一次病,希望我之后再也用不到这个脚本。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注