OpenWRT PPPoE重连之后无网络的解决
自动更新了OP1907之后 经常发生PPPoE连接5760分钟的自动重连后 发现没有网络可用 接口显示已经获取到IP地址 然后查询路由表发现默认路由未添加 只添加了网关的路由 那就直接加一个cron狗来保证网络正常
自动更新了OP1907之后
经常发生PPPoE连接5760分钟的自动重连后
发现没有网络可用
接口显示已经获取到IP地址
然后查询路由表发现默认路由未添加
只添加了网关的路由
那就直接加一个cron狗来保证网络正常
> nano /root/pppdog.sh
#!/bin/sh
. /lib/netifd/netifd-proto.sh
INTERFACE=wan
DEFAULTROUTE=`route -n |grep ^0.0.0.0 |grep pppoe-$INTERFACE$`
PINGIP=1.2.4.8
if [ -z "$DEFAULTROUTE" ]
then
if [ -n "$GATEWAYIP" ]
then
echo "`date '+%Y-%m-%d %H:%M:%S'` - PPPDog No Route Reload Route" >> /root/pppdog.log
# IPv4 Route
ip route add `ifstatus wan |jsonfilter -e '@["route"][0].nexthop'` dev pppoe-$INTERFACE
ip route add default via $GATEWAYIP dev pppoe-$INTERFACE
# IPv6 Init
json_init
json_add_string name "${INTERFACE}_6"
json_add_string ifname "@${INTERFACE}"
json_add_string proto dhcpv6
json_add_string zone "wan"
json_close_object
ubus call network add_dynamic "$(json_dump)"
sleep 10s
# IPv6 Route
ip -6 route add `ifstatus wan_6 |jsonfilter -e '@["route"][0].target'`/`ifstatus wan_6 |jsonfilter -e '@["route"][0].mask'` dev pppoe-$INTERFACE proto static metric `ifstatus wan_6 |jsonfilter -e '@["route"][0].metric'` pref medium
ip -6 route add default from `ifstatus wan_6 |jsonfilter -e '@["route"][1].source'` via `ifstatus wan_6 |jsonfilter -e '@["route"][1].nexthop'` dev pppoe-$INTERFACE proto static metric `ifstatus wan_6 |jsonfilter -e '@["route"][1].metric'` pref medium
ip -6 route add default from `ifstatus wan_6 |jsonfilter -e '@["route"][2].source'` via `ifstatus wan_6 |jsonfilter -e '@["route"][2].nexthop'` dev pppoe-$INTERFACE proto static metric `ifstatus wan_6 |jsonfilter -e '@["route"][2].metric'` pref medium
else
echo "`date '+%Y-%m-%d %H:%M:%S'` - PPPDog No Route Reset Interface" >> /root/pppdog.log
ifdown $INTERFACE
ifup $INTERFACE
fi
else
PINGTEST=`ping $PINGIP -c 1`
PINGEXIT="$?"
if [ "$PINGEXIT" == "1" ]
then
echo "`date '+%Y-%m-%d %H:%M:%S'` - PPPDog Ping Error Reset Interface" >> /root/pppdog.log
ifdown $INTERFACE
ifup $INTERFACE
else
PINGLOSS=`ping $PINGIP -c 4 |grep 100%`
if [ -n "$PINGLOSS" ]
then
echo "`date '+%Y-%m-%d %H:%M:%S'` - PPPDog Ping Loss Reset Interface" >> /root/pppdog.log
ifdown $INTERFACE
ifup $INTERFACE
fi
fi
fi
exit 0
> nano /etc/crontabs/root
0 * * * * /root/pppdog.sh
> /etc/init.d/cron restart
每小时检测一次网关是否存在
不存在的话添加
存在的话测试网络(Ping)是否通畅
不通畅则重启目标接口\