RouterOS利用aliyun的API接口實現DDNS動態解析


原文:

https://www.myxzy.com/alidns-api-php.html

alidns-api-php腳本源碼

Github:https://github.com/myxzy/alidns-api-php

本文主要講解如何借助阿里雲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地址
  • type     (可選,默認值為A,可選值為AAAA) IPv6支持

 

示例:

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

 

 

2020-2-14 v1.1

1、修復records記錄太多,導致重復添加域名記錄

2、修復簽名有概率失敗的情況

3、支持IPv6解析,加上參數&type=AAAA,IP參數為IPv6地址

 

 

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,其他的不記錄。

 

四、alidns-api-php腳本源碼

Github:https://github.com/myxzy/alidns-api-php


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM