本文转载地址:https://www.77bx.com/132.html
版权所有,本文由 奇奇博讯 创作发布,转载或复制请以超链接形式并注明出处。
本文主要讲解如何借助阿里云aliyun的云解析API接口来实现RouterOS(以下简称ROS)的DDNS动态解析。
一、创建访问控制RAM的AccessKey
我这边简单的讲讲如何申请开通:
1、阿里云网站 –> 产品 –> 安全 –> 应用身份服务,这个就是控制API ,用户管理,新建用户,填写用户名和勾上“为该用户自动生成AccessKey”,保存好这个accesskey。
2、策略管理 –> 自定义授权策略,新建授权策略,选择空白模版,授权策略名称随便填(如alidns),策略内容为下面的内容(修改下面内容中的域名为你自己要做DDNS的域名)
action是api的接口,只接受AddDomainRecord(增加域名解析),DescribeDomainRecords(输出域名解析列表)和UpdateDomainRecord(修改域名解析记录)
Resource是指被授权的具体对象,这边domain/77bx.com需要修改成你自己的域名domain/xxx.com。这样就是授权对象是该域名
{ "Version": "1", "Statement": [ { "Action": [ "alidns:AddDomainRecord", "alidns:DescribeDomainRecords", "alidns:UpdateDomainRecord" ], "Resource": "acs:alidns:*:*:domain/ginux.xyz", "Effect": "Allow" } ] }
3、用户管理,对上面创建的用户,点击授权,选择刚才自定义创建的策略,确定。
二、PHP制作aliyun API动态解析接口
以下是作者制作好的php解析接口
接口地址:
HTTP请求方式:
- POST/GET
请求参数:
- id (必选) AccessKeyId
- secret (必选)AccessKeySecret
- record(必选)记录名(如:www)
- domain(必选)域名(如:77bx.com)
- ip (可选,默认值为请求来源IPv4)DDNS的IP地址
- type (可选,默认值为A,可选值为AAAA) IPv6支持
示例:
curl -X POST https://www.ginux.xyz/aliddns.php -d 'id=id&secret=secret&domain=77bx.com&record=www&ip=1.1.1.1'
返回参考:
“0”代表解析修改成功或者是当前解析记录ip相同
“1”代表AccessKey报错(这个阿里云我这边经常出现,刷新就可以正常)
“2”代表没有设置参数
安全说明:
1、本接口未记录所有的解析AccessKey和解析记录,但是服务器的访问日志会有链接记录(按照政策要求需保存6个月的日志)。虽然有日志但是本接口不提供任何查询。
2、强烈建议按照步骤一设置授权权限。
3、由于使用本接口出现的任何安全问题,作者声明:本人概不负责。这边只能保证本人不会去做任何后门行为。这边建议勤换AccessKey
三、ROS脚本
id、secret、domain、record、pppoe修改成自己的。定时1分钟运行就好。
#aliyun Access Key :local id "AccessKeyId" :local secret "AccessKeySecret" #domain :local domain "77bx.com" :local record "www" #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://www.ginux.xyz/aliddns.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"; } } }
脚本说明:获取pppoe拨号ip,然后判断和记录解析ip是否相同,不同开始访问php解析脚本,解析脚本就判断参数执行,返回0或1或2,如果是0更新记录的alidns解析ip,其他的不记录。
四、源码开源
alidns-api-php Github:https://github.com/77bx/alidns-api-php