forked from dudanov/mikrotik-cloudflare-ddns-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cloudflare6ddns
57 lines (43 loc) · 1.89 KB
/
cloudflare6ddns
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Update Cloudflare DNS IPv6 address script
# RouterOS version >= 6.44 is required
# ** CONFIGURE SECTION **
# IPv6 interface
:local wanif "lan1"
# Cloudflare section
:local apiToken "token"
:local zoneId "zoneId"
:local hostId "hostId"
:local hostName "host.yourdomain.com"
# ** END OF CONFIGURE SECTION **
# Get WAN interface IPv6 address
:global ip6wan
:local ip6new [/ipv6 address get [/ipv6 address find interface=$wanif global] address]
:set ip6new [:pick [:tostr $ip6new] 0 [:find [:tostr $ip6new] "/"]]
:if ([:len $ip6new] = 0) do={
:log error "[Cloudflare DDNS] Could not get IPv6 for interface $wanif"
:error "[Cloudflare DDNS] Could not get IPv6 for interface $wanif"
}
:if ($ip6new != $ip6wan) do={
:log info "[Cloudflare DDNS] IPv6 address for interface $wanif has been changed to $ip6new."
:local url "https://api.cloudflare.com/client/v4/zones/$zoneId/dns_records/$hostId"
:local header "Authorization: Bearer $apiToken, Content-Type: application/json"
:local data "{\"type\":\"AAAA\",\"name\":\"$hostName\",\"content\":\"$ip6new\"}"
# :log info "[Cloudflare DDNS] URL: $url"
# :log info "[Cloudflare DDNS] HEADER: $header"
# :log info "[Cloudflare DDNS] DATA: $data"
:log info "[Cloudflare DDNS] Updating host $hostName address."
:local jsonAnswer [/tool fetch mode=https http-method=put http-header-field=$header http-data=$data url=$url as-value output=user]
:if ([:len $jsonAnswer] > 0) do={
/system script run "JParseFunctions"; global JSONLoads; global JSONUnload
:local result ([$JSONLoads ($jsonAnswer->"data")]->"success")
$JSONUnload
:if ($result = true) do={
:log info "[Cloudflare DDNS] Successfully updated IPv6 address to $ip6new."
:set ip6wan $ip6new
} else={
:log error "[Cloudflare DDNS] Error while updating IPv6 address."
}
} else={
:log error "[Cloudflare DDNS] No answer from Cloudflare API."
}
}