OpenWRT19.07_命令⾏_重拨wan_重启路由
转载注明来源: 来⾃,写于 2020-10-19.
写OpenWRT的脚本时,需要⽤到⼀些重启命令
以下的命令中的参数"wan",是基于wan⼝的名称为"WAN"
ssh 登录到openwrt上。执⾏以下命令:
重启路由/sbin/reboot , ssh 连接⽴刻就会断开。
重启所有⽹络/etc/init.d/network restart , 这个命令会导致 ssh 连接卡住(约卡3-5秒),等到⽹络重启之后,ssh才会恢复。本机执⾏没有问题。
因为network restart先会ifdown -a把所有⽹络/⽹卡都停掉,再全部⽹卡重新启动。
重拨wan /sbin/ifup wan , 等于ifdown wan && ifup wan。这个命令执⾏很快,ssh连接不卡,且⽴即就返回。wan⼝⼤约10秒后就换了个IP,对应的wan6也会换IP。
这个 ifup 命令,最终是通过ubus call network.interface down '{"interface":"wan"}' + ubus call network.inte
rface up '{"interface":"wan"}'执⾏的。
显式的执⾏/sbin/ifdown wan && /sbin/ifup wan也是没有问题的。
实际使⽤中,仅执⾏ifup wan,有时发现ipv4不会变,仅ipv6变。所以为了更换IP,ifdown wan;sleep 2;ifup wan更好。
在web界⾯Interfaces页⾯,点击WAN对应的 "Restart" 按键。其实执⾏的就是/sbin/ifup wan
在web界⾯Interfaces页⾯,点击WAN对应的 "Stop" 按键。其实执⾏的就是/sbin/ifdown wan
重启wifi /sbin/wifi down && /sbin/wifi up
实际使⽤
在Linux中创建⼀个 key, ⽤ssh-keygen -t rsa -b 1024 -f opwrt , 然后把 opwrt.pub 中的内容 copy 到路由器的/etc/dropbear/authorized_keys⽂件中。
shell脚本,重启路由器就执⾏ssh -i opwrt root@192.168.1.1 "/sbin/reboot"
shell脚本,重拨wan⼝就执⾏ssh -i opwrt root@192.168.1.1 "/sbin/ifup wan"
python3脚本,import subprocess然后utput('ssh -i opwrt root@192.168.1.1 "/sbin/ifup wan" ')
另: 以上的 ssh 可以再带上⼀个参数ssh -o "ConnectTimeout=5"
在路由器中,
写shell脚本,直接就执⾏reboot或者ifup wan。
lua 脚本,⾸先require("luci.sys") , 然后执⾏("/sbin/ifup wan")
windows 的 bat 批处理
可以考虑⽤ putty的命令⾏版 去ssh登录执⾏命令。(可以⽤ 去⽣成key,放到authorized_keys中 )
其他1
如果频繁掉线,可以考虑修改这两个配置项。(修改⽅法,⾃⾏搜索)
network -> interface -> WAN (pppoe) -> EDIT -> Advanced Settings -> LCP echo failure threshold和LC
P echo interval
⽹络 -> 接⼝ -> WAN (pppoe) -> 编辑 -> ⾼级设置 -> LCP 响应故障阀值和LCP 响应间隔
/etc/ppp/option 中的lcp-echo-failure和lcp-echo-interval
有时会出现(偶尔),wan连接正常,但⽆法访问⽹络。可以考虑写个脚本,定时执⾏。
思路是:
先访问⼀下百度,看是否正常,再访问⼀下搜狗,再访问⼀下163。如果三个站都⽆法访问,就执⾏ifup wan重拨。
ssh命令行测试访问⼏个站,⾃⼰决定,测试哪⼏个站,⾃⼰挑选。⽤shell编程即可,装个完整版wget,⽤wget访问,判断返回值,就知道访问是否成功。
记得设置timeout参数,wget的默认timeout好像是60秒,太长了。
还要设置重试次数⼤于2,防⽌第⼀次访问因dns查询返回太慢⽽失败。
以下给出⼀个例⼦参考,需要opkg install wget ca-bundle⽀持。
然后放⼊ crontab 中定时执⾏*/10 * * * * /bin/sh /root/chk_net_redail.sh
#!/bin/sh
# filename: /root/chk_net_redail.sh
# 4=network error/refused/timeout/dns err/
# need "opkg install wget ca-bundle"
count=0
URLs='baidu 163 www.qq sogou'
for host in $URLs ; do
#echo $host
# wget -t2 这个参数要>=2, 防⽌第⼀次访问dns解析超时,⽽导致失败
wget -q -T3 -t3 --method=HEAD --max-redirect=0 "$host"
if [ 4 -eq $? ]; then
echo $(date +%F_%T%z) $host 'error.' >> /dail
count=$((count+1))
else
break
fi
done
URL_cnt=$(echo $URLs|wc -w)
if [ $count -ge $URL_cnt ]; then
echo $(date +%F_%T%z) redail >> /dail
ifdown wan; sleep 1; ifup wan
fi
其他2
如果觉得openwrt中跑的定时任务太多,不想挤在⼀起,同时执⾏。
可以参考【】
转载注明来源: 来⾃.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论