Удаленный доступ при динамическом IP или Настраиваем DynDNS в Linux
Оговорки:
— писалось как пособие для начинающих.
— способ не подходит для «серых» IP.
Удаленно управлять рабочим столом можно с помощью TeamViewer. Однако, например, для управления домашним ПК с Linux на борту, если необходима только правка конфигов или работа с файлами, а не с X-приложениями, проще всего использовать ssh. Но как быть, если IP удаленной машины постоянно меняется? В таком случае поможет сервис DynDNS. Принцип его действия прост: сервис создает для вас определенный домен, а ваш компьютер с помощью этого сервиса присваивает домену текущий IP-адрес.
Регистрация аккаунта и домена
DynDNS предусматривает несколько тарифных планов, однако, мы рассмотрим бесплатный вариант его использования. Для создания доменного имени достаточно зарегистрироваться на сервисе и заполнить небольшую форму на сайте Dyn.com. Итак, переходим по ссылке регистрации и заполняем форму:
Нажимаем Create Account для создания аккаунта. Проверяем почту, переходим по ссылке в письме, вводим свой пароль и завершаем регистрацию, кликнув на Confirm Account:
Аккаунт создан, теперь нам предлагают выбрать тариф из предложенных. По всей странице красочно расписаны платные тарифы, но мы хотим пользоваться сервисом бесплатно, для этого выбираем ссылку «free Dynamic DNS» в самом низу страницы:
Переходим к созданию доменного имени. Заполняем форму, выбрав имя своего поддомена, домен, в котором он будет расположен (я выбрал dyndns.org), а также заполняем текущий IP нашего компьютера, который хотим подключить к сервису:
Нажимаем Add To Cart, подтверждаем свой выбор, нажимая Proceed to checkout:
Домен создан, активируем его работу кнопкой Activate Services:
Теперь мы можем приступить к настройке самого компьютера.
Настройка сервиса
Для того, чтобы сервис знал наш текущий IP, необходимо предоставлять ему такие данные. Настроим на компьютере клиент. Переходим в консоль и устанавливаем ddclient (команда приводится для Ubuntu, для не deb-based дистрибутивов можно скачать ddclient и установить вручную):
sudo apt-get install ddclient
Теперь необходимо настроить клиент:
sudo gedit /etc/ddclient.conf
В конфигурационном файле уже присутствует множество параметров настроек, однако, раскомментируем и настроим только самое необходимое:
daemon=300
syslog=yes
mail=root
mail-failure=root
pid=/var/run/ddclient.pid
ssl=yes
server=members.dyndns.org, \
protocol=dyndns2 \
linux-easy.dyndns.org
Очевидно, что вместо астериксов (звездочек) необходимо указать пароль от своего DynDNS-аккаунта. Сохраняем файл конфигурации и перезапускаем ddclient:
sudo /etc/init.d/ddclient restart
После этого компьютер будет сам посылать текущий IP сервису DynDNS, который будет применять его к нашему домену linux-easy.dyndns.org. Теперь мы можем подключиться к нему по ssh или даже по ftp (предварительно настроив ftp-сервер).
Динамический днс своими руками
Иногда необходимо иметь доступ к своей машине, или машине клиента, которые имеют динамический IP адрес. Для этих целей существует масса сервисов, но бесплатных становится все меньше и меньше. Вот для этого и предназначена данная статья. Если у вас есть под рукой сервер (VDS, VPS или дедик), из которого можно сделать ДНС сервер, то с помощью данной статьи вы сможете сделать для себя такой сервис и пользоваться им как вам удобно и сколько вам хочется. В ходе создания сервиса было перерыто множество страниц в интернете, зачастую противоречащих друг другу. Поэтому, ссылки на исходники указаны не будут. Это статья как бы компиляция всех сведений, нарытых в сети.
Начало работы
Для начала работы по созданию сервиса предполагается, что у вас настроен на сервере BIND, установлены пакет dnsutils и программа Curl. Если обнаружилось вдруг, что у вас этого нет, почитайте, что написано в этой статье. Для простоты сразу договоримся, что оперировать будем доменом dyndns.my и поддоменом с динамическим IP dhost. Полный адрес получится dhost.dyndns.my. В домене должна быть запись A ns с IP вашего сервера. Или не ns, тут кому как нравится, но в этом примере дело обстоит именно так. Ну и для полной ясности, и сервер, и клиент — компы с Ubuntu. Версия уже принципиального значения не имеет.
Он сказал, поехали!
Настройка клиентской части
Раздел идет впереди настройки сервера потому, что ключи авторизации необходимо генерировать на клиенте.
Создадим отдельный каталог в /etc.
Генерируем пару ключей для обмена информацией между клиентом и сервером.
sudo dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST dyndns.my
В результате этой операции в каталоге появляются два файлика — Kdyndns.my.+157+48025.key и Kdyndns.my.+157+48025.private. Из первого файла нам будет необходим только набор символов после «157 ». Именно после пробела начинается тело ключа. Создаем скрипт обновления доменных зон.
#!/bin/bash TTL=3600 SERVER=ns.dyndns.my HOSTNAME=dhost.dyndns.my ZONE=dyndns.my KEYFILE=Kdyndns.my.+157+48025.private new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! cd /etc/ddns nsupdate -v -k $KEYFILE
Сохраняем. Затем даем права на исполнение.
Создаем символическую ссылку в каталог /usr/sbin, чтобы не добавлять в пути скрипт обновления зон. Это не обязательно, будет просто не лишним для того, чтобы из консоли набирать команду без путей.
sudo ln -s /etc/ddns/ddns.sh /usr/sbin/ddns_update
Раз добавили, то в /etc/crontab будем использовать его.
Настройка серверной части
Настройка сервера имен заключается в прописывании домена и установке разрешения на обновления записей A доменных имен с динамическими IP. Переходим в каталог bind.
Вставляем туда текст и тело ключа, о котором упоминалось в предыдущем разделе.
key "dyndns.my" { algorithm hmac-md5; secret "тут тело ключа"; };
Добавляем в файл /etc/bind/named.conf строчку с указанием файла, где определен ключ.
include "/etc/bind/dnskeys.conf";
Следующим шагом необходимо в файл /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
zone "dyndns.my" { type master; allow-update {key dyndns.my;}; file "/etc/bind/pri.dyndns.my"; };
Необходимо будет создать и файл /etc/bind/pri.dyndns.my с различными записями для домена. Он обычный, с минимально необходимым набором записей для функционирования домена, потому и нет необходимости рассматривать его в данной статье. Рестартуем сервер имен для завершения и применения настроек.
sudo service bind9 restart
Теперь в каталог, предназначенный для веб страниц, помещаем очень простой скрипт на php.
Если вы обратитесь к этому файлу через веб, к примеру, http://dyndns.my/ip.php, то, кроме своего IP адреса ничего не увидите. Что нам и требовалось. Клиент, с помощью curl, его и получает и обновляет информацию на сервере.
Вот и все телодвижения по настройке серверной части.
Настройка заключительная
*/15 * * * * root /usr/sbin/ddns_update
Это означает, что раз в 15 минут скрипт будет запускаться. На этом настройка клиентской части закончена. Можно подождать 15 минут и убедиться, что наш хости работает пингом со стороннего сервера. А можно и выполнить команду.
Для чего, собственно, мы и делали симлинк в /usr/sbin. Если вы не получили в ответ выхлоп со словом REFUSED, значит вы все сделали правильно и можете быть счастливы.
Выводы
На выходе мы получили вполне себе работающий сервис динамических имен. Есть, конечно, и существенный недостаток. Используемый ключ подходит для изменения любого поддомена из прописанных. Т.е., он один для всех. Это открывает простор для хулиганства, если кто-то упрет ключ. Поскольку, сервис делался для себя, то особых проблем это не вызовет. Ибо надо быть не совсем здоровым психически, чтоб хулиганить самому у себя. Возможно есть и решение, позволяющее каждый поддомен авторизовать по своему ключу, но целью данной статьи это не ставилось, потому гугля сильно и не терзалась.
Большая просьба, при перепечатке данной статьи, указывать источник, в частности, этот ресурс.