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

MikroTik: настройка DDNS

Добавлено: 05 дек 2014, 23:20
Kitsum
Доброе время суток.

Начнем с прелюдии.
За благополучный доступ во всемирную паутину в моем жилище отвечает само сборный конструктор с операционной системой RouterOS v6.22 на борту.
И настал тот кризисный день, когда понадобился доступ к устройству из вне (а может и за него), а денег на белый IP тратить не хочется т.к. цель должна сначала оправдать средства.
А на данный момент самый лучший вариант - использовать DDNS.
Для реализации задуманного решено использовать ресурс myddns.ru (и это не реклама, а первый попавшийся под руку).

И так к делу
Сервис myddns.ru предлагает несколько способов общения с ним. Но меня заинтересовал метод использования уникального ключа при обращения к сервису по http
Выглядит это так http://myddns/key/куча_цифр_или_ваш_уникальный_ключ
Но есть ограничения - если в течении трех дней не поступают запросы на обновления IP адреса, то происходит делегирование записи в DNS на сервере. И это может показаться банально смешной вещью, но мой провайдер выдает адреса на 3 часа, при этом если я не ухожу в офлайн, то буду получать один и тоже адрес из пула до скончания веков (ну или +/- день от века).
Следовательно к моменту как произойдет смена IP адреса устройства, я уже потеряю запись в DNS на сервисе myddns и вся эта затея потеряет смысл. ЭТО НУЖНО УЧЕСТЬ!

Нам понадобится всего две вещи:
1. создать скрипт в котором будет реализована вся логика
2. прописать его в планировщик задач RouterOS

Пункт 1 (Скрипт)
Суть его очень проста. При инициализации провести проверку соответствия текущего IP адреса интерфейса смотрящего во внешний и страшный мир и IP соответствующего нашему субдомену на myddns. Плюс к этому производить дополнительный запрос к сервису через каждый N-ый запуск скрипта.
Решено запускать скрипт каждую минуту для проверки условия соответствия IP адресов. И каждый 60-ый запуск скрипта должен вызывать принудительный запрос к DDNS сервису (и не важно, изменился мой адрес или нет), это поможет дополнительно поддерживать стабильность услуги.

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

:local ddnshost "kitsum.myddns.ru";
:local ddnsid "2356273494558114944";
:local wan "ether1";
:local tmpFile "myddns.info";
:local interval 60;
:local ddnsip [:resolve $ddnshost];
:local localip [/ip addres get [/ip address find interface=$wan ] address];
:local localip [:pick $localip 0 [:find $localip "/"]];
:global ddnsinterval;
:if ($localip != $ddnsip) do={
    /tool fetch url="http://myddns.ru/key/$ddnsid" dst-path="$tmpFile"
    delay 2;
    :local fileid [/file find name="$tmpFile"];
    :local fileContent [/file get $fileid contents];
    /file remove $fileid;
    :if ($fileContent = "update") do={
        :log info "DDNS: mismatch DNS records, correction is made. $ddnshost ($ddnsip) changed to $localip";
    }
} else={
    :if ($interval <= $ddnsinterval) do={
        :log info "DDNS: launched additional check"
        :set ddnsinterval 1;
        /tool fetch url="http://myddns.ru/key/$ddnsid" dst-path="$tmpFile"
        delay 2;
        :local fileid [/file find name="$tmpFile"];
        :local fileContent [/file get $fileid contents];
        :log info "DDNS: server response '$fileContent'";
        /file remove $fileid;
    } else={ :set ddnsinterval ([$ddnsinterval] + 1); }
}
Параметры:
1. ddnshost - соответствует Вашему субдомену myddns.ru
2. ddnsid - Ваш уникальный ключ прописанный на сервисе ddns
3. wan - содержит имя интерфейса Вашего MikroTik который смотрит в интернет
4. tmpFile - имя временного файла который будет создаваться в ходе работы скрипта и содержать ответ сервера:
  • noparametrs - не хватает параметров.
    nologinpass - не верный логин или пароль.
    nodomens - не верный домен.Такого домена не существует или не принадлежит Вам.
    update - прошло обновление домена.IP поменялся.
    noupdate - нечего обновлять.IP не поменялся.
5. interval - как часто проводить принудительный запрос (измеряется в интервалах запуска помноженный на частоту запуска скрипта)
Все остальные значения не предназначены для редактирования.

Планировщик задач MikroTik
Консольный вариант расписывать не буду т.к используют winbox.
Проваливаемся в System -> Scheduler и создаем новую задачу с произвольным именем в которую прописываем запуск скрипта с интервалом в 1 минуту и запуск самой задачи при старте OS. Вы можете указать иной интервал, но для меня важно не терять связь с устройством (учитывая, что если IP изменится во время работы, то связь и так будет потеряна на время до 15-20 минут), пока обновятся записи DNS на сервисе.

Команда запуска скрипта выглядит так

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

/system script run myddns
Где myddns - имя исполняемого скрипта

Привожу скин с настройками для наглядности
MikroTik.png
Скрипт конечно нуждается в доработке напильником, и содержит множество элементов которые я обязательно перепишу в будущем. Но для начала сойдет.