Прощай DynDNS, да здравствует no-ip

Apr 16, 2014 21:21 · 821 words · 4 minute read админство

В связи с отключением бесплатных аккаунтов на dyn.com появилась необходимость перейти на что-то похожее. Вкратце, этот сервис предоставлял возможность получить статичное имя на динамический белый IP. Было удобно, т.к. он поддерживался моим модемом, который отвечал за это. Увы, халява кончилась :( Первое, что я придумал - написать скриптик, который бы лез на internet.yandex.ru, получал IP и писал его в файлик, который синхронизировался с каким-нибудь облаком. Всё отлично, но на домашнем компе был установлен только клиент Dropbox'а, а он имеет привычку уведомлять о том, что какой-то файлик изменился, что очень раздражает, т.к. синхронизацию планировалось проводить раз в 10 минут. И тут я вспомнил про noip.com. Это полный аналог DynDNS, но не поддерживается моим модемом, так что клиента надо ставить на сам сервер. Немного покурив мануалы, я понял, что это не так уж и сложно :)

Знакомство с no-ip

dashboard

Для начала зарегистрируемся, выбрав бесплатный аккаунт. На него даётся 3 доменных имени, с обязательным подтверждением их активности раз в месяц. no-ip также предоставляет множество других услуг, но уже платно, например:

  • Выдача SSL-сертификатов (от $20/год);
  • Мониторинг серверов (от $100/год);
  • Управление DNS-записями (от $35/год). Непонятно зачем, т.к. у того же DigitalOcean это бесплатно;

Установка клиента noip.com

Для начала добавим какой-нибудь адрес из дашборда или на странице со списком доменов. После этого всё готово для установки клиента, который будет мониторить смену IP адреса и отправлять запрос на обновление DNS.

Скачаем и распакуем клиент:

$ wget https://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
$ tar xzf noip-duc-linux.tar.gz
$ cd noip-*

Процесс установки сводится к запуску make install и ответом на простые вопросы: какой интерфейс слушать, логин/пароль от no-ip.com и выполнять ли какой-нибудь скрипт при обнаружении смены ip:

$ sudo make install
if [ ! -d /usr/local/bin ]; then mkdir -p /usr/local/bin;fi
if [ ! -d /usr/local/etc ]; then mkdir -p /usr/local/etc;fi
cp noip2 /usr/local/bin/noip2
/usr/local/bin/noip2 -C -c /tmp/no-ip2.conf

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com  <login>
Please enter the password for user '<login>'  **************

Only one host [<login>.noip.me] is registered to this account.
It will be used.
Please enter an update interval:[30]  
Do you wish to run something at successful update?[N] (y/N)  N

New configuration file '/tmp/no-ip2.conf' created.

$ mv /tmp/no-ip2.conf /usr/local/etc/no-ip2.conf

На этапе установки создаётся конфигурационный файл с логином/паролем к noip.com, который скрипт установки сам переместит в /usr/local/etc/no-ip2.conf. Сам же клиент будет лежать в /usr/local/bin/noip2. Теперь можно попробовать запустить службу и проверить на сайте, что всё работает:

$ ./usr/local/bin/noip2

Пока достучаться до сервера по указанному имени скорее всего не получится - обновления DNS занимает какое-то время, можно попробовать через полчаса. А пока продолжим усовершенствовать систему. В текущей конфигурации нужно вручную запускать клиент после перезагрузки. Мне это совсем не нравится, так что напишем скрипт автозапуска для ubuntu.

Настройка службы no-ip

Все скрипты автозапуска под ubuntu и производными (mint) лежат в /etc/init.d, туда же положим и наш:

$ sudo touch /etc/init.d/noip2
$ sudo chmod ugo+x /etc/init.d/noip2
$ sudo update-rc.d noip2 defaults

touch лишь создаёт файл, а само содержимое скрипта можно взять из файла debian.noip2.sh комплекта поставки. Последняя строчка создаст ссылки на все уровни запуска. Единственное, чем не устроил меня текущий вариант, так это отсутствием возможности посмотреть статус службы. Исправим это. В README.FIRST есть документация по использованию этой утилиты:

$ /usr/local/bin/noip2 -C			сконфигурировать клиент
$ /usr/local/bin/noip2			запустить клиент
$ /usr/local/bin/noip2 -S			показать информацию о запущенных клиентах
$ /usr/local/bin/noip2 -D pid		переключить клиент в debug-режим
$ /usr/local/bin/noip2 -K pid		завершить работу клиента

Меня заинтересовала третья строчка. Добавим её вызов в наш скрипт автозапуска:

    status)
    /usr/local/bin/noip2 -S
    ;;

и отредактируем строку помощи:

    echo "Usage: $0 {start|stop|restart|status}"

Вот теперь всё готово :) Можно протестировать командами:

$ service noip2 start
Starting dynamic address update: noip2.
$ service noip2 status
1 noip2 process active.

Process 18887, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set <your IP>
Account <login>
configured for:
	host  <login>.noip.me
Updating every 30 minutes via /dev/eth0 with NAT enabled.
$ service noip2 restart
Restarting dynamic address update: noip2.
$ service noip2 status
1 noip2 process active.

Process 18901, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set <your IP>
Account <login>
configured for:
	host  <login>.noip.me
Updating every 30 minutes via /dev/eth0 with NAT enabled.
$ service noip2 stop
Shutting down dynamic address update:noip2.
$ service noip2 status
No noip2 processes active.

Configuration data from /usr/local/etc/no-ip2.conf.
Account <login>
configured for:
	host  <login>.noip.me
Updating every 30 minutes via /dev/eth0 with NAT enabled.

Аналоги

Если вас не устроил ни dyndns, ни no-ip, то есть ещё ряд аналогов:

Ngrok

Иногда нужно дать клиенту или сотруднику доступ к какой-либо службе на своей машине (или для отладки приложения, которому нужен только белый IP). В этом случае меня не раз спасала замечательная утилита ngrok, которая есть под все популярные платформы, а бесплатных её возможностей более чем достаточно. Более того - даже регистрироваться не обязательно. Просто скачиваем, разархивируем и запускаем:

$ ./ngrok http 8000

Или, если нужен кастомный tcp порт (например, 5432):

$ ./ngrok tcp 5432