先进入godaddy的nds解析页面,新建一条A条目用于登入你的主机;
再进入developer.godaddy.com/keys 创建key和Secret并记录下来,注意,Environment需要选择“Production”;;
然后编辑一个xxx.sh文件,内容如下:
#!/bin/sh
#这里是你购买的域名
mydomain="domain.xyz"
#这里是dns配置中的名称
myhostname="router"
#这里key和Secret之间注意有个冒号
gdapikey="你的key:你的Secret"
logdest="local7.info"
#另外注意,我这里的ipv4地址,所以使用的是A类型解析,如果是ipv6那么下面所有的A需改为AAAA
#这里的地址也是为ipv4服务,ipv4地址为https://api.ipify.org,
#ipv6为myip=`curl -6 "https://api6.ipify.org"`
#也可自行使用别的地址
myip=`curl -s "https://api.ipify.org"` #从ip服务器获取ip
# myip=`ip route show | grep pppoe-wan | awk 'NR==2 {print $9}'` #从本地获取pppoe-wan口的ip
dnsdata=`curl -s -X GET -H "Authorization: sso-key ${gdapikey}" "https://api.godaddy.com/v1/domains/${mydomain}/records/A/${myhostname}"`
#这里最后的2-9是针对性取得ipv6的字符,dnsdata中的返回字符串是一个json格式,需对齐解析。
# gdip=`echo $dnsdata | cut -d ',' -f 1 | tr -d '"' | cut -d ":" -f 2-9` #ipv6
gdip=`echo $dnsdata | cut -d ',' -f 1 | tr -d '"' | cut -d ":" -f 2` #ipv4
echo "`date '+%Y-%m-%d %H:%M:%S'` - Current External IP is $myip, GoDaddy DNS IP is $gdip"
if [ "$gdip" != "$myip" -a "$myip" != "" ]; then
echo "IP has changed!! Updating on GoDaddy"
curl -s -X PUT "https://api.godaddy.com/v1/domains/${mydomain}/records/A/${myhostname}" -H "Authorization: sso-key ${gdapikey}" -H "Content-Type: application/json" -d "[{\"data\": \"${myip}\"}]"
logger -p $logdest "Changed IP on ${hostname}.${mydomain} from ${gdip} to ${myip}"
fi
如果openwrt中设置了科学上网,用curl获得的ip地址可能会是外网的地址,那么myip的获取可以改用ip route show的方式,首先在命令行输入ip route show,观察打印出来的信息,并尝试最终输出实际的ip地址,本人的ip采集自wan口,关键词是pppoe-wan,所以可用如下命令实现ip的采集;
ip route show | grep pppoe-wan | awk 'NR==2 {print $9}'
注意,
grep pppoe-wan #用于打印pppoe-wan的信息;
awk #用于处理grep pppoe-wan的文本信息,NR==2意思是指定第二行,print $9的意思是指定第九列;
{print $9} #打印第九个字段;
最后把这个xxx.sh文件放入系统的定时任务里,比如半小时一次
编辑crontab,如,把脚本保存在/root/ddns.sh中,在命令行输入如下命令:
crontab -e
再输入,当前编辑环境实为vi,crontab的命令格式为‘分 时 天 月 周 usercommand’:
30 * * * * /root/ddns.sh
再输入crontab -l查看已有的定时任务;
另外也可再加入开机执行该脚本,可同样写入crontab中
crontab -e
@reboot sleep 120 ; /root/ddns.sh
其中sleep 120表示开机后等待120秒执行。
如果还想再生成日志,可以将crontab命令改成
@reboot sleep 120 ; /root/ddns.sh >> /root/ddns.log
30 * * * * /root/ddns.sh >> /root/ddns.log
注意:@reboot sleep 120 在openwrt下调试未成功