GXNAS博客

  • 博客会员
    • 注册会员
    • 重置密码
  • 博客文章分类
    • NAS
    • 虚拟化技术
    • 路由器
    • 网站
    • Linux
    • Windows
    • IPTV
    • 游戏
    • 资源下载
    • 其他
  • ”零刻迷你主机“玩机教程
    • 零刻EQ12迷你小主机评测
    • 零刻SER5 5500U打造新潮派HTPC
    • 零刻SEi10玩ESXI+群晖NAS+Ubuntu
    • 零刻EQ13化身迷你静音省电的NAS
    • 零刻EQ13部署双软路由教程
    • 零刻ME Mini搭建群晖NAS教程
  • 阿里云盘资源
    • 阿里云盘资源更新日志
    • 阿里云盘资源分享
    • 阿里云盘扩容福利码
  • 【GXNAS网盘】
  • 【GXNAS小工具】
    • 免费AI绘图
    • 五子棋小游戏
  • 请博主喝奶茶
GXNAS博客
https://wp.gxnas.com
  1. 首页
  2. NAS
  3. 博文内容

通过阿里云API(php)搭建DDNS动态域名解析

发布时间:2018年9月14日 8775次浏览 1人点赞 0条评论

DDNS(Dynamic Domain Name Server)是动态域名服务的缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人们更方便的访问互联网;

DDNS相关介绍

DNS:域名系统,是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人们更方便的用数字英文组合甚至中文访问互联网,而不需要用IPv4、IPv6 复杂的数字字符组合;

DDNS:动态域名系统,是域名系统(DNS)中的一种自动更新名称服务器内容的技术。在传统的DNS中,域名必须和固定的IP绑定,当IP变化时,必须手动更新IP与域名的映射关系,才能保证变化后的IP仍与域名相对应,其他用户才可访问。DDNS的作用就是将这更新过程自动化

ddns原理.png
ddns原理2.png

目前公司商用、家用宽带 几乎都是动态IP的宽带,所谓动态IP就是 随机分配给你的IP地址,动态IP地址(Dynamic IP)指的是在需要的时候才进行IP地址分配的方式。动态IP地址和静态IP地址是对应的。所谓动态就是指当你每一次上网时,ISP会随机分配一个IP地址,静态指的是固定分配一个IP地址,每次都用这一个地址;

那么怎么才能固定,答案是否定的! 但可以换个思路,IP不固定 那么 域名 是固定的,只需要记得域名,域名则通过DDNS解析,就能在广义上定义为固定。

DDNS用来干什么

用DDNS动态域名的目的是什么?
现在智能家电越来越多,物联网时代;通过APP就能远程家电、监控、家庭私有云、公司云盘... ...

特别提醒:使用动态域名搭建服务 请自觉遵守互联网安全法和相关法律法规

实现原理

  1. 在一个公网固定IP的服务器上部署PHP版域名解析API作为服务端
  2. 客户端设备访问服务器的URL
  3. 服务器GET客户端IP并把客户端IP解析到指定的域名A记录上

ddns原理3.png

环境准备

  1. 固定IP的公网WEB服务器 WEB环境支持PHP7 推荐宝塔面板 以下用宝塔举例其他环境类似安全起见至少为nginx或apache
  2. 阿里云域名,并申请阿里云 AccessKey, AccessKeySecret(先保存记录)
  3. 客户端的动态IP带宽
    ddns原理4.png

说明:客户端IP地址需要 公网非城域,并且有可运行curl的设备 大多数路由的计划任务中都是支持的
且24小时不关机,(我个人在家有群晖和宝塔面板都是不关机的;也可以树莓派甚至是可curl的路由)

如果满足条件就继续:

开始配置

公网服务器配置

  1. 解析一个作为DDNS服务域名到该服务器例如'ddns.abc.com',并创建对应的网站,不需要数据库
  2. 再解析一个要作为动态域名的子域名例如'www.abc.com',指向暂时IP随便写一个
  3. Linux环境ssh进入新建网站根目录,运行命令(由阿里云提供)git clone https://github.com/roura356a/alicloud-php-dns-updater.git dyndns-updater
  4. Windows或者其他环境可直接访问https://github.com/roura356a/alicloud-php-dns-updater.git下载项目并解压到根目录
  5. 这时候就会有根目录下就有有一个文件夹 dyndns-updater
  6. 进入dyndns-updater文件夹找到 index.php 点击编辑

代码如下

