微信二维码

二维码 扫二维码马上关注
扫码咨询
动态DNS使用阿里云DNS API

        根据Wikipedia,“动态DNS (DDNS或DynDNS)是一种自动更新名称服务器记录的方法,通常是实时的,使用其已配置主机名、地址或其他信息的动态DNS配置。”通常,服务器有一个静态IP,相关域名包含一个a记录,说明它是哪个。下面是机器如何解析wikipedia.org的IP的例子:


 

        正如您所看到的,要让访问者的机器将wikipedia.org“翻译”成145.97.39.155需要很多步骤。DNS将wikipedia.org解析为它的IP地址后,计算机就可以定位页面在Internet中的托管位置。这也是大多数网站的常见情况。

 

一、为什么需要动态DNS解决方案

在大多数情况下,静态ip可以很好地访问Internet。当我们想要设计一个移动网络(不仅仅是手机)时,问题就出现了。;例如,如果我们有一些个人NAS或物联网设备,甚至是手机,我们就不能在个人网络之外使用相同的IP地址。在本文中,我们希望为希望从外部访问的家庭设备设置一个类似的网络。例如,您可能设置了一个智能家居或安全设备,您需要在离开家时访问它。

 

二、我们需要什么

        本教程假设您已经拥有了以下阿里云产品:

        ●一个域。

        ●带有Apache和PHP的ECS实例。

        如果您不确定如何设置域名,可以查看阿里云入门教程,或者访问文档中心了解更多信息。整个想法是在家里的设备上安排cron作业,使用curl运行托管在ECS实例中的PHP脚本,该脚本使用阿里云DNS API更新给定域的a记录。动态更新域名服务器记录的标准化方法在RFC2136中定义,通常称为动态DNS更新。该方法是一个用于托管DNS服务器的网络协议,它包含一个安全机制。如果您想了解更多,请查看RFC2136的相关文档。因此,了解DNS如何工作以及为什么我们需要为我们的家庭使用设置一个动态DNS,让我们深入了解细节。我们将使用alicloud-php-dns-updater,这是一个专门为此目的编写的PHP脚本。它基于一个可以使用的类。


三、克隆回购

        ssh进入您的阿里云ECS实例,并进入/var/ww /html目录(或您选择的任何一个服务于公共内容的目录)。在此之后,键入git clone https://github.com/roura356a/aliclou-php-dns-updater.git dyndns-updater。

 

四、从阿里云获取访问密钥

获得密钥对很容易,并且允许您使用DNS之外的更多API特性。为了得到一个,登录你的阿里云控制台,在顶部的导航栏中,鼠标停留在你的电子邮件地址中,点击“accesskeys”,如下图所示。

进入密钥屏幕后,将访问密钥ID和访问密钥密钥密钥复制到安全位置。要显示密钥,需要点击“显示”。在保存这些数据时要小心,因为这些数据非常敏感,如果处理不当,可能会造成不可逆转的损害。您还应该考虑使用它们的策略创建更有限的键,但这是另一个条目的主题。

 

五、在ECS中设置动态DNS更新器脚本

        回到ECS,我们需要打开index.php文件,并用之前收集的信息替换占位符,比如ACCESS_KEY_ID和ACCESS_KEY_SECRET。在这个例子中,我假设ACCESS_KEY是CAmKUmIUGiMO83mS, ACCESS_KEY_SECRET是CjKaN02Ann9maMmiauusmoGOI7mn,域customnasathome.com。php文件应该是这样的:

<?php

date_default_timezone_set('UTC');

include_once 'alicloud-php-updaterecord/V20150109/AlicloudUpdateRecord.php';

use Roura\Alicloud\V20150109\AlicloudUpdateRecord;

$AccessKeyId     = 'CAmKUmIUGiMO83mS';
$AccessKeySecret = 'CjKaN02Ann9maMmiauusmoGOI7mn';
$updater         = new AlicloudUpdateRecord($AccessKeyId, $AccessKeySecret);

