Mikrotik RouterOS용 DNSEver 업데이트 스크립트

No-IP용 스크립트를 버그 좀 잡고 DNSEver용으로 수정했습니다. v1.1 버전에서는 업데이트 결과를 저장 할 것인지 선택 할 수 있습니다.

userIdDNSEver 아이디
authCodeDNSEver 업데이트용 authCode
hosts업데이트할 호스트. 여러개일 때 콤마로 구분합니다. 빈 공백은 넣지 마세요.
gatewayInterface공인 아이피를 받는 인터페이스입니다. 보통 ether1-gateway이므로 그대로 두면됩니다.
secureUpdateDNSEver는 https를 통한 업데이트를 지원하지 않습니다. 예비로 넣어 두었습니다.
saveResultyes면 업데이트 결과를 저장합니다. no는 저장하지 않습니다.

수정하시고 스케줄러에 몇분 간격으로 실행되게끔 넣어주면 됩니다.

ddns-dnsever.txt

# DNSEver update script v1.1
# http://www.mizniz.net/9

:local userId "myUserId";
:local authCode "myAuthCode";
:local hosts "mydomain1.com,mydomain2.com";
:local gatewayInterface "ether1-gateway";
:local secureUpdate no;
:local saveResult yes;

:global previousIpAddress;

:if ([/interface find where name=$gatewayInterface running=yes] != "") do={
# Get the current IP on the interface
    :local currentIpAddress [/ip address get [find interface="$gatewayInterface" disabled=no] address];
# Strip the net mask off the IP address
    :for i from=( [:len $currentIpAddress] - 1) to=0 do={
        :if ( [:pick $currentIpAddress $i] = "/") do={ 
            :set currentIpAddress [:pick $currentIpAddress 0 $i];
        } 
    }

    :if ($currentIpAddress != $previousIpAddress) do={
        :log info "ddns: Current ip address ($currentIpAddress) is not equal to previous ip address, update needed";
        :set previousIpAddress $currentIpAddress;

        :local urlScheme "http";
        :if ($secureUpdate) do={
		    :set urlScheme "https";
        }

        :local hostQueryString "";
        :foreach host in=[:toarray $hosts] do={
            :if ([:len $hostQueryString] > 0) do={
                :set hostQueryString ($hostQueryString . "&");
            }
# %5B is percent encoded hex for '['. %5D is percent encoded hex for ']'.
            :set hostQueryString ($hostQueryString . "host%5B$host%5D=$currentIpAddress");
        }
# The update URL. Note the "\3F" is hex for question mark (?). Required since ? is a special character in commands.
        /tool fetch url="$urlScheme://dyna.dnsever.com/update.php\3F$hostQueryString" user=$userId password=$authCode keep-result=$saveResult;
        :log info "ddns: Hosts updated on DNSEver with ip address ($currentIpAddress).";
    }
} else={
    :log error "ddns: Interface ($gatewayInterface) is invalid or not currently running.";
}