Перенапрвление запроса к DDNS сервисам (DynDNS,NO-IP. ) на собсвенный DDNS-серверу
Имеется 30 систем видеонаблюдения удалённых от офиса. Не на каждой точке, где установлена система видеонаблюдения, имеется возможность получить статический IP-адрес. Не все видеорегистраторы могут работать с «Облаком» (Р2Р). На каждом видеорегистраторе есть возможность подключить DDNS сервис типа DynDNS,NO-IP, и т.д.
Также есть собственный DDNS-сервер. На точке, где стоит система видеонаблюдения, на компьютере, установлен клиент который раз в 5 минут обращается к DDNS-серверу и в случаи изменения IP-адреса обновляет свою зону на DDNS-сервере. Недостатки такой схемы очевидны (выключили комп, переустановили систему. ).
Хочу реализовать такую идею: 1. В настройках сети видео регистратора, в поле DNS указываем свой DNS-сервер.
2. На моём DNS-сервере создаём зону «domen».dyn.com или «domen».noip.com с IP-адресом моего DNS-сервера (или сервера который будет отвечать на запросы видеорегистраторов)
3. Скрипт, обработки запроса от видеорегистратора, определяет IP-адрес откуда пришёл запрос (по логину и паролю) и в случаи изменения IP-адреса обновляет зону.
Суть этих телодвижений заключается в том что не нужно платить провайдеру за статический IP, а также постоянно играться с разными DDNS-сервисами.
Вот теперь вопрос: Каким образом вычислить, что отсылает видеорегистратор настоящему (не моему) dyn.com и что должен получить видеорегистратор обратно?
Настройка ddns-client для Ubuntu
В данном руководстве описывается как настроить dynamic dns клиент для синхронизации вашего IP адреса с сервисом DDNS Zoneedit.com- самым дешевым сервисом DDNS (на момент написания абонентская плата составляла 1USD в месяц). Так же плюсом данного сервиса является то, что доменное имя при работе не искажается. А также с сервисом Noip.com.
Предполагаем, что у вас есть доменое имя (yourdomain.com) и аккаунт на Zoneedit(Noip), и что вы настроили записи для вашего домена на сайте Zoneedit.
В данном руководстве описывается настройка ddns-клиента для домена «yourdomain.com»
Установка
Для начала необходимо установить некоторые пакеты из официального репозитория Ubuntu:
sudo apt-get install ddclient ssh libio-socket-ssl-perl
В процессе установки будут заданы некоторые вопросы для предварительной настройки ddclient. такие как:
Выбирете DNS сервис: zoneedit.com
Имя пользователя для логина на сервисе:
Пароль для входа на сервисе:
Доменное имя: yourdomain.com
Интерфейс для работы (wlan0, eth0 и т.д.):
Настройка Zoneedit.com
После установки необходимдо дополнительно сконфигурировать
/etc/ddclient.conf
sudo vim /etc/ddclient.conf
Необходимо добавить записи для «daemon», «ssl» и заменить «use=if, if=web» with «use=web, web=’http://www.zoneedit.com/checkip.html/’, web-skip=’IP Address’» как показано в примере ниже:
# Configuration file for ddclient generated by debconf # # /etc/ddclient.conf daemon=300 pid=/var/run/ddclient.pid ssl=yes protocol=zoneedit1 ## use=if, if=web use=web, web='http://legacy.zoneedit.com/checkip.html/', web-skip='IP Address' ## server=www.zoneedit.com server=dynamic.zoneedit.com login= password='******* tux.yourdomain.com
Теперь открываем
/etc/default/ddclient
sudo vim /etc/default/ddclient
И проверяем, что файл содержит следующие строки:
run_ipup="false" run_daemon="true" daemon_interval="300"
Вы можете выставить интервал обновления IP (daemon_interval) меньше или больше, но он должен совпадать со значением, указанным в
/etc/ddclient.conf
Теперь необходимо перезапустить ddclient для применения изменений конфигурации:
sudo /etc/init.d/ddclient restart
Для того, что бы проверить статус службы ddclient, выполните
sudo /etc/init.d/ddclient status
Если при перезапуске вы не получаете ошибок, значит служба перезапускается корректно.
Корректный перезапуск службы не означает, что синхронизация вашего IP работает и настроена правильно. ddclient записывает свой лог в
/var/log/syslog
, поэтому для отслеживания состояния, необходимо использовать команду tail
tail -f /var/log/syslog
И дождаться очередной попытки обновить IP адрес, при обновлении вы получите вывод аналогичный следующему:
Feb 5 21:16:36 tux ddclient[12034]: SUCCESS: updating yourdomain.com: IP address set to (200: Update succeeded.)
при попытке обновить IP, когда он не менялся:
Feb 5 21:16:36 tux ddclient[12034]: SUCCESS: updating yourdomain.com: IP address set to (201: No records need updating.)
Это значит ddclient настроен и работает корректно. Поздравляем!
Ошибки
1
Если вы получаете сообщения в
/var/log/syslog
Feb 5 21:13:44 tux ddclient[11788]: WARNING: caught SIGTERM; exiting Feb 5 21:13:45 tux ddclient[11894]: FATAL: Error loading the Perl module IO::Socket::SSL needed for SSL connect.
Вам необходимо проверить конфигурационные файлы
/etc/ddclient.conf
/etc/default/ddclient
на соответствие изложенному выше описанию
Обратите внимание, что в
/etc/ddclient.conf
используются одинарные кавычки, возможно в этом Ваша ошибка. Так же проверьте, что все необходимые пакеты установлены.
2
Другая распространенная ситуация, когда в
/var/log/syslog
получаете сообщения подобные следующему:
WARNING: file /var/cache/ddclient/ddclient.cache, line 3: Invalid Value for keyword 'ip' = ''
Для решения данной проблемы необходимо удалить файлы кэша ddclient
sudo rm /var/cache/ddclient/ddclient.cache sudo /etc/init.d/ddclient restart
3
Проблема может возникать при работе с сервисом zoneedit.com, связана она с частым изменением IP адреса больше 3 в течение 10 секунд или больше 5 в течение часа. В логах начнёт появляться ошибка
"FAILED: updating xxx.xxxxx.com: 702: Update failed: Too many updates too quickly, try again later.
Это связано с особенностями предоставления сервиса zoneedit.com. Официальный ответ техподдержки zoneedit.com:
«If you have received a 702 error while attempting to update the zone records, this indicates you are exceeding traffic thresholds set by our system. You are only able to send 3 requests in a 10-second window, no more than 5 requests in an hour. If the threshold is exceeded the zone will be locked from updates for one hour. The zone will only be unlocked once no update requests have been sent for a full hour.»
Что в вольном переводе означает: Если вы получаете ошибку 702 при попытке обновить записи зон, значит вы превысили лимит трафика, установленный нашей системой. Вы можете отправлять 3 запроса в 10-секундном окне не более 5 запросов в час. Если лимит трафика превышается, зона блокируется для обновлений на один час. Зона будет разблокирована только в том случае, если не будет получено запросов на обновление в течение полного часа.
Настройка Noip.com
Различия в настройке, только информация в ddclient.conf:
sudo nano /etc/ddclient.conf
protocol=noip use=if, if=ppp0 server=dynupdate.no-ip.com login=yourlogin password='password' example.yourdomain.com
Скрипт автоматического обновления DDNS для No-IP
Прочитав множество руководств и примеров написания скрипта для работы Mikrotik с сервисом noip.com, так и не удалось найти готового решения.
Что не устраивало в других руководствах, например, здесь:
при написании необходимо прямо в тексте скрипта указывать имя интерфейса, с которого он будет получать внешний IP-адрес, а что если интерфейсов два, три или десять?
В моем случае имеется 2 канала: pppoe-client и ethernet без пароля, но с динамически получаемым адресом…
Также в роутах имеется 2 записи с «dst. address» равным «0.0.0.0/0» с дистанциями «1» и «2» соответственно.

