先附上脚本地址 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等其他不受影响
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
不用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
抱歉回复晚了,https://www.frost.net.cn/archives/1419,你先看下这个
教教我怎么获取Token吧 .我已在腾讯云注册了域名. 实名认证 .在哪里看这个数值 .谢谢了
博主,能不能把脚本改为,只解析IPV6,
我是移动的宽带 ip4只有内网 ipv6可用,已测过pc和nas的域名都能用。
但用了你脚本后,提示 注册失败:
目前无线路由器使用一个私人的 WAN IP 地址。此路由器可能处于多个 NAT 中并且 DDNS 服务不能在此环境下工作。
这样子无论是ipv4还是ipv6都没办法解析。
所以问一下博主能不能把ipv4的代码去掉?
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
}
大神,我r7000使用脚本最新脚本,无法更新ipv6地址,ipv4正常,等了还是一样。请问是什么缘故呢?
你好,不知道为什么,梅林1.2固件,用了你仓库的支持ipv6的脚本,dnspot只能动态显示ipv6的ip,ipv4的ip依然是默认的8.8.8.8,远程管理内网,也是打不开。
你好,解决了,原来少了ID那6个数字,只写了 Token,现在都能获取ipv4和ipv6的ip了,就是远程管理内网,还是打不开。是不是内网网页管理端不支持ipv6的原因?
是不是运营商禁端口了?
寒霜您好!
我用了您的脚本,能成功解析ipv4,但是ipv6解析一直不成功。等了好久还是这样,请问是什么原因?