Страница 1 из 3

DynDNs

Добавлено: 06 сен 2012, 08:51
aliant
system -> skripts -> создать

даем имя скрипту пример dynDNS и вставляем это

# Set needed variables
:local username "логин"
:local password "пароль"
:local hostname "имя хоста"

: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.dyndns.org" 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")
}


далее system -> Scheduler -> создать
Name любое имя
Start Date Jan/01/1970
Start Time 00:00:00
Interval 00:30:00 (интервал запуска скрипта)
On Event /system script run dynDNS (dynDNS - имя которое дали скрипту выше)

Re: DynDNs

Добавлено: 08 янв 2013, 11:25
Wisee
скрипт только на dyndns или подойдёт и к д-линковскому?

Re: DynDNs

Добавлено: 07 фев 2014, 18:17
kostfill
Скрипт для DYNDNS для MikroTik RB2011UAS. Использовал http://www.twodns.de/

описание здесь http://philatov.ucoz.ru/forum/2-489-1

Re: DynDNs

Добавлено: 07 фев 2014, 18:44
simpl3x
Wisee писал(а):скрипт только на dyndns или подойдёт и к д-линковскому?

я так понимаю, что во всех этих скриптах разница только в

Код: Выделить всё

/tool fetch user=$username password=$password mode=http address="members.dyndns.org" src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/dyndns.txt"


суть их одна и таже. сначало определяется текущий адрес на интерфейсе. потом определяется адрес, который соответсвует dns записи. если они расходятся, то обновляется запись на сервере через http запрос, если он поддерживается api сервиса.

Re: DynDNs

Добавлено: 07 фев 2014, 18:51
vqd
а по мне так это просто попытка саморекламы

Re: DynDNs

Добавлено: 07 фев 2014, 22:42
plin2s
Как то так получилось, что именно этот скрипт работает у меня уже больше поултора лет и брал я его именно с этого форума.
Думаю эта тема в отдельном разделе пригодится кому-нибудь.

Re: DynDNs

Добавлено: 20 авг 2014, 20:15
pubuser
Коллеги, сможет кто нибудь помочь с изменением скрипта? Есть скрипт от changeip.com, найден на просторах интернета. Хочу его видоизменить чтобы не юзались какие либо сервисы DynDNS а просто при изменении ip у интерфейса на новый, скрипт слал емайл с темой "Mikrotik 123 - New ip" Где 123 - имя микротика, Identity то биш. Само собой чтобы старый ip как то сохранялся например в файле, чтобы скрипт понял, что произошло изменение адреса. changeip.com скурвился и не работает( А на no-ip com предлагают за деньги прикрутить свое имя доменное, а "мусорных" бесплатных поддоменов вроде name.zapto.org уже не дают. Кстати и на dyndns.org та же картина, скурвились и не дают бесплатных доменов(((
 Код скрипта >>

Код: Выделить всё

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ONLY FOR DNS SERVICE [-=CHANGEIP.ORG=-]
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:global ddnsuser "user"
:global ddnspass "password"
:global ddnshost "name.dhcp.biz"
:global ddnsinterface "01_wan"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# END OF USER DEFINED CONFIGURATION
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:global ddnssystem ("mt-" . [/system package get [/system package find name=system] version] )
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface] address ]
:global ddnslastip

:if ([:len [/interface find name=$ddnsinterface]] = 0 ) do={ :log info "DDNS: No interface named $ddnsinterface, please check configuration." }

:if ([ :typeof $ddnslastip ] = "nothing" ) do={ :global ddnslastip 0.0.0.0/0 }

:if ([ :typeof $ddnsip ] = "nothing" ) do={

:log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")

} else={

  :if ($ddnsip != $ddnslastip) do={

    :log warning "DynDNS: IP address $ddnsinterface ($ddnslastip) has been changed."
    :log warning "DynDNS: Interface $ddnsinterface setup new ip address - $ddnsip"
    :log warning "DynDNS: IP addres for $ddnshost has ben updated."
    :log warning "DynDNS: New ip address -  $ddnsip has been setup!"
    :log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ]
    :global ddnslastip $ddnsip

  } else={

  :log warning "DynDNS: ip address not changed, nothing work."
  :log warning "DynDNS: Current ip address: $ddnsip"
  }

}

# END OF SCRIPT
#  :log warning "DynDNS: ip address $ddnsinterface not changed, script offline!"
#  :log warning "DynDNS: Current ip address: $ddnsip"
#


Посмотрите знающие люди, как сюда прикрутить отправку на емайл в случае изменения ip адреса, это будет гораздо надежнее всяких сервисов. Провайдер раздает белые ip по DHCP и меняются они в среднем раз в пару недель.

Re: DynDNs

Добавлено: 20 авг 2014, 21:39
podarok66
Не, скрипт менять не стану, проще из загашника вытащить существующий.... Был у меня cкрипт, менявший в правиле NAT адрес.

Код: Выделить всё

:local oldIP;
:local int "wan1";
:local address [/ip address get [find interface="$int" disabled=no] address];
:local longIP [:len $address];
:local shortIP [:put ($longIP - 3)];
:local newIP [:pick $address 0 $shortIP];
:local ruleOfDSTNAT [/ip firewall nat find comment="NAT rule"];
if (newIP != $oldIP && $ruleOfDSTNAT != "") do={
/ip firewall nat set $ruleOfDSTNAT dst-address=$newIP};

А уж скриптов для отправки данных на почту прошло через форум очень много. Выбираете тот, который нужен Вам. Я пользуюсь гугловской почтой, поэтому отправим адрес туда...:

Код: Выделить всё

{
:global myIP;
:local int "wan1";
:local newaddress [/ip address get [find interface="$int" disabled=no] address];
if ($myIP=$newaddress) do={
# :log info "Goods!"
} else={
:set myIP $newaddress;
:local sysname [/system identity get name];
:local smtpserv [:resolve "smtp.gmail.com"];
:local Eaccount "Адрес_почты@gmail.com";
:local pass "Пароль_почты";
/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv port=587 user=$Eaccount password=$pass start-tls=yes subject=("$sysname change of address (" . [/system clock get date] . ")") body=("New address $sysname $myIP");
:delay 10;
}

Проверять, признаюсь честно, лень. Сами посмотрите. Если что, поправить недолго.

Re: DynDNs

Добавлено: 21 авг 2014, 03:47
pubuser
Спасибо, буду тестить! Отпишусь что да как.

Re: DynDNs

Добавлено: 22 авг 2014, 04:30
pubuser
Вот блин, не удается проверить работу второй части скрипта, когда поменялся ip адрес, а руками на WAN не охота перебивать MAC адреса чтобы трясти провайдера на выдачу новых айпишников.... Что бы придумать, есть у кого нибудь светлые идеи?