Вначале необходимо перебрать все роуты, найдя в них записи с «dst. address» равным «0.0.0.0/0», после этого провести проверку активности интерфейса ( :if ([get $counter active] = true) ).
Таким образом, мы получим имя активного интерфейса и запоминаем его в локальную переменную «activeInterface».
:local activeInterface; /ip route < :local gwintarray; :local counter; :local intfinder; :foreach counter in=[find dst-address=0.0.0.0/0] do=< :if ([get $counter active] = true) do=< :set $activeInterface [get $counter gateway]; >> >
После этого нам необходимо перебрать все записи таблицы /ip address и найти одну с названием искомого интерфейса.
Полученный адрес будет содержать маску подсети, которую мы сразу же и отсечем.
:local activeAddress; /ip address < :set $activeAddress [get [find interface=$activeInterface] address]; :set $activeAddress [:pick $activeAddress 0 [:find $activeAddress "/"]]; >

После этого пропишем данные для подключения к сервису NO-IP:
:local ddnsuser "your_no-ip_user"; :local ddnspass "your_no-ip_pass"; :local ddnshost "hostname.no-ip.org"; :local str "/nic/update?hostname=$ddnshost&myip=$activeAddress"; /tool fetch url="http://dynupdate.no-ip.com/$str" mode=http user=$ddnsuser password=$ddnspass \ dst-path=("/ServiceDNS.".$ddnshost);
где:
ddnsuser — логин в системе NO-IP
ddnspass — пароль в системе NO-IP
ddnshost — доменное имя, для которого необходимо обновить IP-адрес
И передадим информацию на сервис, скачав файл с ответом:
:local str "/nic/update?hostname=$ddnshost&myip=$activeAddress"; /tool fetch url="http://dynupdate.no-ip.com/$str" mode=http user=$ddnsuser password=$ddnspass \ dst-path=("/ServiceDNS.".$ddnshost);
После этого ожидаем 2 секунды и выводим содержимое файла (статус обновления IP-адреса), после чего удалим его.
:delay 2; :local str [/file find name="ServiceDNS.$ddnshost"]; :log info [/file get $str contents]; /file remove $str
ВНИМАНИЕ. В руководстве используется глобальная переменная «previousIP«, запоминающая предыдущий IP-адрес.
Если адрес глобальной переменной совпадает с вновь полученным, скрипт ничего обновлять на сервисе не будет.
МИНУС такого метода: заходим на сайт noip.com и вручную меняем IP-адрес. А скрипт микротика это никак не отслеживает. Так что в моем примере эта переменная просто исключена.
Полный код скрипта можно взять здесь
# Получаем имя интерфейса # Get interface name :local activeInterface; /ip route < :local gwintarray; :local counter; :local intfinder; :foreach counter in=[find dst-address=0.0.0.0/0] do=< :if ([get $counter active] = true) do=< :set $activeInterface [get $counter gateway]; >> > # Пролучаем IP адрес активного интерфейса # Get IP-address of actived interface :local activeAddress; /ip address < :set $activeAddress [get [find interface=$activeInterface] address]; :set $activeAddress [:pick $activeAddress 0 [:find $activeAddress "/"]]; ># Информация об аккаунте NO-IP # No-IP User account info :local ddnsuser "your_no-ip_user"; :local ddnspass "your_no-ip_pass"; :local ddnshost "hostname.no-ip.org"; # Обновляем данные # Updating data on NO-IP :local str "/nic/update?hostname=$ddnshost&myip=$activeAddress"; /tool fetch url="http://dynupdate.no-ip.com/$str" mode=http user=$ddnsuser password=$ddnspass \ dst-path=("/ServiceDNS.".$ddnshost); # Ждем 2 секунды # Wait 2 seconds :delay 2 # Выводим информацию о статусе обновления и удаляем скачанный файл # Displays information about the status of the update and delete the downloaded file :local str [/file find name="ServiceDNS.$ddnshost"]; :log info [/file get $str contents]; /file remove $str
Ниже информация для новичков
Для добавления скрипта в Mikrotik нужно открыть меню «System» > «Scripts» и добавить новый скрипт, нажав на значок «плюса», и называем скрипт, например, «update-ddns«

