SOFTOLAB Опубликовано 10 ноября, 2013 · Жалоба Т.е. реализации динамического DNS у МикроТика из коробки нет, полез гуглить в поисках реализации, нашел кучу скриптом, но не один из них не работает. Может кто-нибудь видел рабочую реализацию для DynDNS? Пробовал и на пятой линейке, и на шестой, ни там ни там не работает. Возможно DynDNS что то у себя изменил. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SolarW Опубликовано 10 ноября, 2013 · Жалоба А что именно не работает то? Большинство скриптов применяемых для этой цели состоят из трех основных блоков: - определяем свой текущий реальный IP (есть несколько методов) - сравниваем не изменился ли этой IP по сравнению с прошлой проверкой (опционально можно еще проверить в какой IP резолвится наше имя) - в случае если IP изменился (или наше имя резолвится в IP отличный от текущего) шлем апдейт на DynDNS Вот исходя из этого и вопрос - какая часть у вас не работает? Свой текущий айпишник определить не можете или запрос на обновление привязки адреса к имени не отрабатывает? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 10 ноября, 2013 · Жалоба SolarW, какая именно часть не работет не знаю, ибо я на данном скриптовом языке не пишу, могу только сказать что IP на DynDNS не обновляется... Но если я правильно понял логику, то в тех примерах текущий IP не сверяется, он просто получается с того же DynDNS и отправляется ему же get'ом, и так каждую минуту по крону... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
MikroUser Опубликовано 10 ноября, 2013 · Жалоба http://blog.1e3.ru/2013/08/dyndns-mikrotik-6/ полностью рабочий скрипт. сам юзал пока дома, пока статику не взял. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 11 ноября, 2013 · Жалоба MikroUser, не работает... :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
MikroUser Опубликовано 11 ноября, 2013 · Жалоба У кого-то из здешних видел подпись "Если не работает микротик, значит его надо правильно настроить". К тебе видимо она тоже относится) Проверь наличие интернета на роутере, проверь пинг к members.dyndns.org из терминала, проверь пошагово каждую комманду скрипта в том же терминале. Ну и лог смотри, ибо есль пользовать тот скрипт что я скинул - он пишет всю инфу туда. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 22 ноября, 2013 · Жалоба MikroUser, скрипт который вы дали все же заработал с пинками, но он черезвычайно вредный для железа, он пишет 2 файла при выполнении на диск, может быть есть вариант без файлов (ram) или этот как то подправить? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
MikroUser Опубликовано 22 ноября, 2013 · Жалоба Варианта без файлов нету, ибо там парсится страница ответа от dyndns. И для железа он не вредный, вообще не понимаю откуда такие сведенья. В микротике постоянно крутится много потоков и процессов, идет работа с ram и flash памятью. Сей скрипт никаким образом не должен повлиять на работу роутера, к тому же файл который грузится - меньше одного килобайта. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 22 ноября, 2013 · Жалоба MikroUser, у nand же ограниченный цикл перезаписи, а если скрипт каждую минуту будет запускаться... В этом скриптовом языке нельзя данные поместить в переменную и с ними уже в ram'е работать, а не сохранять на диск? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zaebasto Опубликовано 22 ноября, 2013 · Жалоба Зачем запускать скрипт на проверку раз в минуту? У меня на билайне сделано по нетвотчу, плюс один раз в сутки планировщиком( на случай сессии больше месяца - один раз на но-ип оключили учетку потому что не менялся ип 31 день) Год уже пашет, без сбоев. Сам скрипт ниже # Set needed variables :local username "@gmail.com" :local password "********" :local hostname "****.no-ip.org" :global systemname [/system identity get name] :if ($systemname = "Site1" ) do={ :set hostname "*****.no-ip.org" } :global dyndnsForce :global previousIP # print some debug info ## :log info ("UpdateDynDNS: username = $username") ## :log info ("UpdateDynDNS: password = $password") ## :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" # get the previous IP address from saved file dyndns.txt :if (([/file find name=dyndns.txt]) != "") do={ :local result [/file get dyndns.txt contents] # parse the previous IP result :local resultLen [:len $result] :local startLoc [:find $result "\_" -1] :set startLoc ($startLoc + 1) :local endLoc $resultLen :global previousIP [:pick $result $startLoc $endLoc] :log info "UpdateDynDNS: previousIP = $previousIP" } else={ :set previousIP "0.0.0.0" } # 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 ## :log info ("Debug - previousIP: ".$previousIP) ## :log info ("Debug - currentIP: ".$currentIP) ## :log info ("Debug - dyndnsForce: ".$dyndnsForce) # 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="no-ip.com" 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") } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 23 ноября, 2013 · Жалоба Zaebasto, для ситуаций когда ждать сутки обновления ip адреса у поддомена не реально, это самое то. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex8031 Опубликовано 23 ноября, 2013 · Жалоба А заче ждать сутки поставь интервал обмена 30 минут например можно меньше и все будет ГУТ. Вот полностью рабочий скрипт. :local ddnsuser "********" :local ddnspass "********" :local ddnshostname "********.no-ip.org" :local ddnsinterface "l2tp-out1" :global ddnslastip :local str :local ddnsip :local ip :if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" } :local ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ] :if ([ :typeof $ddnsip ] = nil ) do={ :log info ("ServiceDNS: No ip address on $ddnsinterface .") } else={ :for i from=( [:len $ddnsip] - 1) to=0 do={ :if ( [:pick $ddnsip $i] = "/") do={ :set ddnsip [:pick $ddnsip 0 $i]; } } :if ($ddnsip != $ddnslastip) do={ :log info ("ServiceDNS: $ddnshostname -> $ddnsip") :local str "/nic/update?hostname=$ddnshostname&myip=$ddnsip" /tool fetch url="http://dynupdate.no-ip.com/$str" mode=http user=$ddnsuser password=$ddnspass \ dst-path=("/ServiceDNS.".$ddnshostname) :delay 1 :local str [/file find name=ServiceDNS.$ddnshostname]; :log info [/file get $str contents]; /file remove $str :global ddnslastip $ddnsip } } А вот в закладке Schedule впиши вот такую строку /system script run noip и поставь интервал запуска 30 минут и всё шикарно работает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SOFTOLAB Опубликовано 24 ноября, 2013 · Жалоба alex8031, у nand же ограниченный цикл перезаписи, а если скрипт каждую минуту будет запускаться... И первый вариант работает, только вот крайне желательно не писать на флеш память файлы, а то кердык ей будет при интервале в минуту, а больше если ставить, уже крайне не удобно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zaebasto Опубликовано 21 декабря, 2013 · Жалоба перестал работать скрипт, приведенный выше. поправил # Set needed variables :local username "user" :local password "password" :local hostname "host.no-ip.org" :global systemname [/system identity get name] :if ($systemname = "Site1" ) do={ :set hostname "host.no-ip.org" } :global dyndnsForce :global previousIP # print some debug info ## :log info ("UpdateDynDNS: username = $username") ## :log info ("UpdateDynDNS: password = $password") ## :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" # get the previous IP address from saved file dyndns.txt :if (([/file find name=dyndns.txt]) != "") do={ :local result [/file get dyndns.txt contents] # parse the previous IP result :local resultLen [:len $result] :local startLoc [:find $result "\_" -1] :set startLoc ($startLoc + 1) :local endLoc $resultLen :global previousIP [:pick $result $startLoc $endLoc] :log info "UpdateDynDNS: previousIP = $previousIP" } else={ :set previousIP "0.0.0.0" } # 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 # :set previousIP "0.0.0.0" # :log info ("Debug - previousIP: ".$previousIP) # :log info ("Debug - currentIP: ".$currentIP) # :log info ("Debug - dyndnsForce: ".$dyndnsForce) # 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 url="http://www.noip.com/nic/update%3Fhostname%3D$hostname&myip%3D$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") } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...