Site Loader

  在之前介绍过利用DNSPOD实现动态域名解析的方法,可参照本站文章《Linux下实现自有域名DDNS动态域名解析-DNSPOD篇》。而这次将为大家带来阿里云动态域名解析的实现方法。

  两者目的也只有一个,实现动态域名解析,区别在于服务提供商及实现方式。

  本文所讨论的是非固定公网IP,固定公网IP及运营商局域网IP不在本文讨论范围内。

在操作前,请先作如下准备:

  • 有自己注册的一级域名,形如himstudy,net9yaoquan.com,注册商的选择可按自己喜好决定,但有一个先决条件,服务提供商允许修改域名的DNS服务器 。
  • 阿里云注册一个帐号。

  应用场境如下图,笔者在内网部署了一台Nextcloud服务器,宽带使用拨号方式,动态公网IP,通过路由器端口映射,使用自有注册域名从公网访问内网Nextcloud服务器。

  Nextcloud服务器操作系统使用Ubuntu Server,本文主要讲述在Ubuntu下的实现方法,其它Linux系统实现方法同理。

实现原理及步骤如下:

  1. 将域名的DNS服务器修改为阿里云的DNS服务器
  2. 在阿里云帐号管理中创建一个子用户
  3. 设置子用户的权限
  4. 在子用户下创建一个AccessKey
  5. 在阿里云的域名解析中添加域名
  6. 域名下添加A记录
  7. 在Ubuntu Server下安装python3、python3-pip、aliyun-python-sdk-core
  8. 下载aliddns的python文件,修改配置文件,上传到服务器
  9. Linux服务器运行py文件,通过阿里云的API更新A记录,达到更新IP的目的
  10. 定时执行py文件

1. 将域名的DNS服务器修改为阿里云的DNS服务器(如域名是在阿里云注册的,不用更改)。

  以GoDaddy为例,登录域名管理后台,修改域名的DNS服务器,分别填入dns25.hichina.com和dns26.hichina.com,点击保存并生效。

  通过以上修改后,意味着域名的A记录、CNAME、MX等一系列的解析工作将必须通过阿里云设定并完成。

2. 在阿里云帐号管理中创建一个子用户

  为了安全起见,我们在阿里云管理后台下建立一个子用户,用于创建独立的AccessKey。当然,你也可以使用管理帐号直接创建AccessKey,阿里云会给出警告提示,因所创建的AccessKey带有管理帐号的所有权限,万一泄漏,带来极大安全隐患。

  点击右上角头像,点击菜单中的【访问控制】,然后左侧菜单选择【用户】,再点击【新建用户】。

  输入自己想设定的登录名称及显示名称,按【确定】保存。

  再次点击左侧【用户】,刚刚所建用户出现在列表中。

3. 设置子用户的权限

  点击用户右侧的【添加权限】,在搜索框输入“dns”,把“只读访问云解析(DNS)的权限”和“管理云解析(DNS)的权限”添加到右侧列表,按【确认】保存,并返回用户列表。

4. 在子用户下创建一个AccessKey

  用户列表中点击用户名称,进入此用户的管理页。点击【创建新的AccessKey】.

  下载或复制创建好的AccessKeyID和 AccessKeySecret ,请务必保存好,AccessKeySecret只会在此框显示一次,如忘记就只能重新创建一个了。

5. 在阿里云的域名解析中添加域名

  在【云解析DNS】中添加域名(按上面操作已更改DNS服务器的域名),【确定】保存。

  域名出现在列表中,请注意DNS服务器状态是否显示正常,如显示正常,证明域名的DNS服务器设置成功,否则请再次查看域名的DNS服务器是否已设置成阿里云的DNS服务器。

6. 域名下添加A记录

  添加一个A记录,主机记录为cloud,亦即访问的域名形式为cloud. domainname .com,主机记录按自己需要定义,记录值可先随便输入一个IP,这里输入127.0.0.1,最后点击【确定】。

7. 在Ubuntu Server下安装python3、python3-pip、aliyun-python-sdk-core

  SSH连接Ubuntu Server,输入如下命令进行安装。

sudo -s
apt install python3 python3-pip
pip3 install aliyun-python-sdk-core

8.下载aliddns的python文件,修改配置文件,上传到服务器

  打开https://github.com/mgsky1/DDNS,下载整个目录,修改src目录下的config.json文件,把创建AccessKey时生成的AccessKeyId、AccessKeySecret值,以及域名、A主机记录填入配置文件的相关位置。

把src目录更改为aliddns并上传到服务器var目录,具体目录名称及保存位置可按自己需求更改。

9. Linux服务器运行py文件,通过阿里云的API更新A记录,达到更新IP的目的

  py是python的脚本文件,进入到aliddns目录,运行如下命令更新域名IP,注意大小写。

python3 DDNS.py

  提示更新成功。

  再看看阿里云的域名解析A记录,主机记录同样更改了。

  浏览器输入【http://域名:路由器映射端口】,成功访问Nextcloud。

10. 定时执行py文件

  按以上步骤,已可以实现自有域名DDNS动态域名解析。

  如果公网IP动态作出变更怎么办呢?我们也不可能时刻盯着,手动执行脚本。

  办法很简单,只需在服务器上定时执行py文件即可,具体操作如下:

  root用户编辑定时任务

sudo -s
crontab -e

  未尾添加如下任务行,意思是每15分钟执行一次ddnspod.sh脚本,时间间隔可按自己需求设定,保存并退出。

*/15 *  * * *   python3 /var/aliddns/DDNS.py

任务前有5个“*“号,分别代表分钟、小时、天、月、星期,具体使用方法可上网搜一下。

  重启cron服务,使定时任务生效

service cron restart

  至此,已完美实现自有域名DDNS动态域名解析。

Post Author: 记忆深潜

2 Replies to “Linux下实现自有域名DDNS动态域名解析-ALIDDNS篇”

    1. 您好!如果想修改域名的TTL值,请编辑DDNS.py文件,其中有多项以request.add_query_param开头的代码,请在其中一处插入一行更新TTL值的代码request.add_query_param(‘TTL’, ‘3600’),其中3600是TTL的值,单位为秒,阿里云的云解析DNS免费版的TTL值限制在600-86400秒之间,如设定数值超过此范围,运行代码会出错。谢谢!

发表评论

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