Осталось добавить правило запуска скрипта в планировщик. Для этого идем в «System» > «Scheduler» и нажимаем на знакомый нам «плюс».
В имени указываем имя правила в планировщике.
В поле «On Event» указываем имя нашего скрипта — «update-ddns«, выставляем правила запуска и нажимаем «ОК«.
В моем случае запуск скрипта производится каждую 61 секунду.

P.S.: Скрипт тестировался на Mikrotik RB850Gx2 (ядро powerpc) с прошивкой версии 6.33.5.
Также без всяких проблем запускается на Mikrotik RB450G и RB951G-2HnD с прошивкой версии 6.33.5.
DDNS от No-IP.com – инструкция по настройке.
DDNS — Dynamic DNS (динамический DNS).
Очень часто провайдеры Интернет при подключении к сети предоставляют внешний динамический ip-адрес (Stream, Beeline/Corbina и т.п.). Подавляющему большинству пользователей этого достаточно. Однако в некоторых случаях (для сетевых игр, для доступа к своему компьютеру из вне) необходим внешний статический адрес. Эту услугу предоставляют далеко не все провайдеры, а если и предоставляют, то за дополнительную плату. Обойти эту проблему можно с помощью технологии DDNS, позволяющей связать внешний динамический ip-адрес и постоянное доменное имя. Воспользоваться DDNS можно совершенно бесплатно!
Содержание:
- Сравнение бесплатных аккаунтов no-ip и dyndns
- Регистрация на no-ip.com
- Установка No-IP DUC
- Настройка клиента DDNS на маршрутизаторе (на примере D-link DI-804)
- Ссылки по теме
Сравнение бесплатных аккаунтов no-ip и dyndns
| dyndns.com | no-ip.com | |
|---|---|---|
| Количество доменов/хостов | 5 | 5 |
| В случае простоя ваш акаунт будет удален через | 30 дней | 60 дней |
| Настройка TTL | Да (60 сек. / 4 часа) | — |
| Переадресация 80-го порта | — | Да |
| Возможность установить для своего сайта состояние «не доступен» | Да | — |
Переадресация 80-го порта. Будет полезна тем, кто настроил свой веб-сервер на нестандартный порт. Избавляет от необходимости прописывать номер порта в адресной строке браузера.
TTL равное 4 часа. Подойдет тем, у кого адрес меняется относительно редко (компьютер, маршрутизатор работает целый день или дольше). В этом случае скорость доступа будет выше, т.к. будут задействованы механизмы кеширования DNS.
Для себя я выбрал no-ip.com, из-за более длительного срока действия акаунта.
Теперь перейдем к регистрации на сайте.
Регистрация на no-ip.com
Открываем сайт no-ip.com. Для регистрации нажимаем по ссылке Create Account:

