使用CloudXNS API实现DDNS(动态解析)

DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。

ddns
目前国内支持DDNS解析的商家也比较多,比如花生壳等。如果你想自己不想使用第三方厂家提供的DDNS服务,完全可以自己折腾,比如使用CloudXNS API实现DDNS。

一、开始准备

  • 需求:家里有一台占美小主机24小时运行,需要连接公网实现一些服务,不过运营商的IP是动态的,随时都在发生变化,于是需要用到DDNS
  • 系统:CentOS 6 X64
  • 环境:PHP 5.6
  • 域名一个,并且已经使用CloudXNS DNS

二、安装CloudXNS API PHP SDK

选择CloudXNS API PHP SDK,所以你要提前把PHP环境搭建好咯,进入站点根目录依次执行下面的命令:

### 下载CloudXNS API PHP SDK
wget https://github.com/CloudXNS/CloudXNS-API-SDK-PHP/archive/master.zip
### 解压
unzip master.zip
### 移动
mv CloudXNS-API-SDK-PHP-master/* ./

三、安装SDK

CloudXNS-API-SDK-PHP需要用到Composer,如果您还没有安装Composer,请安装Composer,接着在站点根目录执行composer install即可完成SDK安装。吐槽:SDK在国外,安装速度太慢了。

四、添加执行脚本

CloudXNS API PHP SDK里面有完整的DEMO,需要的可以参考。将下面的代码另存为ddns.php,setApiKey和setSecretKey请注意修改为自己在CloudXNS后台获取的。其中test.hixz.org请修改为您在CloudXNS需要更新的解析记录。

<?php
    //获取公网IP
    $ip = file_get_contents("https://www.xiaoz.me/ip/userip.php");

    require_once './vendor/autoload.php';
    $api = new \CloudXNS\Api();
    $api->setApiKey('xxxxxxxx');
    $api->setSecretKey('xxxxxxxx');
    $api->setProtocol(true);
    /**
     * DDNS快速修改解析记录
     * @param string $domain 包含主机记录的域名
     * @param string $ip IP值 多个以|分割如1.1.1.1|2.2.2.2 可为空
     * @param integer $line_id 线路id 默认为1,可为空
     */
    echo $api->ddns->ddns('test.hixz.org.',$ip,1);
    echo $ip;
?>

五、定时任务

我们可以用Linux的crontab定时任务每小时运行一次脚本,及时更新公网IP,如下:

### 添加定时任务
crontab -e
### 加入计划任务,没小时执行一次脚本
10 * * * * cd /data/wwwroot/test/ && /usr/local/php/bin/php ddns.php >> /home/ddns.log 2>&1
### 重载crontab
service crond reload

10 指每小时的10分,/data/wwwroot/test/为网站根目录,/usr/local/php/bin/php是PHP所在的安装路径。

六、测试

脚本执行成功后,由于DNS缓存原因,一般10分钟左右生效,我们可以用ping命令测试是否和自己的公网IP一致,如果一致,说明DDNS解析成功,如下截图。

ddns_195527

发表回复