設定 1984.is DDNS 並在 RouterBoard 啟動 script
這邊要來說明如何透過 1984.is FreeDNS 中設定 DDNS,並啟動 API
而在 RouterBoard 上,在發生 PPPoE 斷線重新連線後,能自動更新指定網域的 IP
首先。先登入 1984.is 管理介面,上方功能列 > FreeDNS > Dynamic DNS
點選畫面中間的 "Enable API" 的按鈕
畫面中會有提示 API Key:6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp,建議把這個 Key 可先複製起來,後續會用到
畫面中間也有個提示範例 https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=example.is&ip=
先複製起來,等等測試會使用到
接下來回到 Zone 的畫面,要先去新增一筆 A record,才能後續的 DDNS 設定
這邊新建一筆 A record,名稱為 home,IP 暫時為 101.101.101.101,確認後點選後方綠色按鈕 "+New"
目前在 A record 的地方,已可看到剛剛新的一筆 home 的紀錄,IP 為 101.101.101.101
將剛剛複製的網址,
https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=example.is&ip=
其中我的網址是 home.jia543.win 測試的 IP 為 8.8.8.8
因此,整個測試的 API 網址為
https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=home.jia543.win&ip=8.8.8.8(上面紅色的部分是我的資訊,要測試請改成符合你的確實資訊)
改完成後,將整串網址貼在網址列上,並直接前往,會發現最後得到一個 false 的訊息
而上面的錯誤訊息也有提到,要去啟動 DDNS,先返回到 1984.is FreeDNS 管理介面
View Zones > 進入網域 > 找到 home 這筆 A record,後面有個 DDNS按鈕,按下去變成綠色即可
再將剛剛測試的 API 網址貼上測試,這時候可以看到得到一個 true 的訊息
再返回 FreeDNS 管理介面,查看這筆 home 的 A record。IP 已變成 8.8.8.8 了
已經確認 1984.is FreeDNS 的 DDNS 功能確實是可執行的,後續要把這個 API 的方式,改寫成 RouterBoard 可執行的 script,並讓 RouterBoard 在 PPPoE 重新連線後,能夠自動將 1984.is 上的網址更新
用 WinBox 連上 RB 後,從 System > Scheduler 中,新增一筆
其中的 Interval 的單位為 時:分:秒,如果第一次設定,想要更快確認是否有更新,可先設 00:03:00
阿嘉只是有空有連進去看看我的 RB 狀態而已,有時候一忙也沒想要連,才設定 01:00:00
:global 1984Key "1984.is_API Key" //1984.is_API Key 貼上前面說的1984.is DDNS的API Key
:global theinterface "WAN_INTERFACE" //WAN_INTERFACE 換成RB上 PPPoE 的介面名稱
:global 1984Host "1984.is_Domain" //1984.is_Domain 換成 DDNS 的網址名稱
完整的 Scheduler scippt
而在 RouterBoard 上,在發生 PPPoE 斷線重新連線後,能自動更新指定網域的 IP
首先。先登入 1984.is 管理介面,上方功能列 > FreeDNS > Dynamic DNS
點選畫面中間的 "Enable API" 的按鈕
畫面中會有提示 API Key:6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp,建議把這個 Key 可先複製起來,後續會用到
畫面中間也有個提示範例 https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=example.is&ip=
先複製起來,等等測試會使用到
接下來回到 Zone 的畫面,要先去新增一筆 A record,才能後續的 DDNS 設定
這邊新建一筆 A record,名稱為 home,IP 暫時為 101.101.101.101,確認後點選後方綠色按鈕 "+New"
目前在 A record 的地方,已可看到剛剛新的一筆 home 的紀錄,IP 為 101.101.101.101
將剛剛複製的網址,
https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=example.is&ip=
其中我的網址是 home.jia543.win 測試的 IP 為 8.8.8.8
因此,整個測試的 API 網址為
https://api.1984.is/1.0/freedns/?apikey=6Cc7It8Ti3Dj7Nu5Dn0Wr5Fu1Xp0Aw0Us0Zt5Tm3Ee9Le6Te9Rq6Ul3Cr5Dz3Qp&domain=home.jia543.win&ip=8.8.8.8(上面紅色的部分是我的資訊,要測試請改成符合你的確實資訊)
改完成後,將整串網址貼在網址列上,並直接前往,會發現最後得到一個 false 的訊息
而上面的錯誤訊息也有提到,要去啟動 DDNS,先返回到 1984.is FreeDNS 管理介面
View Zones > 進入網域 > 找到 home 這筆 A record,後面有個 DDNS按鈕,按下去變成綠色即可
再將剛剛測試的 API 網址貼上測試,這時候可以看到得到一個 true 的訊息
再返回 FreeDNS 管理介面,查看這筆 home 的 A record。IP 已變成 8.8.8.8 了
已經確認 1984.is FreeDNS 的 DDNS 功能確實是可執行的,後續要把這個 API 的方式,改寫成 RouterBoard 可執行的 script,並讓 RouterBoard 在 PPPoE 重新連線後,能夠自動將 1984.is 上的網址更新
用 WinBox 連上 RB 後,從 System > Scheduler 中,新增一筆
其中的 Interval 的單位為 時:分:秒,如果第一次設定,想要更快確認是否有更新,可先設 00:03:00
阿嘉只是有空有連進去看看我的 RB 狀態而已,有時候一忙也沒想要連,才設定 01:00:00
:global 1984Key "1984.is_API Key" //1984.is_API Key 貼上前面說的1984.is DDNS的API Key
:global theinterface "WAN_INTERFACE" //WAN_INTERFACE 換成RB上 PPPoE 的介面名稱
:global 1984Host "1984.is_Domain" //1984.is_Domain 換成 DDNS 的網址名稱
完整的 Scheduler scippt
#版本 V1.0 #定義 1984.is FreeDNS DDNS 相關設定,以下自行修改: #============================================================ :global 1984Key "1984.is_API Key" :global theinterface "WAN_INTERFACE" :global 1984Host "1984.is_Domain" #============================================================ #以下程式若是不了解,請勿修改,以免無法正常運行: #------------------------------------------------------------------------------------------ #定義 IP 相關變數 :global ipddns [:resolve $1984Host]; :global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ] #是否更新 IP :if ([ :typeof $ipfresh ] = nil ) do={ :log error ("1984_DDNS:No IP address on $theinterface .") } else={ :for i from=( [:len $ipfresh] - 1) to=0 do={ :if ( [:pick $ipfresh $i] = "/") do={ :set ipfresh [:pick $ipfresh 0 $i]; } } :if ($ipddns != $ipfresh) do={ #更新 DDNS IP :local url "https://api.1984.is/1.0/freedns/?apikey=$1984Key&domain=$1984Host&ip=$ipfresh" /tool fetch url="$url" mode=http dst-path=("1984DDNS_$1984Host") :delay 1 :global str [/file find name="1984DDNS_$1984Host"]; /file remove $str #確認是否成功並起紀錄 :log warning ("1984_DDNS:原 IP 為 " . $ipddns . " 已更新 IP 為 " . $theinterface . " 的 " . $ipfresh) :global ipddns $ipfresh } else={ :log info ("1984_DDNS: $1984Host 的 IP 沒有變化"); } } #------------------------------------------------------------------------------------------