DynDNs

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
aliant
Сообщения: 170
Зарегистрирован: 23 май 2012, 08:16
Контактная информация:

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 - имя которое дали скрипту выше)


Wisee
Сообщения: 236
Зарегистрирован: 01 май 2012, 18:22

скрипт только на dyndns или подойдёт и к д-линковскому?


kostfill
Сообщения: 1
Зарегистрирован: 07 фев 2014, 18:12

Скрипт для DYNDNS для MikroTik RB2011UAS. Использовал http://www.twodns.de/

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


Аватара пользователя
simpl3x
Модератор
Сообщения: 1532
Зарегистрирован: 19 апр 2012, 14:03

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 сервиса.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

а по мне так это просто попытка саморекламы


Есть интересная задача и бюджет? http://mikrotik.site
plin2s
Сообщения: 417
Зарегистрирован: 26 сен 2012, 16:17
Контактная информация:

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


Аватара пользователя
pubuser
Сообщения: 62
Зарегистрирован: 14 мар 2014, 18:14

Коллеги, сможет кто нибудь помочь с изменением скрипта? Есть скрипт от 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 и меняются они в среднем раз в пару недель.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Не, скрипт менять не стану, проще из загашника вытащить существующий.... Был у меня 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;
}

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


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
pubuser
Сообщения: 62
Зарегистрирован: 14 мар 2014, 18:14

Спасибо, буду тестить! Отпишусь что да как.


Аватара пользователя
pubuser
Сообщения: 62
Зарегистрирован: 14 мар 2014, 18:14

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


Ответить