梅林 dnspod ddns 添加ipv6支持

先附上脚本地址 https://github.com/frostnotfall/DNSPodDdns

==================================================

目前联通已可获得ipv6地址,遂将原荒野无灯基于 anrip 的脚本添加了ipv6的动态解析支持
荒野无灯原帖:http://koolshare.cn/thread-37553-1-1.html

主要做了以下几点修改:
1. arNslookup (查询域名已解析的IP地址 )修改为 dnspod api post方式
2. 梅林固件重启后不会立刻获取到公网 ipv6 地址,当脚本检测不到 ipv6 地址时会等待 5 分钟后重新获取,还是没有则继续等待 5 分钟 ,以此类推,期间梅林控制台页面会显示叹号,但此时 ipv4 动态解析已经可用
3. 域名,二级域名 的传入参数作为全局变量使用,相关函数的传入参数做了简化

使用此脚本,需:
1.指定 arToken ,Token请去 https://www.dnspod.cn/console/user/security 获取
2.指定 arDdnsCheck “域名” “二级域名(可为空)” 如:
arDdnsCheck “baidu.com” “”  会动态解析 baidu.com 域名
arDdnsCheck “baidu.com” “www”  会动态解析 www.baidu.com 域名
3.因为 ipv4 与 ipv6 使用不同的recordID,使用脚本前先在 dnspod 官方控制台页面添加该域名(或二级域名)的 AAAA 记录,以生成 ipv6 的recordID

提醒:一般用作动态解析的域名,不会做 dns 负载均衡,所以为避免可能出现的问题,尽量只保持一个A记录和一个AAAA记录,避免解析错误,当然CNAME或NS等其他不受影响

