有自己的 VPS,很多服务都可以自己来做了,例如我自己安装一个 VPN 用来穿墙。今天用PowerDNS做了一个动态域名解析服务,替换过去老旧的方法。现在不仅可以自己用,还可以提供给其他有动态域名解析需求的同学。
更新域名的 API 很简单,一个 HTTP 请求即可。API 地址是: http://dynamic.wacao.com/api/plain.php,参数为,
host– 主机名,FQDN 为${host}.dynamic.wacao.comtime– unixtime 形式的请求时间,时间误差在正负 5 分钟内有效sign– 签名,格式为sha1(${host}${time}${shared_key})ip– 可选。如果未提供 IP 地址则采用客户端请求的来源地址
其中host和shared_key需要我来提供。这里提供一个的 host 和 shared_key 给大家测试。testing, d035cdac09dd866ed8f4a244567c4daf。域名为 testing.dynamic.wacao.com.。
由于仅是一个 HTTP 请求,客户端很容易用各种语言实现。我自己用的是一个简单的 shell 脚本。
#!/bin/bash
function usage {
echo "Usage: $0 {host} {shared_key}"
}
if test -z $1 || test -z $2
then
usage
exit 1
fi
HOST=$1
SHARED_KEY=$2
ENDPOINT="http://dynamic.wacao.com/api/plain.php"
TIME=`date +%s`
SIGN=`echo -n "${HOST}${TIME}${SHARED_KEY}" | sha1sum -t | awk '{print $1}'`
URL="${ENDPOINT}?host=${HOST}&time=${TIME}&sign=${SIGN}"
curl "$URL"
执行后立即能够解析,TTL 为 5 秒。
$ update-dynamic-dns.sh testing d035cdac09dd866ed8f4a244567c4daf
ok. 58.33.69.77
$ host testing.dynamic.wacao.com.
testing.dynamic.wacao.com has address 58.33.69.77
我将这个脚本加到 crontab 里,每 5 分钟更新一次。
*/5 * * * * /usr/local/sbin/update-dynamic-dns.sh ${HOST} ${SHARED_KEY}
如果觉得 testing.dynamic.wacao.com 这样的域名不好看,而且你有自己的域名,可以想我一样,给自己的域名加一个 CNAME。例如我把 alcohol.swanpan.com 做了一个 CNAME 指到 alcohol.dynamic.wacao.com
;; ANSWER SECTION:
alcohol.swanpan.com. 86400 IN CNAME alcohol.dynamic.wacao.com.
alcohol.dynamic.wacao.com. 5 IN A 58.33.69.77
这样我在各个地方都能用 alcohol.swanpan.com 这个域名访问家里的机器,方便用它穿墙。
想试试的朋友告诉我你要的 host,我给你发送 shared_key。