Заполняем форму регистрации:

Обязательно требуется заполнить все поля кроме Zip/Postal Code.
В настоящее время выявился глюк, связанный с адресами mail.ru. При попытке зарегистрироваться появляется ошибка — “Enter a valid email address”. Выход — использовать любой другой почтовый адрес. Проверено, что с почтой от Яндекса и уж тем более Gmail регистрация проходит без проблем.
После нажатия на кнопку I Accept, Create my Account на ваш адрес будет отправлено письмо с ссылкой для активации акаунта. После активации вновь заходим на сайт и вводим свой логин / пароль. После входа в акаунт переходим в раздел Add a Host:

и переходим к настройкам хоста:

Hostname — выбираем имя домена третьего уровня. Справа в выпадающем списке выбираем домен второго уровня (какой больше нравится).
Host Type — для привязки к ip-адресу выбираем DNS Host(A). DNS Host(Round Robin) — для привязки доменного имени к нескольким ip-адресам (для балансировки нагрузки, платная функция). DNS Alias(CNAME) — привязка к доменному имени (создание синонима). Port 80 Redirect — перенаправление 80-го порта (в остальном аналогично DNS Host(A)). Web Redirect — привязка к URL.
Mail Options — оставляем без изменений.
В конце концов нажимаем Create Host.
Теперь осталось настроить маршрутизатор или установить клиент DDNS непосредственно на компьютер.
Установка клиента No-IP DUC
Перед началом установки убедитесь, что вы подключены к Интернет.
Запускаем установщик. Все стандартно: выбираем расположение, отмечаем опцию Launch No-IP DUC (для запуска апдейтера сразу после завершения установки).

Переходим к настройке.
В начале необходимо ввести логин и пароль с которыми вы зарегистрировались на сайте no-ip.com. Если логин и пароль правильные, вы должны увидеть список зарегистрированных хостов (см. Hosts).

