openwrt使用godaddy的api实现动态域名解析

 内容转自:分享一个通用的godaddy_DDNS_shell脚本 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz!本脚本针对ipv6,v4也支持,只需在gdip的解析步骤稍作修改即可。废话不多说,直接开搞。一、拥有一个godaddy注册的域名,至于为什么选择godaddy除了你懂的原因,还 ...恩山无线论坛https://www.right.com.cn/forum/thread-1317904-1-1.html

 先进入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下调试未成功

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值