|
|
本帖最后由 Shinglee 于 2025-12-19 16:53 编辑
RouterOS 7.13以后的版本原生支持 json,不需要依赖第三方脚本,闲的无聊自己写了一份脚本分享出来,供大家食用
需要大家注意的是此脚本只能更新DNS记录,不能新增DNS记录。所以用之前,自己先在NameSilo官网手动增加一条你的记录,再用此脚本做DNS更新。
# WAN IPv4 interface
:local wanif "pppoe-out1"
# NameSilo section
:local key "12345"
:local domain "namesilo.com"
:local rrhost "test"
需要修改的地方只有这4个参数,自己按需修改。
上面参数完整域名示例:test.namesilo.com,需要自己将域名拆分成对应的两个参数。
key的申请地址我也贴出来,方便兄弟们自行申请:https://www.namesilo.com/account/api-manager
- # Update NameSilo DNS IPv4 address script
- # RouterOS version >= 7.13 is required
- # ** CONFIGURE SECTION **
- # WAN IPv4 interface
- :local wanif "pppoe-out1"
- # NameSilo section
- :local key "12345"
- :local domain "namesilo.com"
- :local rrhost "test"
- :local version "1"
- :local type "json"
- :local rrttl "3603"
- :local rrid
- :local rrvalue
- #:local dnsListRecords "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=12345&domain=namesilo.com"
- #:local dnsUpdateRecord "https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key=12345&domain=namesilo.com&rrid=1a2b3&rrhost=test&rrvalue=55.55.55.55&rrttl=7207"
- # ** END OF CONFIGURE SECTION **
- :delay 15
- # Get WAN interface IPv4 address
- :local ip4wan
- :set ip4wan [/ip address get [/ip address find interface=$wanif] address]
- :set rrvalue [:pick [:tostr $ip4wan] 0 [:find [:tostr $ip4wan] "/"]]
- :if ([:len $rrvalue] = 0) do={
- :log error "[NameSilo DDNS] Could not get IPv4 for interface $wanif"
- :error "[NameSilo DDNS] Could not get IPv4 for interface $wanif"
- }
- # Get NameSilo DDNS IPv4 address
- :local ip4ddns
- :local geturl "https://www.namesilo.com/api/dnsListRecords?version=$version&type=$type&key=$key&domain=$domain"
- :local getjsondata [/tool fetch mode=https http-method=get url=$geturl as-value output=user]
- :local getjson ($getjsondata->"data")
- :if ([:len $getjson] < 2) do={
- :log error "[NameSilo DDNS] No reply from NameSilo API."
- :error "[NameSilo DDNS] No reply from NameSilo API."
- }
- :local getcode ([:deserialize from=json value=$getjson options=json.no-string-conversion]->"reply"->"code")
- :if ($getcode != 300) do={
- :log error "[NameSilo DDNS] Reply code is $getcode, Please refer to https://www.namesilo.com/api-reference"
- :error "[NameSilo DDNS] Reply code is $getcode, Please refer to https://www.namesilo.com/api-reference"
- }
- :foreach v in=([:deserialize from=json value=$getjson options=json.no-string-conversion]->"reply"->"resource_record") do={
- :if (($v->"host") = $rrhost && ($v->"type") = "A") do={
- :set rrid ($v->"record_id")
- :set ip4ddns ($v->"value")
- }
- }
- :if ([:len $rrid] = 0 || [:len $ip4ddns] = 0) do={
- :log error "[NameSilo DDNS] Please check 'domian' and 'rrhost'"
- :error "[NameSilo DDNS] Please check 'domian' and 'rrhost'"
- }
- # UpdateRecord NameSilo DNS
- :if ($rrvalue != $ip4ddns) do={
- :log info "[NameSilo DDNS] Updating host $rrhost.$domain address."
- :local seturl "https://www.namesilo.com/api/dnsUpdateRecord?version=$version&type=$type&key=$key&domain=$domain&rrid=$rrid&rrhost=$rrhost&rrvalue=$rrvalue&rrttl=$rrttl"
- :local setjsondata [/tool fetch mode=https http-method=get url=$seturl as-value output=user]
- :local setjson ($setjsondata->"data")
- :if ([:len $setjson] > 2) do={
- :local setcode ([:deserialize from=json value=$setjson options=json.no-string-conversion]->"reply"->"code")
- :if ($setcode = 300) do={
- :log info "[NameSilo DDNS] Update success"
- } else={
- :log error "[NameSilo DDNS] Update failed"
- :error "[NameSilo DDNS] Update failed"
- }
- } else={
- :log error "[NameSilo DDNS] Update failed"
- :error "[NameSilo DDNS] Update failed."
- }
- }
复制代码
|
routerosdhcp脚本, routeros命令大全, RouterOS, routeros portal, RouterOS, RouterOS, RouterOS, RouterOS, RouterOS, RouterOS, RouterOS, RouterOS, RouterOSsdwan, routeros dns设置
|