Как стать автором
Обновить

Реализация DynamicDNS на Mikrotik'е, используя TwoDNS.de



В комментариях к статье о самостоятельной реализации Dynamic DNS-сервиса кто-то посетовал на полную монетизацию работы самого известного сервиса – DynDNS. Что напомнило мне о собственном недавнем опыте в решении схожей проблемы, возникшей при смене домашнего маршрутизатора на Mikrotik RB2011UAS-2HnD-IN (OS v.5.21).



Предыстория

История началась несколько лет назад, когда я взвёл Bit-Torrent клиент transmission на своём домашнем NAS (D-Link DNS-323). Разумеется тут же возникло желание “порулить” им удалённо, тем более что особых препятствий не было – динамический реальный IP-адрес имел место. Перебрав имевшиеся в настройках маршрутизатора (тогда это был Draytek Vigor2710n) сервисы я остановился на TwoDNS. Во-первых, сервис бесплатен, во-вторых, не требуется периодически вручную продлять эккаунт – достаточно регулярных обращений от вашего оборудования. Кроме Draytek сервис также поддерживает оборудование Synology. Доступны разные варианты доменных имён. Мне, например, приглянулся доменная запись вида: username.my-wan.de

Пару месяцев назад маршрутизатор начало “лихорадить” – начались самопроизвольные перезагрузки и пропадания беспроводной сети. “Лечить или менять?” – вот в чём был вопрос. “Менять!” – и был куплен Mikrotik RB2011UAS-2HnD-IN (Для наиболее внимательных и въедливых замечу: да, пришлось на входе поставить бриджём ADSL-модем).

Наши дни

За несколько лет я как-то успел привыкнуть к своему аккаунту и менять его не хотелось, однако готовых скриптов для именно этого сервиса мне найти не удалось, поэтому пришлось “взяться за перо”. Самой главной тайной любых сервисов подобного рода является адрес обращения. Некоторая настойчивость в поисках по около-*nix'овым конференциям дала необходимую информацию, а компиляция с имеющимися скриптами для Dynamic DNS сервисов вылилась в следующий скрипт:

Троды плудов

# set DDNS variables: UserName; Password; HostName
:local ddnsuser "ddns_account_username"
:local ddnspass "ddns_account_password"
:local ddnshost "ddns_registered_hostname"
 
# define WAN-interface (copy "name" from "Interfaces" section)
:local webinterface "your_WAN-interface_name"
 
# adjust IP adresses: from DDNS-service & Local (from interface)
:local ddnsip [:resolve $ddnshost]
:local localip [ /ip address get [/ip address find interface=$webinterface ] address ]
:local localip [:pick $localip 0 [:find $localip "/"]]

:if ($localip != $ddnsip) do={
   :log info ("DDNS: ddns IP: $ddnsip.")
   :log info ("DDNS: local IP: $localip.")
   :log info "DDNS: ddns update now!"
   /tool fetch keep-result=no user="$ddnsuser" password="$ddnspass" url="http://update.two-dns.de/nic/update\?hostname=$ddnshost"
   :log info ("DDNS: Check ddns IP...")
   /tool fetch url="http://checkip.two-dns.de/" dst-path="/ddns.checkip.html"
   delay 1
   :local ddnsip [/file get ddns.checkip.html contents]
   :local ddnsip [:pick $ddnsip ([:find $ddnsip ": " -1] + 2) [:find $ddnsip "</body>" -1]]
   :if ($localip = $ddnsip) do={
   :log info ("DDNS: ddns IP: $ddnsip.")
   :log info ("DDNS: Updated Successfully!.")
   } else={
   :log info ("DDNS: ddns IP: $ddnsip.")
   :log info ("DDNS: Updat FAILED!")
   }
} else={
#   :log info "DDNS: NO ddns update needed!"
}

Fin
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.