Пользователь
0,0
рейтинг
10 августа 2010 в 13:55

Администрирование → Собственный Dynamic DNS

Иногда необходимо прописать DNS для компьютера с динамическим IP адресом. Простым путем для этого являются сервисы по типу dyndns, описанные в недавнем топике Связываем домен и динамический IP. Иногда такой подход работает достаточно плохо.

Напрмер в моей ситуации, провайдер иногда меняет мой публичный IP адрес. Это иногда случается обычно раз в несколько месяцев. Кроме того, мой домашний компьютер перезагружается крайне редко. За это время сервис dyndns, которым я пользовался ранее успевал пару раз прислать мне оповещения о неактивности с целью отключить «неиспользуемый» аккаунт. Перейти на вручную прописываемую DNS зону также не получается, потому что иногда адрес все же меняется. Причем обычно об этом узнаешь когда нужен доступ к домашнему компьютеру здесь и сейчас.

Для реализации описываемого метода понадобится сервер в интернете с DNS сервером bind на нем. А так же доменная зона, субдомен которой мы будем выделять для нашего компьютера. Описывается вариант с подключением Linux-компьютера к Linux-серверу. Для использования других операционных систем понадобится почитать мануалы и модифицировать некоторые шаги.


Итак:
1. Имеем установленный сервер bind9 с доменом server.org
2. Создаем зону client.server.org.zone:

$ORIGIN .
$TTL 10 ; 10 seconds
client.server.net IN SOA ns1.server.net. hostmaster.server.net. (
18 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10 ; minimum (10 seconds)
)
$TTL 3600 ; 1 hour
NS ns1.server.net.
NS ns2.server.net.
MX 10 client.server.net.


здесь сервера ns1.server.net и ns2.server.net — DNS сервера для нашей зоны, client.server.net — адрес нашего домашнего компьютера

3. генерим ключи на клиенте:
client# cd /etc/namedb/keys
client# dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST client.server.net.


4. Создаем фаил с ключем на сервере:
server# cd /var/named/chroot/etc
server# vim keys.conf :


key client.server.net. {
algorithm "HMAC-MD5";
secret "omr5O5so/tZB5XeGuBBf42rrRJRQZB8I9f+uIIxxei8qm7AVgNBprxtcU+FQMzBvU/Y+nyM2xbs/C8kF3eJQUA==";
};


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

Выставляем права доступа к фаилу с ключами:
server# chmod 640 keys.conf
server# chown root:named keys.conf


5. добавляем нашу зону в named.conf:
include "/etc/keys.conf"
zone "client.server.net" {
type master;
file "zones/client.server.net";
allow-update{
key client.server.net;
};
};


Здесь прописан параметр, который позволяет обновлять данные зоны. Вообще, почитав мануалы, можно найти опции этого параметра, позволяющие обновлять только одну запись в зоне для данного ключа. Т.е можно иметь зону с прописанными в ней поддоменами client1, client2, etc. которые будут авторизоваться с ключами key1, key2, etc.

6. Перезапускаем DNS сервер:
server# /etc/init.d/named reload

7. Создаем на клиенте скрипт, который будет обновлять данные зоны:
#!/bin/bash
IFACE="wlan0"
TTL=3600
SERVER=ns1.example.com
HOSTNAME=foo.example.com
ZONE=example.com
KEYFILE=/root/ddns-keys/Kfoo.example.com.+157+12345.private

new_ip_address=`ifconfig $IFACE | grep "inet addr:" | awk '{print $2}' | awk -F ":" '{print $2}'`
new_ip_address=${new_ip_address/ /}

nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF


В начале скрипта описаны соответствующие параметры: интерфейс, имена сервера и зоны, местоположение фаила с ключем.

8. Осталось только настроить автозапуск/автоматическую смену адреса при смене DNS.
Мы это сделаем при помощи скрипта для NetworkManager:
создадим фаил /etc/NetworkManager/dispatcher.d/20-dyndns.sh:
#!/bin/sh

iface=$1
state=$2

if [ "x$state" == "xup" ] ; then
/etc/namedb/ddns-update
elif [ "x$state" == "xdown" ]; then
true
fi


Сделаем его исполняемым и принадлежащим пользователю root.

Запускаем-проверяем-пользуемся.

Upd: Если не работает — проверяем (устанавливаем) на сервере права named на записть в папку в которой лежит фаил client.server.org.zone
named будет создавать там фаил client.server.org.zone.jnl

Использованы следующие материалы:
http://www.freebsdwiki.net/index.php/BIND,_dynamic_DNS
http://blog.jasonantman.com/2010/04/bind9-dynamic-dns/
http://www.oceanwave.com/technical-resources/unix-admin/nsupdate.html
Приведенный ключ взят оттуда же.
stripe @stripe
карма
16,9
рейтинг 0,0

