通过程序代码访问并维护 DNS 记录

maintain-dns-record

域名的配置信息是网站名字和地址的关联数据,这些数据配置好后一般不怎么修改,所以通常情况下,维护这些数据都是通过登录到域名服务器上去做调整。但有些时候需要定期对某些记录做修改的时候,登录的方法就不太适合或者比较繁琐,比如搭建 DDNS 服务,SSL 证书申请的域名验证等。

本篇文章以 Namesilo 为例介绍如何通过 Shell 脚本程序的方法访问和修改域名记录,其它程序语言编写的方法也是类似的。如何申请和配置域名请看这篇文章

每个域名注册服务提供商都会提供相应的应用程序接口(API)来访问域名服务器中存放的数据,这些接口按照标准的格式来调用域名服务器上的服务并返回结果(XML 格式 ),比如增加、修改、删除、查找域名配置数据等服务。

Namesilo 提供了完整的编程接口用于访问域名数据,比如 dnsListRecords 是列表当前的域名记录,dnsAddRecord 是增加新的记录,dnsUpdateRecord 是修改当前的记录,dnsDeleteRecord 是删除已有的记录等。

一般情况下,调用域名服务接口需要先申请一个 API KEY,可以登录到域名服务器上去申请(免费),这个 key 每次访问域名服务的时候都需要提供。

下面举个修改域名记录的例子来说明一下,使用的是 Shell 脚本。

#!/bin/bash

DOMAIN="kflyo.com"
APIKEY="xxx..."
DNSListFile="kfo.xml"
RESPONSE="kfo_resp.xml"
HOST_NAME="kflyo"
NEW_VAULE="192.168.1.1"

##查询已有的记录,返回值存到一个文件中
curl -s "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=$APIKEY&domain=$DOMAIN" > $DNSListFile

##获取要修改的记录ID(唯一)
RECORD_ID=`xpath -q -e "//namesilo/reply/resource_record/record_id[../host/text() = '$HOST_NAME.$DOMAIN' ]/text()" $DNSListFile`

##修改这条记录的值
curl -s "https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key=$APIKEY&domain=$DOMAIN&rrid=$RECORD_ID&rrhost=$HOST_NAME&rrvalue=$NEW_VAULE" > $RESPONSE

##根据返回代码判断操作是否成功,如果返回代码是300代表成功。
RESPONSE_CODE=`xpath -q -e "//namesilo/reply/code/text()"  $RESPONSE`

上面代码中解析 XML 的工具是 xpath(libxml-xpath-perl包),也可以使用 xmllint(libxml2-utils包)。执行成功后,“www” 中的记录数值会修改成新的数值。

通过这个例子可以看出调用 API 接口访问和修改域名记录还是很方便的,而且无需登录到服务器就可以实现,当然 API KEY 需要妥善保管。

发表评论

邮箱地址不会被公开。 必填项已用*标注