V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jun9100
V2EX  ›  问与答

求助,请诸位大大教教我做 ddns 的 wget 脚本,文科生,实在是无力了。。。。。。

  •  
  •   jun9100 · 2014-09-03 13:04:47 +08:00 · 6568 次点击
    这是一个创建于 3770 天前的主题,其中的信息可能已经有所发展或是发生改变。
    wndr4300刷openwrt,因为是双拨,一条是电信,一条线是华数,其中华数的ip外网是无法连接,而且如果直接用wget更新ip就有可能抓到华数的ip,所以想指定电信出口的wan。在网上找了很多帖子和教程都无果。希望诸位大大能帮帮小弟。


    WANIF="pppoe-wan2"
    MYIP=`ifconfig ${WANIF} |grep \"inet addr\" | cut -d : -f 2 | cut -d'B' -f 1"`
    nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
    usedIP=`cat /tmp/usedIP.txt

    if [ "$nonceIP" == "$usedIP" ]; then
    echo $nonceIP > /tmp/nonceIP.txt
    else
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${WANIF}&u=*****&p=******&cmd=update&offline=0'
    echo $nonceIP > /tmp/usedIP.txt
    fi
    第 1 条附言  ·  2014-09-03 23:44:12 +08:00
    @mind3x 果然可以,真的是非常感谢。
    最终的脚本如下:
    脚本1:wget更新changeip免费ddns的主脚本
    ####################updatedns.sh###########################
    #/root/updatedns.sh

    /usr/sbin/mwan3 stop #由于mwan3强大的功能会无视我们指定的端口,所以先暂时停止mwan3
    sleep 5
    INTERFACE=pppoe-wan2 #填入自己需要强制通行的端口
    MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`#通过curl命令抓取我们所指定端口的网址,如果没有安装curl,记得先去安装

    nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
    usedIP=`cat /tmp/usedIP.txt`#通过grep搜索curl获取到的myip地址,并且写入到/tmp/usedIP.txt,如果没有安装curl,记得先去安装

    if [ "$nonceIP" == "$usedIP" ]; then
    echo $nonceIP > /tmp/nonceIP.txt #判断nonceIP是否和usedIP一致,如果一致就停止更新ddns,如果不同则执行下面的wget命令
    else
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0' #根据自己ddns服务商不能,wget的命令也会不一样。
    fi
    sleep 5
    /usr/sbin/mwan3 start #重新启动mwan3任务
    ######################updatedns.sh############################
    这个脚本我是放在/root/updatedns.sh下,记得修改权限为0777

    脚本2:这个脚本是让/root/updatedns.sh能按计划执行的
    ######################crontab############################
    #/etc/crontabs/crontab
    */30 * * * * root /root/updatedns.sh > /dev/null 2>&1 #最前面的30是代表更新的时间间隔,30是代表30分钟。可以根据自己的需求修改。位置是放在/etc/crontabs/crontab,记得修改权限为0777
    ######################crontab############################

    最后再次感谢@mind3x给予我的帮助,也十分感谢@mind3x分享的wndr4300的openwrt固件。南无阿弥陀佛。
    用的时候记得把#后面的文字删除,这句是写给和我一样的小白的。
    最后的最后推荐一下@mind3x大大openwrt rom
    http://www.v2ex.com/t/128585#reply26
    37 条回复    2014-09-04 13:21:58 +08:00
    jun9100
        2
    jun9100  
    OP
       2014-09-03 13:44:48 +08:00
    求各位大哥帮忙的说
    mind3x
        3
    mind3x  
       2014-09-03 14:09:19 +08:00
    用curl指定outgoing interface:

    MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`

    我没实测,你试试看。
    jun9100
        4
    jun9100  
    OP
       2014-09-03 14:43:53 +08:00
    @mind3x 这个意思是通过pppoe-wan2查看ip吗?
    jun9100
        5
    jun9100  
    OP
       2014-09-03 14:49:48 +08:00
    @mind3x 貌似不行
    curl: can't load library 'libpolarssl.so.6'
    zro
        6
    zro  
       2014-09-03 16:01:10 +08:00
    楼主是用mwan3叠加,还是nwan呢?貌似是有指定出口的功能啊。。。
    manhere
        7
    manhere  
       2014-09-03 16:03:53 +08:00
    https://support.dnspod.cn/Support/api
    参考下面的第三方项目 根据自己的环境 稍微改改就能使用
    jun9100
        8
    jun9100  
    OP
       2014-09-03 16:22:07 +08:00
    @zro nwan3
    jun9100
        9
    jun9100  
    OP
       2014-09-03 16:25:22 +08:00
    @manhere 感觉会掉进另外一个坑?openwrt您推荐哪个教程呢?
    mhycy
        10
    mhycy  
       2014-09-03 16:34:55 +08:00
    没试过多线叠加,但按思路来说不是直接IFCONFIG电信的那个端口就能抓到电信的外网IP了么?
    然后用那个IP提交就好了
    FanError
        11
    FanError  
       2014-09-03 16:40:23 +08:00
    楼主,你的wndr4300刷的openwrt是哪个版本?稳定吗?
    FanError
        12
    FanError  
       2014-09-03 16:41:05 +08:00
    主要想问下ddns,pptp server,端口转发稳定不。
    俺现在用的是dd-wrt,想试下openwrt
    jun9100
        13
    jun9100  
    OP
       2014-09-03 17:03:38 +08:00
    @FanError 我现在用的是mind3x 大大的固件,感觉很不错,推荐使用。
    帖子如下。
    http://www.v2ex.com/t/128585#reply26
    jun9100
        14
    jun9100  
    OP
       2014-09-03 17:05:03 +08:00
    @FanError 因为我是双线拨号,系统自带的订单ddns不好用。
    不过ddns在单线单拨或者单线多拨的情况下运营如何不清楚。
    pptp我没用。不清楚。
    mind3x
        15
    mind3x  
       2014-09-03 18:36:40 +08:00
    @jun9100 看起来是从官网安装的curl需要的libpolarssl和我的编译版本里libpolarssl的版本不一致。你先暂时这样fix一下

    cd /usr/lib
    ln -s libpolarssl.so.7 libpolarssl.so.6

    因为上面的命令不会用到SSL,只要curl能跑起来就行。
    mind3x
        16
    mind3x  
       2014-09-03 18:40:26 +08:00
    @jun9100 这条命令的意思是走pppoe-wan2的出口去访问ifconfig.me这个网站,而这个网站送回的页面内容就是你的公网IP。
    jun9100
        17
    jun9100  
    OP
       2014-09-03 21:01:08 +08:00
    @mind3x 修复后测试curl已经可以用了,但是我有5个地址,其中4个获取了电信正确的地址,还有一个却还是华数的地址,无语了。
    jun9100
        18
    jun9100  
    OP
       2014-09-03 21:13:25 +08:00
    @mind3x 又测试了几次,还是同样的结果,这几次是3个电信地址,2个华数地址,杯具啊
    mind3x
        19
    mind3x  
       2014-09-03 22:46:19 +08:00
    @jun9100 我知道是为什么了,因为mwan3无视curl指定interface,还是强行做负载均衡,把连接分到不同的wan口上了。最简单的办法,是在你更新DDNS的脚本最前和最后分别mwan3 stop和mwan3 start
    jun9100
        20
    jun9100  
    OP
       2014-09-03 22:52:24 +08:00
    @mind3x 真是一语中的
    那这脚本怎么写呢,亲。
    mind3x
        21
    mind3x  
       2014-09-03 23:01:25 +08:00
    @jun9100 如我上面所说,在你这个更新DDNS的脚本最前面加上
    /usr/sbin/mwan3 stop
    (或 /etc/init.d/mwan3 stop 一个效果)

    在最后面加上
    /usr/sbin/mwan3 start
    (或 /etc/init.d/mwan3 start 一个效果)

    大约就是这样。行不行就看你的人品了。
    jun9100
        22
    jun9100  
    OP
       2014-09-03 23:05:23 +08:00
    mwan3 stop
    sleep 5
    INTERFACE=pppoe-wan2
    MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`

    nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
    usedIP=`cat /tmp/usedIP.txt`

    if [ "$nonceIP" == "$usedIP" ]; then
    echo $nonceIP > /tmp/nonceIP.txt
    else
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
    echo $nonceIP > /tmp/usedIP.txt
    fi
    sleep 5
    mwan3 start
    jun9100
        23
    jun9100  
    OP
       2014-09-03 23:30:06 +08:00   ❤️ 1
    @mind3x 果然可以,真的是非常感谢。
    最终的脚本如下:
    脚本1:wget更新changeip免费ddns的主脚本
    ####################updatedns.sh###########################
    #/root/updatedns.sh

    /usr/sbin/mwan3 stop #由于mwan3强大的功能会无视我们指定的端口,所以先暂时停止mwan3
    sleep 5
    INTERFACE=pppoe-wan2 #填入自己需要强制通行的端口
    MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`#通过curl命令抓取我们所指定端口的网址,如果没有安装curl,记得先去安装

    nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
    usedIP=`cat /tmp/usedIP.txt`#通过grep搜索curl获取到的myip地址,并且写入到/tmp/usedIP.txt,如果没有安装curl,记得先去安装

    if [ "$nonceIP" == "$usedIP" ]; then
    echo $nonceIP > /tmp/nonceIP.txt #判断nonceIP是否和usedIP一致,如果一致就停止更新ddns,如果不同则执行下面的wget命令
    else
    wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0' #根据自己ddns服务商不能,wget的命令也会不一样。
    fi
    sleep 5
    /usr/sbin/mwan3 start #重新启动mwan3任务
    ######################updatedns.sh############################
    这个脚本我是放在/root/updatedns.sh下,记得修改权限为0777

    脚本2:这个脚本是让/root/updatedns.sh能按计划执行的
    ######################crontab############################
    #/etc/crontabs/crontab
    */30 * * * * root /root/updatedns.sh > /dev/null 2>&1 #最前面的30是代表更新的时间间隔,30是代表30分钟。可以根据自己的需求修改。位置是放在/etc/crontabs/crontab,记得修改权限为0777
    ######################crontab############################

    最后再次感谢@mind3x给予我的帮助,也十分感谢@mind3x分享的wndr4300的openwrt固件。南无阿弥陀佛。
    用的时候记得把#后面的文字删除,这句是写给和我一样的小白的。
    mind3x
        24
    mind3x  
       2014-09-04 00:33:37 +08:00
    @jun9100 补充一点,因为你已经定义了

    INTERFACE=pppoe-wan2 #填入自己需要强制通行的端口

    所以用curl取IP的时候就用这个变量,不要再写pppoe-wan2了

    MYIP=`curl --interface $INTERFACE http://ifconfig.me/ip`
    jun9100
        25
    jun9100  
    OP
       2014-09-04 09:55:36 +08:00
    @mind3x 恩恩,这就去优化脚本。
    jun9100
        26
    jun9100  
    OP
       2014-09-04 10:13:00 +08:00
    @mind3x 大大,这个脚本能否在做优化,因为停止mwan3毕竟会导致下载速度变慢,如果脚本没10分钟执行一次的话,感觉会很不爽,所以能不能把最前面的写成如下:
    if [ "$nonceIP" == "$usedIP" ]; then
    echo $nonceIP > /tmp/nonceIP.txt
    else /usr/sbin/mwan3 stop
    fi

    但是最后是/usr/sbin/mwan3 start要怎么写,我想这个也是要暂停mwan3的吧。
    jun9100
        27
    jun9100  
    OP
       2014-09-04 11:18:13 +08:00
    @mind3x
    大大,这是啥意思?
    sh: enabled: unknown operand
    mind3x
        28
    mind3x  
       2014-09-04 11:58:44 +08:00
    @jun9100 "sh"这个命令说,"enabled"这个操作数未知。检查你的脚本。
    mind3x
        29
    mind3x  
       2014-09-04 12:00:37 +08:00
    @jun9100 有很多种办法。最简单的一种是不stop mwan3,先curl个10次,取回来的IP如果次次都和以前存的不一样,再确实的stop mwan3去取确定的wan2 IP。
    mind3x
        30
    mind3x  
       2014-09-04 12:02:17 +08:00
    @jun9100 另外其实没必要10分钟检查,可以在系统通知wan2 down了又重新up的时候再去检查,不过这个三两句话说不清楚,你有兴趣的话可以自行研究...
    jun9100
        31
    jun9100  
    OP
       2014-09-04 12:28:42 +08:00
    @mind3x 是不是可以把ddns的脚本放到/etc/ppp/ip-down.d下面,我看这个帖子说只要拨号掉线就会执行/ip-down.d下面的脚本的。
    求证。http://www.openwrt.org.cn/bbs/thread-1947-1-1.html
    mind3x
        32
    mind3x  
       2014-09-04 12:42:12 +08:00
    @jun9100 放到 /etc/ppp/ip-up.d/ 里。你是需要在wan连接成功后检查,不是在wan连接断掉后检查。 官方文档在

    http://wiki.openwrt.org/doc/howto/vpn.client.pptp#etcpppip-up.and.etcpppip-down
    mind3x
        33
    mind3x  
       2014-09-04 12:43:10 +08:00
    @jun9100 不过你真的是文科生吗?你的钻研精神超过我见到的理科生平均水平很多啊。
    jun9100
        34
    jun9100  
    OP
       2014-09-04 12:48:49 +08:00
    @mind3x 真的是文科生,专业是汉语言文学
    jun9100
        35
    jun9100  
    OP
       2014-09-04 12:49:15 +08:00
    @mind3x 刚才是理解错误了 不好意思哈,脑子不好使
    mind3x
        36
    mind3x  
       2014-09-04 13:07:28 +08:00
    @jun9100 要不要考虑转行算了啊哈哈哈哈
    jun9100
        37
    jun9100  
    OP
       2014-09-04 13:21:58 +08:00
    @mind3x 真的非常感谢,已经搞定啦。
    我现在在做电商哈。哈哈。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:15 · PVG 18:15 · LAX 02:15 · JFK 05:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.