写个脚本让路由器网络更可靠(基于华硕路由器)
追加修改(2021-01-24 14:20:58):
百度最近也不稳定了。已经有几次没响应然后路由器自动拨号,有需要的值友可以改成判断其他多个网站的。
或者直接在高级设置》外部网络》Internet Detection 改成ppp echo,这样路由器会测试运营商的拨号服务器是否连接正常,断联的时候会自动重新拨号,默认是关闭的,看当地运营商是否支持吧。
背景:
家里和工作室用的路由器都是华硕或者刷了华硕(梅林)固件的,一直以来用的都挺稳,带机量在50到100左右,宽带用的是电信,路由器拨号,有公网IP。广东的电信环境是每48小时会断开会话,重新拨号获取动态的公网IP(其实准确的说是47小时55分钟)。
查看日志可以发现确实是47小时55分钟:
Nov 11 05:57:58 rt-ac1900p-e810.local pppd[505]: LCP terminated by peer
Nov 11 05:57:58 rt-ac1900p-e810.local pppd[505]: Connect time 2875.5 minutes.
在会话到期时,运营商端会强制结算断开会话,路由器端检测到连接断开会自动开始重新拨号。
运行流程大多数情况下并没有什么问题,但有时候会突然上不了网,登录路由器发现并没有死机,因为我的工作室和网络都配置了外网访问,有时候要远程办公恰好又出问题的时候,会很抓狂。而这一年刚好就出现了这么几个网络故障的场合:
1、2月份疫情期间被困老家,全靠远程访问工作室的网络办公,突然有天网络中断,因为我设置的每周一早上6点自动重启,所以一直等到第二周的周一路由器自动重启了才能重新连接到工作室的网络。
2、有一次周末在家加班访问工作室网络的时候网络中断,于是又得吭哧吭哧跑工作室检查原因。
3、周一上班的时候发现工作室没网,路由器登录不上,应该是路由器重启的时候出了bug系统假死重启不了(这个是384固件的bug,会有极小的概率在重启的时候出问题,所以在官改的软件中心里面有大佬另写了重启助手的插件)
分析了一遍日志,出现故障的原因可能是:运营商强制结算断开pppoe拨号会话的时候,路由器端可能并不能及时响应,于是出现运营商端已经结束,但是路由器还以为原来的会话可用,也就不会重新拨号请求新的IP,但其实这时候该会话已经不可用,路由器只能等到下次重启的时候重新拨号。
而且基于上面提到的第3点,我个人认为还是尽量避免路由器重启会比较好。
需求:
定时检测互联网是否正常连接,如果连接不上,则自动重新拨号。
这样也不用在网络出现问题的时候,还得等到下一次路由器重启了。
实现:
目前路由器本身没有这个功能,那就自己写个脚本实现吧(其实是找的别人脚本自己改的 )
既然做了就共享出来,万一大家有一样的需求呢。
实现是在ssh登录路由器下实现的,自己找方法ssh登录路由器哈,这个很简单我就不写了。
脚本1:重新拨号的脚本
# 刷的官改固件,脚本可以放到/koolshare/scripts 下,重启的话也不会丢失,官方固件的话可以放到/jffs 下
vi /koolshare/scripts/repppd.sh
#!/bin/sh
/usr/bin/logger -c "断开拨号连接"
killall pppd
/usr/bin/logger -c "延时10秒"
sleep 10
/usr/bin/logger -c "重新拨号"
pppd file /tmp/ppp/options.wan0 >/dev/null 2>&1 &
脚本2:检测脚本
# 检测百度是否可以连接,5秒超时,两次检测,间隔1分钟,如果两次检测都无法连接百度则执行脚本1重新拨号。具体参数看懂了自己改哦很简单的。
vi /koolshare/scripts/checknetwork.sh
#!/bin/sh
#检测网络链接畅通
function network()
{
#超时时间
local timeout=5
#目标网站
local target=www.baidu.com
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
return 1
else
#网络不畅通
return 0
fi
return 0
}
#第1次检测
network
first_check=$?
#睡眠60秒
sleep 60
#第2次检测
network
second_check=$?
if [[ $first_check -eq 0 && $second_check -eq 0 ]];then
/usr/bin/logger -c "无法连接互联网,准备重新拨号!"
#执行脚本1重新拨号
/bin/sh /koolshare/scripts/repppd.sh
exit -1
fi
/usr/bin/logger -c "网络正常"
exit 0
脚本3:开机添加定时任务脚本
# 因为路由器重启后,crontab的定时任务会被清空,所以需要在开机时用命令添加定时检测任务, /jffs/scripts/这个目录下的脚本在重启后都会重新执行。我写的是每10分钟执行一次网络检测的脚本。
vi /jffs/scripts/services-start.sh
#!/bin/sh
#添加定时任务,每10分钟检测网络一次
/usr/sbin/cru a checknetwork "*/10 * * * * /bin/sh /koolshare/scripts/checknetwork.sh"
#每周一早上6点05分,重新拨号
/usr/sbin/cru a repppd "5 6 * * 1 /bin/sh /koolshare/scripts/repppd.sh"
折腾完成,可以重启路由器,ssh登录后,crontab -l 命令查看一下定时任务时候正常
脚本执行后,在系统记录可以看到执行情况,其实这个对于很多人并没有需求,做了就给大家参考参考,折腾嘛无非就是自个给自个找事瞎忙活 。
janshen
校验提示文案
冬天的风丶
校验提示文案
壕歼灭者
校验提示文案
风之旅者
校验提示文案
蓝色叮当猫
校验提示文案
天下贰
校验提示文案
完颜超
校验提示文案
netcup
校验提示文案
猪油拌面
校验提示文案
houjiaoli
校验提示文案
橙子君丷
校验提示文案
值友3627235205
我设置了凌晨5点重启路由器,后来把自动重启关闭了。当时我以为重拨时间是48小时,每过两天凌晨5点又会自动重拨,也没有去留意路由器日志。直到有一天早上8点多的时候突然断网,上路由器看日志才发现似乎每次重拨都会延后5分钟,也就是48小时05分。当时已经有一段时间没有重启路由,从第一次凌晨5点拨号到我发现断网重拨足足推后了3个小时。
所以我想了解下你有没有碰到类似的问题?
校验提示文案
Joy_yu
爱快我看他们用ssh登录后用/sbin/ifup wan可以实现一键重播,不知道华硕的有没有类似的。
因为我想实现的是用py脚本,远程创建一个ssh然后运行重启指令,这样快捷一点。
再咨询一下华硕ssh这些指令哪边能详细查到?感谢感谢!!!
校验提示文案
flying-v6
校验提示文案
ShadowsX
校验提示文案
过来的雷
校验提示文案
然而并沒有
校验提示文案
colourjwh
校验提示文案
凌喭1
校验提示文案
noname2
校验提示文案
希罗
校验提示文案
大伯伯矮油
校验提示文案
Joy_yu
爱快我看他们用ssh登录后用/sbin/ifup wan可以实现一键重播,不知道华硕的有没有类似的。
因为我想实现的是用py脚本,远程创建一个ssh然后运行重启指令,这样快捷一点。
再咨询一下华硕ssh这些指令哪边能详细查到?感谢感谢!!!
校验提示文案
值友3627235205
我设置了凌晨5点重启路由器,后来把自动重启关闭了。当时我以为重拨时间是48小时,每过两天凌晨5点又会自动重拨,也没有去留意路由器日志。直到有一天早上8点多的时候突然断网,上路由器看日志才发现似乎每次重拨都会延后5分钟,也就是48小时05分。当时已经有一段时间没有重启路由,从第一次凌晨5点拨号到我发现断网重拨足足推后了3个小时。
所以我想了解下你有没有碰到类似的问题?
校验提示文案
橙子君丷
校验提示文案
houjiaoli
校验提示文案
橙子君丷
校验提示文案
垚土土土土
校验提示文案
半熟蛋
校验提示文案
zjyt
校验提示文案
光明六翼
然后就嫌弃华硕的了,只能说APP软件这块还是大陆厂家更努力点,不管是APP还是路由固件更新都很及时。现在手机装着APP,远程唤醒,访客网络,都可以在手机端轻松搞定。网络方面,路由器断网后自动重新拨号,这些也比之前用华硕省心不少。
对于普通小白来说,还是用AX3PRO可能更合适些,价格也低很多。
至于一些其他功能,我只能说就算四位数的华硕刷了梅林也比不上200块的软路由。
折腾不少网络设备了,感觉还是国内的设备厂商更了解国内的运营商和网络环境啊,具体细节就不说了。
校验提示文案
speaking
校验提示文案
im獨腳戲
校验提示文案
猪油拌面
校验提示文案
妖姬007
校验提示文案
nforce
校验提示文案
kobeone
校验提示文案
枯藤昏鸦1
校验提示文案
zark62
校验提示文案
过来的雷
校验提示文案