由于家里使用ADSL动态IP上网,有时在外面须要使用家里资源,本来使用的是TP-LINK自带的花生壳解析,用过以后发现很不稳定。由于本身注册了域名也已使用了DNSPOD解析。json
1.新建脚本文件ubuntu
vim ddns.sh
文件内容以下:
vim
#!/bin/sh # 全局变量表 arPass=arMail="" # 得到外网地址 arIpAdress() { local inter="http://members.3322.org/dyndns/getip" wget --quiet --no-check-certificate --output-document=- $inter } # 查询域名地址 # 参数: 待查询域名 arNslookup() { local dnsvr="114.114.114.114" nslookup ${1} $dnsvr | tr -d '\n[:blank:]' | awk -F':' '{print $6}' } # 读取接口数据 # 参数: 接口类型 待提交数据 arApiPost() { local agent="Ddns/3.08" local inter="https://dnsapi.cn/${1:?'Info.Version'}" local param="login_token=${arID},${arToken}&format=json&${2}" wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter } # 更新记录信息 # 参数: 主域名 子域名 arDdnsUpdate() { local domainID recordID recordRS recordCD # 得到域名ID domainID=$(arApiPost "Domain.Info" "domain=${1}") domainID=$(echo $domainID | sed 's/.\+,"id":"\([0-9]\+\)".\+/\1/') # 得到记录ID recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}") recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/') # 更新记录IP recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&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 1 fi # 输出错误信息 echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/' } # 动态检查更新 # 参数: 主域名 子域名 arDdnsCheck() { local postRS local hostIP=$(arIpAdress) local lastIP=$(arNslookup "${2}.${1}") echo "hostIP: ${hostIP}" echo "lastIP: ${lastIP}" if [ "$lastIP" != "$hostIP" ]; then postRS=$(arDdnsUpdate $1 $2) echo "postRS: ${postRS}" if [ $? -ne 1 ]; then return 0 fi fi return 1 } ################################################### # 设置用户参数 arID="89322" arToken="3222w2e3213e123421421424234" #填写帐户的API token # 检查更新域名 arDdnsCheck "anrip.com" "lab"
ps:以上代码来自http://www.anrip.com/post/872
api
咱们只须要将上面的bash
# 设置用户参数dom
arID="user@anrip.com" //DNSPOD的API ID
ide
arToken="anrip.net" //DNSPOD的API Token
post
# 检查更新域名ui
arDdnsCheck"anrip.com" "lab" //须要更新的域名为anrip.com,主机为lab,就是lab.anrip.com
spa
arDdnsCheck"anrip.net" "lab" //更新lab.anrip.net
修改为本身的信息便可
3.增长执行权限
chmod +x /root/ddns.sh
4.加入任务计划(5分钟执行一次)
echo "*/5 * * * * root /root/ddns.sh" >> /etc/crontab
计划任务执行状况能够查看/var/log/cron
说明:
若是在执行后发现
[root@localhost ~]# ./ddns.sh ./ddns.sh: line 24: nslookup: command not found hostIP: 114.234.77.222 lastIP: postRS: 114.234.77.222
若是你使用的是CentOS则执行
yum -y install bind-utils
或者是ubuntu的话
sudo apt-get install dnsutils