您的位置:首页 > 运维架构 > Linux

CentOS通过DNSpod实现动态域名

2014-04-29 14:01 417 查看
因为家里使用ADSL动态IP上网,有时在外面需要使用家里资源,原本使用的是TP-LINK自带的花生壳解析,用过之后发现很不稳定。因为自己注册了域名也已使用了DNSPOD解析。
1.新建脚本文件
vim ddns.sh
文件内容如下:

#!/bin/sh

#################################################
# AnripDdns v3.08.09
# 基于DNSPod用户API实现的动态域名客户端
# 作者: 若海[mail@anrip.com]
# 介绍: http://www.anrip.com/ddnspod # 时间: 2013-08-08 23:25:00
#################################################

# 全局变量表
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:]' | sed 's/.\+1 \([0-9\.]\+\)/\1/'
}

# 读取接口数据
# 参数: 接口类型 待提交数据
arApiPost() {
local agent="AnripDdns/3.08(mail@anrip.com)"
local inter="https://dnsapi.cn/${1:?'Info.Version'}"
local param="login_email=${arMail}&login_password=${arPass}&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
}

###################################################

# 设置用户参数
arMail="user@anrip.com"
arPass="anrip.net"

# 检查更新域名
arDdnsCheck "anrip.com" "lab"
arDdnsCheck "anrip.net" "lab"
ps:以上代码来自http://www.anrip.com/post/872

我们只需要将上面的
# 设置用户参数arMail="user@anrip.com" //DNSPOD用户名
arPass="anrip.net" //DNSPOD密码
# 检查更新域名arDdnsCheck"anrip.com" "lab" //需要更新的域名为anrip.com,主机为lab,就是lab.anrip.com
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


本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1404534
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: