воскресенье, 3 июля 2011 г.

(HowTo) Настройка DynDNS для Linux (Ubuntu)

В случае, если ваш провайдер при выходе в интернет выдает вам динамические адреса, но у вас периодически возникает необходимость обращаться к вашему компьютеру из внешнего мира, а платить провайдеру за постоянный белый IP адрес так не хочется (или провайдер просто не предоставляет такую возможность), у вас есть выход - использовать сервис DynDNS.


Вначале,  я хочу рассказать общий принцип работы сервиса DynDNS. Программа-клиент установленная на вашем компьютере сообщает сервису DynDNS о изменении вашего IP адреса, DynDNS сразу-же изменяет запись DNS о вашем  хосте в мастер и слейв серверах DNS (не дожидаясь репликации зоны). Поскольку время кеширования для кешурующих серверов определено всего в 30 минут (выделено жирным ниже), то максимальным временем в течением которого ваш хост получивший новый IP будет недоступен (в худшем случае) будет составлять 30 минут.

$ dig dyndns.info soa

; <<>> DiG 9.7.3 <<>> dyndns.info soa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23222
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;dyndns.info.            IN    SOA

;; ANSWER SECTION:
dyndns.info.        85981    IN    SOA    ns1.dyndns.org. hostmaster.dyndns.org. 2233940346 10800 1800 604800 1800

;; ADDITIONAL SECTION:
ns1.dyndns.org.        3    IN    A    204.13.248.75

;; Query time: 8 msec
;; SERVER: 10.112.0.1#53(10.112.0.1)
;; WHEN: Sun Jul  3 13:26:33 2011
;; MSG SIZE  rcvd: 106




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

Регистрация на сайте DynDNS

Заходим на сайт DynDNS, нажимаем на кнопку Sign In в верхнем правом углу экрана.

В появившейся форме выбираем ссылку "Create an Accaunt"
Заполняем все поля формы, отмечаем чекбокс "I agree...", получаем письмо по эл. почте с просьбой активировать аккаунт, активируем учетную запись нажатием ссылки в письме.
Входим в систему DynDNS используя опять-таки кнопку "Sign In". Выбираем ссылку "Add Host Services" для добавления нашего хоста.
Заполняем форму выбираем домен третьего уровня по своему желанию и второго уровня из выпадающего списка. В этой же форме видим поле IP адрес - введите сюда любой адрес пока, честно говоря вообще смысл этого поля в момент добавления для меня является загадкой, неужели нельзя сделать по умолчанию запись A на любой IP принадлежащий DynDNS.
Добавляйте в корзину и продолжайте далее.
Активируйте сервис.
Если, вы все выполнили, то первая часть завершена - осталось настроить клиента на стороне вашего компьютера для обновления записи о вашем IP адресе.

Настройка программы клиента

Существует несколько клиентов для сервиса DynDNS. Ubuntu по умолчанию предоставляет два для виртуального пакета dyndns-client, - это ez-ipupdate и ddclient. В данной заметке я опишу использование клиента ddclient.

Установите клиент

$ sudo apt-get install ddclient

В конце установки будет запущен скрипт настройки ddclient (который в дальнейшем, вы можете вызвать в любой момент запустив команду dpkg-reconfigure ddclient). Ниже пошаговая настройка.

Все настройки приведены исходя из того, что мой внешний интерфейс ppp0.









Итак, если ваш внешний интерфейс всегда одинаков и выбрали "Да" на предпоследнем шаге, то настройка клиента для вас завершилась и теперь как только будет поднят сетевой интерфейс ppp0 новый IP адрес этого интерфейса будет передан службе DynDNS. Проверить насколько корректно все у вас настроено можно следующим образом:

Получите новый IP адрес, повторно выполнив соединение с вашим провайдером и проверьте отображается ли сейчас адрес в DynDNS используя следующую команду:

$ host ВАШ_ДОМЕН.dyndns.info ns1.dyndns.org

Проверьте, что команда выводит новый IP адрес для вашего компьютера.

Напоследок, что еще нужно знать о ddclient? В Ubuntu у него есть два конфигурационных файла: /etc/default/ddclient и /etc/ddclient.conf. /etc/default/ddclient имеет три опции: нужно ли быть запущенным как демоном, мониторить ли изменение сетвых интерфейсов и с какой периодичностью обновлять имя для сервиса DynDNS (в случае, если запущен как демон).

Вот как выглядит этот файл у меня:

# Configuration for ddclient scripts
# generated from debconf on Вс. июля  3 14:22:58 MSD 2011
#
# /etc/default/ddclient

# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
run_ipup="false"

# Set to "true" if ddclient should run in daemon mode
# If this is changed to true, run_ipup must be set to false.
run_daemon="false"

# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.
daemon_interval="300"

Обратите внимание, что опция run_ipup и run_daemon у меня установлены в false. В обычной настройке это приведет к тому, что ddclient будет работать только в ручном режиме, но у меня это сделано специально - почему см. раздел "Немного тюнинга".

Файл /etc/ddclient.conf содержит информацию о пользователе сервиса, внешнем интерфейсе, домены для обновления.

Немного тюнинга

Вышеописанный способ будет отлично работать в 99% процентов случаев,однако вот какой момент был замечен мной: у меня при подъеме соединения с провайдером интерфейс не всегда имеет название ppp0. Вероятно, это связано с тем, что я еще активно использую VPN соединения и в какой-то момент мое PPPoE (ppp0) соединение становится ppp1.

Как это исправить? В одной из прошлых заметок я рассказывал о механизме скриптов-триггеров обрабатывающих изменение списка сетевых интерфейсов в операционной системе.

Поскольку для моего провайдера у меня есть специальная секция в одном из таких скриптов, то я просто расширил эту секцию следующей записью:

if [ x"$CALL_FILE" = x"provider" ]; then
        /usr/sbin/ddclient -syslog -ip $PPP_LOCAL
fi
Проверить насколько успешно это работает, можно точно также как я уже описывал выше.

Комментариев нет:

Отправить комментарий