er-x,求一个定时重拨并获得公网ip的脚本...

本地联通宽带会在公网ip和内网ip之间跳,之前试了 zerotier速度不如人意
还在恩山上翻openwrt的自动重拨脚本,主要是外行,看得云里雾里
就是想搞一个每天定期重拨的脚本,若获得的是10或者100开头的内网ip的话就继续重拨直到获得公网ip为止
另外,如果每天重拨的话,ddns解析有没有间隔时间要求呢?路由上用的noip的ddns
谢谢!

自己写个脚本,放在crontab里跑就可以了

connet/disconnect interface pppoe pppoe0
show 一下interface pppoe,grab一下内容,看看ip是多少

自用的pppoe自动换IP的脚本

while [ “$OldIP” == “$NewIP” ]
这行改为:
while [ “$OldIP” == “$NewIP” ] || [ “${NewIP:0:2}” == “10” ]
在crond里定时运行即可

emmmm…我这个和楼上的不一样,看起来没那么高大上23333

创建一个文件路径(无需文件后缀。我是双线,单线只取一个就好了):/config/scripts/redial

redial内容:

#!/bin/vbash
run=/opt/vyatta/bin/vyatta-op-cmd-wrapper
$run disconnect interface pppoe0
sleep 10
$run disconnect interface pppoe2
sleep 10
$run connect interface pppoe0
sleep 10
$run connect interface pppoe2

定时任务配置
task redial {
crontab-spec “30 4 * * *”
executable {
path /config/scripts/redial
}
}
上免crontab-spec的取值方式为:“分钟 小时 天 月 周” 根据自己的需求设置 *号表示不设置

楼上这个脚本只是断线重拨,并不能保证重拨后的IP不一样,也没有判定是不是内网IP

:grin:是的,不过没必要吧…我这里重播后IP还没见过没变的~至于内网IP这个重播不能解决吧 :hushed:

多谢LS各位的回复,之前在恩山找到一个脚本,麻烦帮看看针对erx有什么地方需要更改的,谢谢

#!/bin/sh
if [ ! -z "/tmp/redial_ip_lock" ]; then
        touch /tmp/redial_ip_lock
        sleep 10
        times='0'
        for i in `seq 30`
        #做50次拨号循环,30次如果都没拨上也停止
        do
                sleep 2
                wanip=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
                #获取wan口ip
                sleep 2
                pubip=$(wget -qO - ddns.oray.com/checkip|tr -cd [0-9.])
                #从网络获取公网IP

                echo "Public IP:" $pubip
                echo "WAN IP:" $wanip
                #显示IP

                if [ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
                        #如果获取的IP是无效,记为错误

                        if [ "$times" -ge "3" ]&&[ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
                                #如果连续3次都还是没有获取到ip,重拨
                                times='0'
                                ifdown wan | ifup wan
                                sleep 2
                                continue

                        else
                                times=`expr $times + 1`;
                                echo "error times :" $times
                                echo "waitting two seconds"
                                sleep 2
                        fi

                elif [ "$pubip" = "$wanip" ]; then
                #如果外网IP和本地IP相同,则保留IP
                        echo "dial success"
                        break

                else
                #如果获取的是内网IP,重拨
                        echo "Intranet IP:" $wanip
                        echo "Redial ..."
                        ifdown wan | ifup wan
                        sleep 2
                fi
        done
        rm -f /tmp/redial_ip_lock
fi