跳转到主要内容
x

RouterOS上利用Aliyun API接口实现DDNS(PHP版本)

一、Ali RAM创建可访问的AccessKey

1. 利用阿里云生成API接口:阿里云网站 --> 产品 --> 安全 --> 应用身份服务

使用用户管理,创建新用户,填写用户名以及勾选“为该用户自动生成AccessKey”,保存好这个accesskey。

2. 授权管理:策略管理 --> 自定义授权策略

A. 新建授权策略,选择空白模版,授权策略名称随便填(如alidns),策略内容如下:

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "alidns:AddDomainRecord",
        "alidns:DescribeDomainRecords",
        "alidns:UpdateDomainRecord"
      ],
      "Resource": "acs:alidns:*:*:domain/*.com",
      "Effect": "Allow"
    }
  ]
}

*说明

1) action为api接口,只接受AddDomainRecord(增加域名解析)、DescribeDomainRecords(输出域名解析列表)和UpdateDomainRecord(修改域名解析记录)。

2) Resource为被授权具体对象。其中,*.com可修改为您对应的域名。

B. 授权管理,转到用户管理,对上所创建用户,点击授权,选择刚才自定义创建策略,确定。

 

二、运行Alidns PHP,使动态解析接口生效

建立一个网站(https://alidns.*.com),使之能访问从alidns.php。代码从https://github.com/77bx/alidns-api-php/blob/master/alidns.php获取。

 

三、手动测试上述接口生效情况

1)通过您的域名服务商管理工具,新建一个域名解析地址,如www

2)命令行下通过命令,执行域名IP地址更新:

curl -X POST https://alidns.*.com/alidns.php -d 'id=id&secret=secret&domain=*.com&record=www&ip=1.1.1.1'

说明:

1)HTTP请求方式

  • POST/GET

2)请求参数

  • id (必选) AccessKeyId
  • secret (必选)AccessKeySecret
  • record(必选)记录名(如:www)
  • domain(必选)域名(如:77bx.com)
  • ip (可选,默认值为请求来源IPv4)DDNS的IP地址
  • type (可选,默认值为A,可选值为AAAA) IPv6支持

3)终端结果返回说明

“0”,代表解析修改成功或者是当前解析记录ip相同

“1”,代表AccessKey报错(这个阿里云我这边经常出现,刷新就可以正常)

“2”,代表没有设置参数

 

四、路由器RouterOS上的任务脚本

如果您使用的是RouterOS路由器,还可以通过如下脚本,使其自动将路由器IP地址更新到对应域名上。具体操作如下:

进入ROS路由器,进入System-->Scheduler,新建如下内容

#aliyun Access Key
:local id "AccessKeyId"
:local secret "AccessKeySecret"

#domain
:local domain "cloudwe.tech"
:local record "vpn"

#PPPoE-out
:local pppoe "pppoe-out1"

:local ipaddr [/ip address get [/ip address find interface=$pppoe] address]
:set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)]
:global aliip
:if ($ipaddr != $aliip) do={
:local result [/tool fetch url="https://alidns.*.com/alidns.php/\?id=$id&secret=$secret&domain=$domain&record=$record&ip=$ipaddr" as-value output=user];
:if ($result->"status" = "finished") do={
:if ($result->"data" = "0") do={
:set aliip $ipaddr
:log info "alidns update ok";
} else={
:log info "alidns update error";
}
}
}

 

说明:

1. id、secret、domain、record、pppoe修改为您自己对应的参数值。定时1分钟运行。

2. 该脚本的功能:定时获取pppoe拨号ip,然后判断和记录解析ip是否相同,返回0或1或2。如果是0更新记录的alidns解析ip,其他的不记录。

 

五、安全特别说明:

1)本接口未记录所有解析AccessKey和解析记录,不过服务器访问日志会有链接记录(按照政策要求需保存6个月日志)。

2)强烈建议按照步骤一设置授权权限。

3)注意安全问题:该接口尽管作者保证没有任何安全问题,建议勤换AccessKey

六、开源源码

alidns-api-php Github:https://github.com/77bx/alidns-api-php

七、文档按共享协议

由https://www.77bx.com/aliyun-ddns-api.html所提供文字整理修改而来。