梅林 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等其他不受影响

4 评论

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

  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. 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注