Published on

通过 Linode API 实现动态 DNS

Authors
  • avatar
    Name
    Mu Xian Ming
    Twitter

Linode 的 VPS 用了也有几年了,最近才发现它的 API 的实用性,其中一项就是可以简单又灵活的实现动态 DNS。

要使用 DNS 相关的 API 先决条件当然是得由 Linode 来托管你的域名,关于 Linode 的 DNS 托管可以看下这里。下面进入主题:

服务器端的配置

DNS Manager
Add a new record

客户端的配置

Linode 提供了不少 API用以实现对 DNS 的查询和操作。想要使用这些 API 得先申请一个 API Key。

API Key

接下来在浏览器里打开下面这个链接,用这个 API 来查看你所有的域名:

https://api.linode.com/?api_key=your-api-key&api_action=domain.list

api_key 要等于刚才申请的 key。返回的结果是一个 JSON 对象,找到你的域名对应的 DOMAINID,记好。再打开下面这个链接查看你的域名下的所有记录:

https://api.linode.com/?api_key=your-api-key&api_action=domain.resource.list&domainid=your-domain-id

api_key 和 domainid 都要换成你刚刚记下来的内容。在返回的结果里找到你的动态域名(home)对应的 RESOURCEID。最后这个 API 就是会把域名的 IP 更新为 API 调用的地址:

https://api.linode.com/?api_key=your-api-key&api_action=domain.resource.update&domainid=your-domain-id&resourceid=your-resource-id&target=[remote_addr]

照例把 api_key,domainid 和 resourceid 对应成刚才记下来的内容,最后的[remote_addr]代表的就是 API 调用方(打开这个链接的电脑)的 IP 地址,不需要更改。最后的任务就是在客户端创建一个 cron job 来周期性的调用 Linode API:

crontab -e

打开当前用的 cron 任务文件。在文件里加一行:

*/30 * * * * /bin/echo `/bin/date`: `/usr/bin/wget -qO- --no-check-certificate https://api.linode.com/?api_key=your-api-key\&api_action=domain.resource.update\&domainid=your-domain-id\&resourceid=your-resource-id\&target=[remote_addr]` >> /var/log/linode_dyndns.log

每半小时更新一次动态域名对应的 IP。到这就大功告成了:)

P.S. 如果还没有 Linode 账号希望能用我的 referral 链接注册:P 注册 Linode