<?php
date_default_timezone_set('UTC');
include_once 'alicloud-php-updaterecord/V20150109/AlicloudUpdateRecord.php';
use Roura\Alicloud\V20150109\AlicloudUpdateRecord;
$AccessKeyId     = '填写你的 AccessKeyId';
$AccessKeySecret = '填写你的 AccessKeySecret';
$updater         = new AlicloudUpdateRecord($AccessKeyId, $AccessKeySecret);
$newIp = $_SERVER['REMOTE_ADDR']; // New IP
$updater->setDomainName('填写你的顶级域名(没有www)如abc.com');
$updater->setRecordType('A');
$updater->setRR('填写作为动态解析的子域名,如www');
$updater->setValue($newIp);
print_r($updater->sendRequest());

修改后保存,然后进行先测试,然后再作安全方面配置
浏览器打开
http://你服务端域名/dyndns-updater/
如http://ddns.abc.com/dyndns-updater/

如果返回格式

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

那么说明解析成功,应该稍后就能收到DNS变更邮件提醒,如果没有返回则检查配置,和确认你的动态IP是否是城域;

安全配置

接下来做安全方面配置,避免你的url泄露,无论谁 一访问 A记录就解析成别人的了,总之谁访问就解析谁;

1.宝塔面板nginx点击站点修改——网站目录——密码访问 点击开启,密码建议稍复杂 我这里举例为 账号:btdnsadmin 密码:passwd
设置后 服务器端就完成了;

2.Apache(linux)的使用 .htaccess 和 .htpasswd 来进行安全加固
.htaccess
把.htaccess文件放在与index.php相同的文件夹中
内容如下

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

.htpasswd
在任意位置运行以下命令,来创建用户及密码:

htpasswd -c /var/www/dyndns-updater/.htpasswd updater_user

以上命令会首次创建.htpasswd文件。其中,updater_user是您要添加的用户名。当运行该用户名时,它会要求您输入密码。

注意:根据 Apache 官方文档,htpasswd 使用 bcrypt(针对 Apache 的 MD5 修订版本),SHA1,或者系统的crypt()
例程来加密密码,确保密码不会以纯文本形式保存。所以,在执行以上命令后,我们建议您将密码保存在安全的地方。如果由于加密而忘记密码,您将无法恢复它

推荐一个懒人工具 在线 htpasswd 生成器 可直接生成出需要的文件 生成完成直接拷贝进目录即可

完成以上配置后,您可以使用用户名和密码来访问 URL

接下来,来到动态IP环境中,使用你的linux或者宝塔面板 创建定时任务执行脚本
这里列举宝塔面板 计划任务中的脚本执行

执行命令(脚本) 时间周期建议10分钟一次就行,本人使用1分钟 都是能稳定运行的

curl -u btdnsadmin:passwd http://你服务端域名/dyndns-updater/index.php

btdnsadmin:passwd为你服务端为网站建立的访问账号:密码

返回日志:

★[2018-04-21 22:34:02] Successful
 ----------------------------------------------------------------------------
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed

 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
 100   183    0   183    0     0    309      0 --:--:-- --:--:-- --:--:--   309
Array
(
[RequestId] => F4VDF8A-D2DF-49VV-ER00-458D6918FDDE
[HostId] => dns.aliyuncs.com
[Code] => DomainRecordDuplicate
)

说明执行成功

如没有公网服务器的,那么就只能选择纯客户端版python的 这里就脱本文内容了,就不说了 度娘有一堆教程。
如果动态IP宽带没有公网IP的,可以尝试部署Ngrok 内网穿透

一切就绪

推荐使用端搭配阿里云公共DNS

223.5.5.5
223.6.6.6

就能达到几乎秒级的解析速度

一些总结

实测用过LEDE&OpenWRT 还有梅林 AliDDNS插件 效果都没有上述方法高效稳定 可能是强迫症犯了
至于为何不用免费的一些厂商DDNS,这个问题很好理解 重点我已经标出来;
追求稳定和急速的想法已经造就了强迫症的严重度;

本文部分内容引用阿里云官方提供的阿里云解析API文档

标签: DNS
最后更新:2019年9月16日

本文作者:博主

个人简介:(未填写)

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
站内搜索
分类
  • IPTV / 15篇
  • Linux / 34篇
  • NAS / 252篇
  • Windows / 21篇
  • 其他 / 37篇
  • 游戏 / 3篇
  • 网站 / 125篇
  • 虚拟化技术 / 55篇
  • 资源下载 / 2篇
  • 路由器 / 46篇
归档
博客统计信息
  • 4,910,282
  • 570
  • 16,802
  • 2025年7月8日

© 2025 GXNAS博客 版权所有,未经许可不得转载或引用本站的内容。

COPYRIGHT ALL RIGHTS RESERVED.

网站备案号:桂ICP备18008717号