+ Responder ao Tópico



  1. #1

    Padrão Script para DDNS Winco, Funcionando 100%!

    Criei este post pois fiz muitas buscas tanto aqui quanto na internet e não encontrei algo que me ajudasse.
    Retirei o Script abaixo da Wiki-Mikrotik e ajustei apenas o que era necessário. Testei em RBS V6.5 e V5.22.
    Mude o que esta em vermelho para seus dados.


    :global ddnsuser "seu.ddns.com.br"
    :global ddnspass "suasenhadodominio"
    :global theinterface "InterfacedaInternet"
    :global ddnshost seu.ddns.com.br *-aqui não tem aspas*
    :global ipddns [:resolve $ddnshost];
    :global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
    :if ([ :typeof $ipfresh ] = nil ) do={
    :log info ("DynDNS: No ip address on $theinterface .")
    } else={
    :for i from=( [:len $ipfresh] - 1) to=0 do={
    :if ( [:pick $ipfresh $i] = "/") do={
    :set ipfresh [nick $ipfresh 0 $i];
    }
    } *ali onde esta members.ddns.com.br só server para os DDNS da winco. Não se esqueça de apagar os comentários em azul.*

    :if ($ipddns != $ipfresh) do={
    :log info ("DynDNS: IP-DynDNS = $ipddns")
    :log info ("DynDNS: IP-Fresh = $ipfresh")
    :log info "DynDNS: Update IP needed, Sending UPDATE...!"
    :global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
    /tool fetch address=members.ddns.com.br src-path=$str mode=http user=$ddnsuser \
    password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
    :delay 1
    :global str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
    :global ipddns $ipfresh
    :log info "DynDNS: IP updated to $ipfresh!"
    } else={
    :log info "DynDNS: dont need changes";
    }
    }

    ###############################################
    #Este Script é para atualização via Interface ou http - DynDns, No-Ip e ChangeIP
    #Acho sempre mais interessante usa-lo via Http porque normalmente não dá erros. O que estiver em azul apague e em #vermelho mude para sua realidade. - Só Lembrando que retirei da Wiki-Mikrotik.


    :local username "your username"
    :local password "your password"
    :local hostname "subdomain.yourprovider.net"

    #availabe options: "http" or "iface"
    # - http: Consulta servidor externo para descobrir o IP (Usado atrás de NAT)
    # - iface: Nesta opção pega o IP da Interface de Internet (Nem sempre funciona direito)

    :local discoverBy "iface" *Aqui você define se quer por http ou interface - deixe iface ou http*

    # interface used to get ip address from (only if discoverBy = iface)

    :local iface "public-dsl" *Aqui só será usado se você escolher pela interface, se sim coloque o nome da sua interface de internet, se não deixe como esta.*

    # Serviços disponiveis: "dyndns", "noip" and "changeip"
    :local service "changeip" *Aqui você altera para o serviço que estiver utilizando*

    # Numero de dias para forçar mudança de IP
    :local forceUpdate 15

    #************************************************************************************************
    # Daqui em diante não faça mudanças, a menos que saiba.
    #************************************************************************************************

    :local force
    :global lastUpdate
    :local currentIP

    :if ($discoverBy="http") do={
    /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
    :local result [/file get dyndns.checkip.html contents]
    :local resultLen [:len $result]
    :local startLoc [:find $result ": " -1]
    :set startLoc ($startLoc + 2)
    :local endLoc [:find $result "</body>" -1]
    :set currentIP [:pick $result $startLoc $endLoc]
    } else={
    :set currentIP [ /ip address get [find interface=$iface disabled=no] address ]
    :for i from=( [:len $currentIP] - 1) to=0 do={
    :if ( [:pick $currentIP $i] = "/") do={ :set currentIP [:pick $currentIP 0 $i] }
    }
    }

    #get IP from DynDNS for our hostname
    :local resolvedIP [:resolve $hostname]

    # get current date in format mm/DD/YYYY
    :local date [ /system clock get date ]

    # convert to YYYYMMDD
    :local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
    :local month [ :pick $date 0 3 ]; :local day [ :pick $date 4 6 ]; :local year [ :pick $date 7 11 ];
    :local mm ([ :find $months $month -1 ] + 1);
    :if ($mm < 10) do={ :set month ("0" . $mm); } else={ :set month $mm; }
    :set date ($year . $month . $day);

    :if ([ :typeof $lastUpdate ]=[:nothing] || (($date-$lastUpdate) >= $forceUpdate && $forceUpdate > 0)) do={
    :set force true
    }

    :put ("Current IP: $currentIP ($discoverBy), Last update: $lastUpdate")

    # Determine if dyndns update is needed
    :if (($currentIP != $resolvedIP) || ($force = true)) do={

    :if ($service = "dyndns") do={
    /tool fetch user=$username password=$password mode=http address="members.dyndns.org" \
    src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }
    :if ($service = "noip") do={
    /tool fetch user=$username password=$password mode=http address="dynupdate.no-ip.com" \
    src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }
    :if ($service = "changeip") do={
    /tool fetch user=$username password=$password mode=http address="nic.changeip.com" \
    src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }

    :local result [/file get output.txt contents]
    :log info ("dynamic-dns-updater: Service = $service, Hostname = $hostname")
    :log info ("dynamic-dns-updater: CurrentIP = $currentIP, Resolved IP = $resolvedIP")
    :log info ("dynamic-dns-updater: Update result: ".$result)
    /ip dns cache flush
    :set lastUpdate $date
    }




    Última edição por eomena; 29-12-2013 às 12:27.

  2. #2

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    Amigo Eomena... sabe informar se esse script serve para mikrotik versão 3.30?

    Abraço.

  3. #3

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    Citação Postado originalmente por Poemander Ver Post
    Amigo Eomena... sabe informar se esse script serve para mikrotik versão 3.30?

    Abraço.
    Realmente não testei, mas como é só mudar poucos parametros acho que vale apena testar, lembra de deixar o log do MK aberto porque se funcionar já vai a parecer no log.

    Tenho também Script DDNS Winco para Nat que busca a mudança de IP direto via HTTP e não na Interface. Tenho tambem um outro que server para DynDns, No-ip e ChangeIP no mesmo script, este é muito legal, testei todos e funcionaram muito bem. Se precisarem me avise que posto aqui. Abraços!!

  4. #4

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    Poxa, amigo... muito legal, se vc puder disponibilizar esses scripts para q possamos testar, vai ser de grande valia.

    Abraço.

  5. #5

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    Citação Postado originalmente por Poemander Ver Post
    Poxa, amigo... muito legal, se vc puder disponibilizar esses scripts para q possamos testar, vai ser de grande valia.

    Abraço.
    Além deste script coloquei mais um no inicio do post.
    ########################################################################################
    Script para DDNS Winco via HTTP. ***Só serve para DDNS WINCO***

    # Set needed variables
    :local username "your username"
    :local password "your password"
    :local hostname "your username"


    :global dyndnsForce
    :global previousIP


    # print some debug info
    :log info ("UpdateDynDNS: username = $username")
    :log info ("UpdateDynDNS: hostname = $hostname")
    :log info ("UpdateDynDNS: previousIP = $previousIP")


    # get the current IP address from the internet (in case of double-nat)
    /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
    :local result [/file get dyndns.checkip.html contents]


    # parse the current IP result
    :local resultLen [:len $result]
    :local startLoc [:find $result ": " -1]
    :set startLoc ($startLoc + 2)
    :local endLoc [:find $result "</body>" -1]
    :local currentIP [:pick $result $startLoc $endLoc]
    :log info "UpdateDynDNS: currentIP = $currentIP"


    # Remove the # on next line to force an update every single time - useful for debugging, but you could end up getting blacklisted by DynDNS!
    #:set dyndnsForce true


    # Determine if dyndns update is needed
    # more dyndns updater request details available at http://www.dyndns.com/developers/specs/syntax.html
    :if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={
    :set dyndnsForce false
    :set previousIP $currentIP
    /tool fetch user=$username password=$password mode=http address="members.ddns.com.br" src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/dyndns.txt"
    :local result [/file get dyndns.txt contents]
    :log info ("UpdateDynDNS: Dyndns update needed")
    :log info ("UpdateDynDNS: Dyndns Update Result: ".$result)
    :put ("Dyndns Update Result: ".$result)
    } else={
    :log info ("UpdateDynDNS: No dyndns update needed")
    }
    Última edição por eomena; 29-12-2013 às 12:31.

  6. #6

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    40
    Eomena, muito obrigado pela força... vou testar os scripts... agora uma dúvida... o Change-IP não havia deixado de funcionar?

    Abraço.

  7. #7

    Padrão Re: Script para DDNS Winco, Funcionando 100%!

    Citação Postado originalmente por Poemander Ver Post
    40
    Eomena, muito obrigado pela força... vou testar os scripts... agora uma dúvida... o Change-IP não havia deixado de funcionar?

    Abraço.
    Continua funcionando normalmente, tenho ChangeIP e testei com este script e funcionou 100%.