透過Cloudflare的服務自動更新DNS A紀錄
首先你需要有自己購買的域名,並且把這個域名的DNS代管設定在Cloudflare上面.
符合這二個條件後才能繼續接下來的設定.
文章開始
需要底下這五行資訊,才能把資料填入SCRIPTS腳本裡面去讓它自動更新IP
# zone id “eeabxxxxxxxxxxxxxxxxxxxxxxxxxxxx” (中文頁面叫做”區域識別碼”)
# record id “825xxxxxxxxxxxxxxxxxxxxxxxxxxx” (這要操作CLI或是腳本後,從產生的檔案裡面去找)
# account email “[email protected]” (登入cloudflare的EMAIL帳號)
# API token “b61xxxxxxxxxxxxxxxxxxxx” (這要操作API token後才會產生Global API Key)
# 域名 “cfddns.ros.tw” (你在cloudflare裡面所建立的A紀錄DNS解析域名)
1.首先登入cloudflare,在DNS裡面新增一組A記錄,(新建你需要的域名跟IP,如下圖)
2.複製下來你的zone id ,如下圖
3.生成API token (Global API Key) 如下圖
下圖是生成之後的畫面(把Global API Key複製下來)
4.把底下這些語法複製進去MIKROTIK路由器裡面的SCRIPTS來跑(為了要生成record id)
global cfg do={\
/tool fetch mode=https\
http-method=get\
url="https://api.cloudflare.com/client/v4/zones/$cfi/dns_records"\
http-header-field="content-type:application/json,X-Auth-Email:$cfe,X-Auth-Key:$cfk"\
}
$cfg cfi="你的ZONE ID" cfe="你的EMAIL" cfk="API token裡面的GLOBAL KEY"
最後一行 $cfg cfi= 要填入你的資料替換
最後運轉RUN SCRIPT後,等個幾秒鐘後會在FILES裡面生成一個dns_records檔案

5.把dns_records這個檔案拖拉到桌面後,用文字編輯軟體打開它.
利用搜尋功能找到你這次需要的域名,然後把前面的ID圈起來的那一串代碼複製下來,
這個就是你這個域名的record id. 如下圖 (得到record id後,剛剛建的腳本已用不到,可以刪除)
6.把底下這些語法複製進去MIKROTIK路由器裡面的SCRIPTS來跑.
# cfzoneid “填入zone id”
# cfrecordid “填入record id”
# cfaccountemail “填入email”
# cfAPItoken “填入API token裡面的Global API Key”
# cfdomain “填入你要更新的域名 cfddns.ros.tw”
:delay 10
:global cfu do={\
:local cfzoneid “eeabxxxxxxxxxxxxxxxxxxxxx”;\
:local cfrecordid “825xxxxxxxxxxxxxxxxxxxxxxxx”;\
:local cfaccountemail “[email protected]”;\
:local cfAPItoken “b61xxxxxxxxxxxxxxxxxxxx”;\
:local cfdomain “cfddns.ros.tw”;\
:local currentIP [/ip address get [/ip address find interface=pppoe-out1 ] address];\
:local cfa [:pick $currentIP 0 [:find $currentIP “/”]];\
:local cfp false;\
/tool fetch mode=https\
http-method=put\
url=”https://api.cloudflare.com/client/v4/zones/$cfzoneid/dns_records/$cfrecordid”\
http-header-field=”content-type:application/json,X-Auth-Email:$cfaccountemail,X-Auth-Key:$cfAPItoken”\
http-data=”{\”type\”:\”A\”,\”name\”:\”$cfdomain\”,\”content\”:\”$cfa\”,\”proxied\”:$cfp}”\
output=none\
}
:delay 1
$cfu
如下圖