11人评论了“梅林 dnspod ddns 添加ipv6支持”

  1. an 16 21:41:42 rc_service: watchdog 525:notify_rc start_ddns
    Jan 16 21:41:42 custom_script: Running /jffs/scripts/ddns-start (args: 182.147.78.85)
    Jan 16 21:42:12 watchdog: start ddns.
    Jan 16 21:42:12 rc_service: watchdog 525:notify_rc start_ddns
    Jan 16 21:42:12 custom_script: Running /jffs/scripts/ddns-start (args: 182.147.78.85)
    Jan 16 21:42:42 watchdog: start ddns.
    Jan 16 21:42:42 rc_service: watchdog 525:notify_rc start_ddns
    Jan 16 21:42:42 custom_script: Running /jffs/scripts/ddns-start (args: 182.147.78.85)
    Jan 16 21:43:12 watchdog: start ddns.
    Jan 16 21:43:12 rc_service: watchdog 525:notify_rc start_ddns
    Jan 16 21:43:12 custom_script: Running /jffs/scripts/ddns-start (args: 182.147.78.85)

    为什么我用 无灯和你这个 没成功过一次。。。 求解释 我自己有公网ip nas可以解析 脚本权限 0755

  2. 不用v6也不成功,梅林7.8,大神有空指点下,我一年了没搞好, 论坛有人说 if [ $? -eq 0 ]; then 这里错了,整体看下也不想有问题啊,头痛

    #!/bin/sh

    #################################################
    # AnripDdns v5.08
    # 基于DNSPod用户API实现的动态域名客户端
    # 作者: 若海[mail@anrip.com]
    # 介绍: http://www.anrip.com/ddnspod
    # 时间: 2016-02-24 16:25:00
    # Mod: 荒野无灯 http://ihacklog.com 2016-03-16
    # ReMod: 寒霜 https://www.frost.net.cn 2018-12-06
    #################################################

    # 使用Token认证(推荐) 请去 https://www.dnspod.cn/console/user/security 获取
    arToken=”ID,Token”

    # 获得外网ipv4地址
    arIpAdress() {
    local inter=$(nvram get wan0_ipaddr)
    echo $inter
    }

    # 读取接口数据
    # 参数: 接口类型 Post数据
    arApiPost() {
    local agent=”AnripDdns/5.07(mail@anrip.com)”
    local inter=”https://dnsapi.cn/${1:?’Info.Version’}”
    if [ “x${arToken}” = “x” ]; then # undefine token
    local param=”login_email=${arMail}&login_password=${arPass}&format=json&${2}”
    else
    local param=”login_token=${arToken}&format=json&${2}”
    fi
    wget –quiet –no-check-certificate –output-document=- –user-agent=$agent –post-data $param $inter
    }

    # 获得ID与初步数据
    getIDs() {
    domainID=$(arApiPost “Domain.Info” “domain=${domain}”|sed ‘s/.\+{“id”:”\([0-9]\+\)”.\+/\1/’)
    returnDatav4=$(arApiPost “Record.List” “domain_id=${domainID}&sub_domain=${sub_domain}&record_type=A”)
    }

    # 查询域名地址
    # 参数: 待查询域名
    arNslookup() {
    local lastIP=$(echo $returnDatav4|grep -Eo “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])”)
    echo $lastIP
    }

    # 更新ipv4记录信息
    arDdnsUpdate() {
    local recordID recordRS recordCD
    # 获取记录ID
    recordID=$(echo $returnDatav4|sed ‘s/.\+\[{“id”:”\([0-9]\+\)”.\+/\1/’)
    # 更新记录IP
    recordRS=$(arApiPost “Record.Ddns” “domain_id=${domainID}&record_id=${recordID}&sub_domain=${sub_domain}&record_line=默认”)
    recordCD=$(echo $recordRS | sed ‘s/.\+{“code”:”\([0-9]\+\)”.\+/\1/’)
    # 输出记录IP
    if [ “$recordCD” == “1” ]; then
    echo $recordRS | sed ‘s/.\+,”value”:”\([0-9\.]\+\)”.\+/\1/’
    return 0
    fi
    # 输出错误信息
    echo $recordRS | sed ‘s/.\+,”message”:”\([^”]\+\)”.\+/\1/’
    return 1
    }

    # 动态检查更新
    # 参数: 主域名 子域名
    arDdnsCheck() {
    # 全局变量
    domain=$1
    subdomain=$2
    getIDs

    local postRS hostIP lastIP

    # ipv4
    hostIP=$(arIpAdress)
    echo “hostIP: ${hostIP}”
    lastIP=$(arNslookup)
    echo “lastIP: ${lastIP}”

    if [ “$lastIP” != “$hostIP” ]; then
    arDdnsUpdate
    if [ $? -ne 0 ]; then
    return 1
    else
    flag=0
    fi
    fi
    }

    ###################################################
    # 检查更新域名
    # 指定 domain subdomain
    arDdnsCheck “域名.com” “www”

    if [ $? -eq 0 ]; then
    /sbin/ddns_custom_updated 1
    else
    /sbin/ddns_custom_updated 0
    fi

  3. 教教我怎么获取Token吧 .我已在腾讯云注册了域名. 实名认证 .在哪里看这个数值 .谢谢了

  4. 博主,能不能把脚本改为,只解析IPV6,
    我是移动的宽带 ip4只有内网 ipv6可用,已测过pc和nas的域名都能用。
    但用了你脚本后,提示 注册失败:
    目前无线路由器使用一个私人的 WAN IP 地址。此路由器可能处于多个 NAT 中并且 DDNS 服务不能在此环境下工作。
    这样子无论是ipv4还是ipv6都没办法解析。
    所以问一下博主能不能把ipv4的代码去掉?

    1. arDdnsCheck() 改成这样试试,不过这样有个问题,在我的环境下ipv6要等好久才能获取到,这种情况下可能注册失败
      arDdnsCheck() {
      # 全局变量
      domain=$1
      subdomain=$2
      getIDs

      local postRS hostIP lastIP postRS_v6 hostIP_v6 lastIP_v6

      # ipv4
      hostIP=$(arIpAdress)
      echo “hostIP: ${hostIP}”
      lastIP=$(arNslookup)
      echo “lastIP: ${lastIP}”

      if [ “$lastIP” != “$hostIP” ]; then
      arDdnsUpdate
      fi

      # ipv6
      hostIP_v6=$(arIpAdress_v6)
      echo “hostIP_v6: ${hostIP_v6}”
      lastIP_v6=$(arNslookup_v6)
      echo “lastIP_v6: ${lastIP_v6}”

      if [ “$lastIP_v6” != “$hostIP_v6” ]; then
      arDdnsUpdate_v6 ${hostIP_v6}
      if [ $? -ne 0 ]; then
      /sbin/ddns_custom_updated 1
      else
      /sbin/ddns_custom_updated 0
      fi
      else
      /sbin/ddns_custom_updated 1
      fi
      }

  5. 大神,我r7000使用脚本最新脚本,无法更新ipv6地址,ipv4正常,等了还是一样。请问是什么缘故呢?

  6. 你好,不知道为什么,梅林1.2固件,用了你仓库的支持ipv6的脚本,dnspot只能动态显示ipv6的ip,ipv4的ip依然是默认的8.8.8.8,远程管理内网,也是打不开。

  7. 你好,解决了,原来少了ID那6个数字,只写了 Token,现在都能获取ipv4和ipv6的ip了,就是远程管理内网,还是打不开。是不是内网网页管理端不支持ipv6的原因?

  8. 寒霜您好!
    我用了您的脚本,能成功解析ipv4,但是ipv6解析一直不成功。等了好久还是这样,请问是什么原因?

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注