Для обновления dns необходимо поставить галочки напротив нужных вам хостов (доменов). Процесс обновления начинается сразу после установки галочки (никаких дополнительных кнопок нажимать не надо). Под списком хостов программа выводит ip-адрес, используемый для обновления (на скриншоте выделено красным).
Для доступа к дополнительным настройкам нажмите кнопку Options.
Закладка Standard. Здесь четыре опции:

- Run on startup. Автоматический запуск программы при входе пользователя в систему. Также добавляет иконку программы в трей.
- Use alternate port. Использовать альтернативный порт. Вместо подключения к порту 8245 (по-умолчанию), программа будет использовать порт 80. Эту настройку нужно использовать в случае проблем с подключением к серверу no-ip (например, если провайдер блокирует порт 8245).
- Run as a system service. Запускать как службу. Настройка очень полезна, если в вашей системе несколько пользователей. Запускает клиент no-ip до входа пользователя в систему. Незаменима для серверов. Эту настройку можно комбинировать с Run on startup (если пользователь все же залогиниться, у него будет иконка no-ip в трее).
- Require password to resore window from system tray. Требовать пароль при открытии окна конфигурации. Позволяет защитить настройки клиента паролем. Единственный способ обойти пароль — удалить и установить клиент заново.
Обычным пользователям рекомендую отметить опции Run on startup и Run as system service, чтобы быть уверенными, что клиент всегда загрузиться вместе с системой.
Закладка Connection. Подзакладка Standard. Здесь три опции:

- Override automatic connection detection и Override automatic ip detection. Эти опции полезны пользователям у которых несколько сетевых карт и при этом несколько активных подключений. Например подключены по локальной сети и одновременно по wi-fi. Первая опция позволяет вручную определить интерфейс, через который будет осуществляться подключение к серверу no-ip. Вторая опция позволяет вручную определить интерфейс, через который бдет определяться ваш внешний ip-адрес.
- Третья опция позволяет изменить частоту с которой клиент проверяет изменения внешнего ip-адреса. По-умолчанию этот интервал равен 30 минутам. Менять эту опцию советую только, если ваш ip меняется очень часто (уменьшить интервал до 5-10 минут).
Закладка Connection. Подзакладка Proxy.
Если подключение к интернет осуществляется через proxy-сервер, то здесь вы можете определить параметры подключения к нему.

Обычно proxy-сервера в домашних сетях почти не встречаются, так что для обычных пользователей эта закладка интереса не представляет. То же можно сказать и про закладки Scheduling/Autodial и Other, их описание я опущу.
- — dns в процессе обновления, статус не определен.
- — хост/группа еще не обновлялась. Клиент только что установлен или это новый хост.
- — сервер недоступен. Возможно отсутсвует соединение с интернет, клиент блокируется фаерволом и т.п.
- — обновление прошло успешно.
- — обновление прошло успешно.
- — в панели управления для данного хоста установлена опция Web redirect (привязка не к ip, а к URL).
- — хост/группа не найдены. Обновите список хостов.
- — аккаунт забанен и/или хост отключен.
- — слишком много обновлений сегодня. Клиент слишком часто обновлял dns.
- — неправильный логин/пароль.
Настройка маршрутизатора (D-link DI-804) для работы с DDNS
Настройка очень проста (на других маршрутизаторах с поддержкой DDNS выполняется аналогично).
Переходим в раздел настройки DDNS.

Выставляем опцию DDNS Enabled.
В поле Provider выбираем no-ip.com или dyndns.com.
В поле Host Name вводим имя домена (например example.no-ip.org).
В поле Username / E-mail и в поле Password / Key вводим логин / пароль с которыми зарегистрировались на сайте провайдера DDNS.
Сохраняем настройки. Перезагружаем маршрутизатор. Все.
Ссылки по теме:
- Настройка DDNS от DynDNS.com
- Проверка работоспособности DDNS— инструкция для тех у кого проблемы с настройкой. Пожалуйста, ознакомьтесь прежде чем задавать вопрос )
- Настройка ftp-сервера (IIS) на Windows 7
- Настройка веб-сервера (IIS) на Windows 7
- Настройка удаленного рабочего стола
- Метки Dynamic DNS (DDNS)