安装OpenWrt后有段时间了,发现DDNS更新不是太好用(我用的dyndns),表现为:

  1. 路由开机后DDNS有时没有更新,不稳定。
  2. 断线重新pppd拨号后,DDNS不会自动更新。

因为我手动运行下面的命令是可以更新DDNS的,这说明更新不稳定的原因可能是:

  1. DDNS脚本的自动检测IP变更没起作用!
  2. 开机时还没拨号成功就运行了脚本,所以没更新成功,然后因为原因1就悲剧了!
    /bin/sh /usr/lib/ddns/dynamic_dns_updater.sh myddns 0 &
    

我的解决方法如下:

方法一(不推荐)

  • 我先是在 /etc/rc.local 里加入下面的命令,使之延时延时更新,果然成功更新。(在动态域名里要设置IP地址来源为pppoe-wan)
    sleep 60 &&/bin/sh /usr/lib/ddns/dynamic_dns_updater.sh myddns 0 &
    

方法二(推荐):

然而上面的方法只能保证开机更新,如果你不掉线那么这个方法就够用了,但一旦掉线上面的方法就不能自动更新!

我的解决办法是建立一个脚本放在/etc/ppp/ip-up.d/下面,因为OpenWrt会在拨号成功后自动运行/etc/ppp/ip-up.d/里的脚本。当然了,断线后的自动运行/etc/ppp/ip-down.d/下的脚本。

  1. 首先,要安装elinks浏览器(如果你的DDNS已经在路由的设置里找到,或你只需要更新一个DDNS可以不用安装)
opkg install elinks
  1. vi /usr/bin/autoddns新建脚本,内容如下:
#!/bin/sh
  #
  ## DDNS
  /bin/sh /usr/lib/ddns/dynamic_dns_updater.sh myddns 0 &
  
  ## 3322.org(下面的可根据需要自行修改)
  USER1=用户名1
  PASSWD1=用户名1的密码
  DDNS1=xxx1.3322.org
  DDNS2=xxx3.3322.org
  DDNS3=xxx1.6600.org
  DDNS4=xxx2.6600.org
  DDNS5=xxx3.3322.org
  
  elinks http://$USER1:$PASSWD1@www.3322.org/dyndns/update?hostname=$DDNS1 >> /dev/null 2>&1
  elinks http://$USER1:$PASSWD1@www.3322.org/dyndns/update?hostname=$DDNS2 >> /dev/null 2>&1
  elinks http://$USER1:$PASSWD1@www.3322.org/dyndns/update?hostname=$DDNS3 >> /dev/null 2>&1
  elinks http://$USER1:$PASSWD1@www.3322.org/dyndns/update?hostname=$DDNS4 >> /dev/null 2>&1
  elinks http://$USER1:$PASSWD1@www.3322.org/dyndns/update?hostname=$DDNS5 >> /dev/null 2>&1

上面的脚本是更新OpenWrt里设置的DDNS,然后自动更新我的5个3322.org,如果你有更多帐号可以添加USER2,USER3等等

3.别忘了给脚本运行权限

chmod 755 /usr/bin/autoddns

4.创建脚本到/etc/ppp/ip-up.d/的链接。当然,你也可以去掉参数-s创建硬链接

ln -s /usr/bin/autoddns /etc/ppp/ip-up.d/autoddns

然后,重启ping试试,应该自动更新DDNS了,并且你也可以手动运行autoddns命令更新DDNS了。(注意有时ping后IP没更新是dns缓存的缘故,等下再ping试试)

文章作者: 嘿手大叔
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 i·Space
学习记录 OpenWrt
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