← 回到文章列表

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)是否通畅
不通畅则重启目标接口\

在这里找找

输入关键词,找一篇过去的记录。