RouterOS利用aliyun的API接口实现DDNS动态解析

本文主要讲解如何借助阿里云aliyun的云解析API接口来实现RouterOS(以下简称ROS)的DDNS动态解析。


一、创建访问控制RAM的AccessKey

我这边简单的讲讲如何申请开通:

1、阿里云网站 --> 产品 --> 安全 --> 应用身份服务,这个就是控制API ,用户管理,新建用户,填写用户名和勾上“为该用户自动生成AccessKey”,保存好这个accesskey。


2、策略管理 --> 自定义授权策略,新建授权策略,选择空白模版,授权策略名称随便填(如alidns),策略内容为下面的内容(
修改下面内容中的域名为你自己要做DDNS的域名)

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

Resource是指被授权的具体对象,这边domain/myxzy.com需要修改成你自己的域名domain/xxx.com。这样就是授权对象是该域名

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


3、用户管理,对上面创建的用户,点击授权,选择刚才自定义创建的策略,确定。


二、PHP制作aliyun API动态解析接口

以下是我制作好的php解析接口

接口地址:


HTTP请求方式:

  • POST/GET


请求参数:

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


示例:
curl -X POST http://u.myxzy.com/alidns -d 'id=id&secret=secret&domain=myxzy.com&record=www&ip=1.1.1.1'

返回

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

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

“2”代表没有设置参数


安全说明:

1、本接口未记录所有的解析AccessKey和解析记录,但是服务器的访问日志会有链接记录(按照政策要求需保存6个月的日志虽然有日志但是本接口不提供任何查询。

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

3、由于使用本接口出现的任何安全问题,本人概不负责。这边只能保证本人不会去做任何后门行为。这边建议勤换AccessKey


2019-6-8 v1.0

1、只支持A记录,TTL为600(10分钟),线路是默认线路

2、ip填入不带,默认是来源的IPv4地址

3、不支持IPv6

4、解析记录不存在会自动新建解析记录,存在则修改解析

5、多线路相同主机名记录只能识别列表第一条主机名解析记录

6、供源码


三、ROS脚本

id、secret、domain、record、pppoe修改成自己的。定时1分钟运行就好。

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

#domain
:local domain "myxzy.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="http://u.myxzy.com/alidns/\?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,其他的不记录。

  • 下载列表

目前有 22 条评论

avatar

头条新闻  2019-08-10 00:24 8楼

文章不错支持一下吧 回复
avatar

qq136937598  2019-08-07 02:34 7楼

大神 请教一下 我的VPN是通过scoks 5软件连接的 可不可以通用ROS 连SCOKS5然后指定一台机器走scok5这条线 回复
avatar

星之宇  2019-08-07 19:22

@qq136937598:用ip的Web proxy试试。 回复
avatar

今日头条新闻  2019-08-07 01:38 6楼

文章不错支持一下吧,非常喜欢 回复
avatar

游客986938674  2019-07-01 16:03 5楼

demo.php能分享一下吗? 回复
avatar

星之宇  2019-07-01 18:05

@游客986938674:由于特殊原因暂时不发布不分享 回复
avatar

nichwang  2019-06-29 17:26 4楼

感谢大神提供该DDNS,不过我尝试了,始终显示alidns update error,不知道哪里问题。(AccessKey是正确的,我在koolshare里面正常使用的),还请大神指教。 回复
avatar

星之宇  2019-06-29 17:44

@nichwang:返回的Data参数是1,所以会输出alidns update error,你可以先用网址访问测试,是否会更新ip地址。0是成功,1是失败。 回复
avatar

nichwang  2019-06-29 17:49

@星之宇:网站也测试过,是1,失败的,不知道是哪里出错了。 回复
avatar

星之宇  2019-06-29 17:58

@nichwang:1的情况也是有的。后台输出1的情况无非这几种,一种是无法获取域名列表,还有一个是添加或者更新记录。单次出现1是正常的,我测试的时候aliyun api也出现失败,可以都测试几次试试。 回复
avatar

nichwang  2019-06-29 18:06

@星之宇:刷新了N多次了,没有成功过。
另外,请问是不是网页输入这个,http://u.myxzy.com/alidns/\?id=******&secret=*******&domain=ssss.om&record=ros&ip=1.1.1.1
请问,我有没有错误,/\? 这个位置我没搞懂,到了地址栏请求了以后就变成//?了。 回复
avatar

星之宇  2019-06-29 18:07

@nichwang:没有斜杆的
http://u.myxzy.com/alidns/?id=******&secret=*******&domain=ssss.om&record=ros&ip=1.1.1.1 回复
avatar

nichwang  2019-06-29 18:11

@星之宇:郁闷,没有反斜杠也一直是1,实在搞不定。 回复
avatar

星之宇  2019-06-29 18:14

@nichwang:http://u.myxzy.com/alidns/?id=xxxx&secret=xxx&domain=myxzy.com&record=ros&ip=1.1.1.1类似于这样,上面的链接多了amp; 如果还不行那就是AccessKey权限设置有问题。 回复
avatar

nichwang  2019-06-29 18:23

@星之宇:感谢回复,还是不行。应该不是AccessKey的问题,因为我这个key在koolshare的aliddns插件里面是可以正常解析的、 回复
avatar

星之宇  2019-06-29 18:33

@nichwang:按照我创建AccessKey的方法再去创建一个,api和插件的原理应该是不一样的,我的没参考koolshare的,直接是根据官网的api做成的。 回复
avatar

nichwang  2019-06-29 18:42

@星之宇:非常感谢,我按照你的方式又建了一个Key,真的可以了。看来还是我之前的权限设置有些问题。 回复
avatar

今日新鲜事  2019-06-23 22:11 3楼

文章不错非常喜欢 回复
avatar

游客1865358482  2019-06-21 14:52 2楼

应用身份服务  应该是 访问控制 回复
avatar

星之宇  2019-06-21 14:55

@游客1865358482:阿里云就是这么叫的,其实无非就是api的权限控制 回复
avatar

万千  2019-06-08 21:25 1楼

可以费心教一下cloudflare的吗,感恩 回复
avatar

星之宇  2019-06-08 21:26

@万千:没研究cloudflare,所以不知道怎么写。 回复
昵称
邮箱
主页
提交
订阅