$newIp = $_SERVER['REMOTE_ADDR']; // New IP

$updater->setDomainName('customnasathome.com');
$updater->setRecordType('A');
$updater->setRR('@');

$updater->setValue($newIp);

print_r($updater->sendRequest());

六、测试更新器

        现在我们已经完成了上面的所有步骤,是时候测试是否正确地设置了所有内容。此时,您应该有一个公共URL (http://11.111.11.111/dyndns-updater/),它将通过访问运行更新程序。在浏览器中打开它并查看输出。如果API响应为正数,输出应该如下所示:

Array
(
    [RecordId] => 3666544576879860
    [RequestId] => F4VDF8A-D2DF-49VV-ER00-458D6918FDDE
)

        您使用阿里云DNS API成功更新了您的域名A记录。容易,对吧?

七、确保脚本

        所以我们能够改变给定域的记录只打开一个URL,从浏览器或者使用curl,但是默认URL是公开访问,而且,即使你不告诉任何人的URL,这样是一个非常糟糕的实践离开。为了保护访问,我们将使用Apache .htaccess和.htpasswd。

 

        将此文件(.htaccess)放在与index.php相同的文件夹中:

AuthType Basic
AuthName "DNS Updater Access"
AuthUserFile /var/www/dyndns-updater/.htpasswd
Require valid-user

        对于这个步骤,您需要运行一个命令来创建用户及其密码。在任何位置键入htpasswd -c /var/ww /dyndn -updater/。htpasswd updater_user。这将首次创建文件。“updater_user”是您要添加的用户名。当你运行它时,它会询问你的密码。根据官方Apache文档,htpasswd使用bcrypt(针对Apache、SHA1或系统的crypt()例程修改的MD5版本)加密密码,因此密码永远不会以纯文本形式保存。这一点很重要,因为您需要在执行命令后将密码保存在安全的地方。如果您忘记了它,因为它是加密的,您将无法恢复它。之后,您应该能够通过提供用户名和密码访问URL。

 

八、Cron作业

        Cron是类unix操作系统中一个基于时间的作业调度程序实用程序。它对于运行自动备份或其他常规任务非常方便。它非常适合我们的情况,因为我们需要不时检查外部IP是否更改以更新域的A记录crontab在实例中的位置并不重要,因为我们将使用命令行添加cronjob。运行crontab -e并选择您最喜欢的编辑器(如果不确定,请选择nano,因为它是最简单的编辑器)。如果您选择nano,请记住,要退出并保存文件,您需要按ctrl + x,然后按y并回车。

 

        对于本文,我们将计划的作业设置为每30分钟运行一次。你可以在变量/30中看到。如果您想每15分钟设置一次,您应该将该部分更新为/15。有关更高级的cron调整,请查看官方的Linux cron指南。

没有身份验证:转到crontab文件的底部,添加/30 * curl http://11.111.11.111/dyndns-updater/。

身份验证:在本例中,我们需要向curl添加用于基本身份验证的凭据,以便获得访问权限。转到crontab文件的底部,添加/30 * curl -u“updater_user:YOUR_PASSWORD”http://11.111.11.111/dyndns-updater/。

 

        结束:默认情况下,阿里云会在记录有任何变化时向您发送电子邮件。因此,您将能够随时跟踪所有自动更新。如果您想了解更多关于阿里云API的信息,您可以访问官方开发者资源,在那里您可以查看所有阿里巴巴云API的引用。另外,阿里云推出了很多优惠活动,可以在购买阿里云产品之前先领取阿里云代金券阿里云学生优惠券来获得更大的优惠!

更多精彩内容,请关注元吉优惠券网:专注阿里云代金券阿里云服务器报价腾讯云代金券的免费领取!
更多精彩内容推荐:
阿里云常见问题解答 
阿里云服务器操作方法(新手图文教程) 
阿里云学生服务器价格低至95元/年 
阿里云弹性裸金属服务器(神龙版)

阿里云学生优惠问答


































 


在线客服
热线电话

扫一扫 微信加好友