[RouterOS] Namecheap DDNS 自動更新腳本

前言

最近從 GoDaddy 轉換到 Namecheap,發現 Namecheap 有自動更新 A Record 的服務,
將別人提供的腳本簡單修改一下,提供給各位使用

事前準備

  • 首先先到 Namecheap 的 Advanced DNS 開啟 DDNS 服務以及抄下 Dynamic DNS Password
  • 再來是新增一個 A + Dynamic DNS Record
    IP address 可以先隨意填,之後 DDNS 就會更新成正確的

腳本內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Namecheap 的更新伺服器
:global ddnsserv "dynamicdns.park-your-domain.com"
# A Record 的 Host
:global ddnshostname "www"
# 你的域名
:global ddnsdomain "example.com"
# DDNS Password
:global ddnspass "e07910a2eb9943bad94014ad5ba54e83"
# 對外的 PPPoE 介面
:global ddnsint "Hinet-PPPoE-out"
:global ddnsip
:global ddnslastip

:global ddnsip [ /ip address get [/ip address find interface=$ddnsint ] address ]

# Strip the net mask off the IP address
:for i from=( [:len $ddnsip] - 1) to=0 do={
:if ( [:pick $ddnsip $i] = "/") do={
:set ddnsip [:pick $ddnsip 0 $i]
}
}

:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }
:if ([ :typeof $ddnsip ] = nil ) do={
:log info ("DDNS: No ip address present on pppoe interface, dammit TM.")
} else={
:if ($ddnsip != $ddnslastip) do={
:log info ("DDNS: Updating $ddnsip $ddnslastip")
:local str "/update?host=$ddnshostname&domain=$ddnsdomain&password=$ddnspass&ip=$ddnsip"
/tool fetch address=$ddnsserv src-path=$str mode=http dst-path=("/disk1/NamecheapDDNS.".$ddnshostname)
:global ddnslastip "$ddnsip"
} else={
# 我把下面這行給註解掉了,每分鐘更新一次會一直跑 log 出來,你要抓問題再把註解去掉
# :log info "DDNS: No update required."
}
}

參考資料