Похожие публикации

Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (21)

  • 0
    $TTL 10; 10 seconds
    По-моему, минимальный TTL в DNS — 60 секунд.
    • 0
      Хм… Ну конкретно эти настройки я копипастил чтобы было где посмотреть, и куда дальше копать. У меня на сервере прописано следующее:

      client.server.com IN SOA server.com. root.server.com. (
      2010060504; serial
      600; refresh (10 minutes)
      600; retry (10 minutes)
      86400; expire (1 day)
      3600; minimum (1 hour)
      )

      Вообще, это по желанию можно менять в разумных пределах.
      • 0
        Не скопировалось все…
        $TTL 3600
        • +1
          хо, час — это дефолтное значение у бинда. Много для динамического домена, я обычно 300 секунд ставлю, и нагрузка на ДНС еще небольшая (если домен популярный) и 5 минут — приемлемое время. Для непопулярных доменов ставлю 60 секунд.
          • 0
            Ну у меня это домашний компьютер, ничего интересного-публичного на нем не висит, IP меняется реже раза в месяц — так что меня такая конфигурация устраивает. Хотя можно и 60 секунд повесить.
            • 0
              вам точно ясен смысл TTL в DNS? Это время жизни кеша (на других ДНС-серверах, куда ляжет в кеш эта запись и на локальных рекурсорах компьютеров). Неважно, как редко меняется ваш ip, TTL означает, как скоро вы узнаете о том, что он сменился, через час или через минуту.
              • 0
                Ну теперь стало немного понятнее. Как я уже писал выше, у меня IP меняется раз в несколько месяцев, так что попасть на часовую задержку сложно, да и не очень страшно, меня это устраивает. Хотя значение в 300 секунд выглядит более оправданным.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Я такие полезные вещи собираю на домашнем компьютере ввиде небольших статей со ссылками на первоисточники либо списка действий что-где-прописывать. Так что по сути статья — копипаста с «домашнего» блога, разбавленная введением и небольшими комментариями где я что-то интересное упомнил.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Спасибо-спасибо.
          Но про блюлюдечко вы преувеличиваете. Скорее представлено наличие альтернативного метода и описано его применение в конкретном случае. Для других случаев это будет только стартовой точной. Для других операционных систем — я вообще затрудняюсь как это будет реализовано.
  • 0
    Помнится около года назад задавался таким вопросом, вот мой вариант решения данной задачи.
    • 0
      Ну, если не вдаваться в детали, метот тот же.
      Да, у вас упомянуто про доступ к папке named, я про это забыл написать, хотя сам имел с этим проблеммы, пока не настроил правильно.
      • 0
        Если честно, я неделю мучился, по сути за неимением полной информации(а особенно не желанию её искать) приходилось идти наобум. В итоге сделал записку для себя чтобы не наступать больше на грабли. К сожалению не додумался тогда выложить на хабр.
        Кстати, больше всего времени было убито именно из-за неверных прав на /var/named/ ^_^
  • +1
    > Напрмер в моей ситуации, провайдер иногда меняет мой публичный IP адрес. Это иногда случается обычно раз в несколько месяцев. Кроме того, мой домашний компьютер перезагружается крайне редко. За это время сервис dyndns, которым я пользовался ранее успевал пару раз прислать мне оповещения о неактивности с целью отключить «неиспользуемый» аккаунт.

    Если это единственная проблема, то пользуйтесь afraid.org
  • 0
    честно говоря удивительно что у вас не ловится изменения ip (или плохо). У меня не одна машина на stream которая меняет ip стабильно 1 раз в сутки.
    может стоит сменить клиент dyndns?
    • 0
      В том то и дело, что у меня машина не меняет IP по нескольку месяцев. (если меняет — все замечательно). dyndns в этом случае начинает волноваться о неактивности клиента, и предлагает удалить учетную запись.

      Но основная мысль в том, что имеется «домашняя» альтернатива dyndns. И кому-то это может оказаться полезно.
  • 0
    Есть гораздо более простой метод, если DNS имя не критично:
    Ставится скрипт, который проверяет внешний адрес, и если он меняется — высылает новый на почту.
    • 0
      ну ведь лень же… а так настроил все один раз, нажимаешь на кнопочку — и ты там.
      • 0
        Ну так…
        И кстати, у того же dyndns есть платный сервис за 15$/год (т.е. в месяц 1,25$ или чуть меньше 40 рублей), где аккаунты могут висеть сколько угодно на одном IP.
        Думаю стоит добавить в пост, есстественно с добавлением «но если у вас есть внешний DNS и жалко 40руб/месяц...» =)
        • 0
          Я сослался в начале на недавний пост про dyndns. И для многих ситуаций он вполне хорош.
          Но здесь я обсуждаю альтернативный подход. Потому что если у вас есть сервер с DNS — какой смысл платить деньги дяде, когда можно использовать свой субдомен.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.