Поделиться через


Использование DDNS для регистрации имен узлов на собственном DNS-сервере

Azure предоставляет разрешение имен для виртуальных машин и экземпляров ролей. Если разрешение имен превышает возможности, предоставляемые системой доменных имен Azure по умолчанию (DNS), вы можете предоставить собственные DNS-серверы. Это дает возможность настроить свое решение DNS в соответствии с конкретными потребностями. Например, может потребоваться доступ к локальным ресурсам через контроллер домена Active Directory.

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

Клиенты Windows

Клиенты Windows, не присоединенные к домену, пытаются выполнить незащищенные обновления DDNS при загрузке или при изменении IP-адреса. DNS-именем является имя узла и основной DNS-суффикс. Azure оставляет основной DNS-суффикс пустым, но вы можете определить его на виртуальной машине с помощью пользовательского интерфейса или PowerShell.

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

Клиенты Linux

Клиенты Linux обычно не регистрируются на DNS-сервере при запуске. Предполагается, что сервер динамической конфигурации узла (DHCP) выполняет его. У DHCP-серверов Azure нет учетных данных для регистрации записей на DNS-сервере. Для отправки обновлений DDNS можно использовать инструмент nsupdate, который входит в пакет Bind. Так как протокол DDNS стандартизирован, вы можете использовать nsupdate даже если вы не используете Bind на DNS-сервере.

Чтобы создавать и поддерживать записи имени узла на DNS-сервере, можно использовать обработчики, предоставляемые DHCP-клиентом. Во время цикла DHCP клиент выполняет скрипты в /etc/dhcp/dhclient-exit-hooks.d/. С помощью перехватчиков можно зарегистрировать новый IP-адрес.nsupdate Например:

#!/bin/sh
requireddomain=mydomain.local

# only execute on the primary nic
if [ "$interface" != "eth0" ]
then
    return
fi

# When you have a new IP, perform nsupdate
if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] ||
   [ "$reason" = REBIND ] || [ "$reason" = REBOOT ]
then
   host=`hostname`
   nsupdatecmds=/var/tmp/nsupdatecmds
     echo "update delete $host.$requireddomain a" > $nsupdatecmds
     echo "update add $host.$requireddomain 3600 a $new_ip_address" >> $nsupdatecmds
     echo "send" >> $nsupdatecmds

     nsupdate $nsupdatecmds
fi

Для выполнения безопасных обновлений DDNS можно также использовать команду nsupdate. Например, при использовании DNS-сервера привязки создается пара открытого закрытого ключа (http://linux.yyz.us/nsupdate/). DNS-сервер настроен (http://linux.yyz.us/dns/ddns-server.html) с открытой частью ключа, чтобы проверить подпись в запросе. Чтобы предоставить пару nsupdateключей, используйте -k параметр для подписывания запроса на обновление DDNS.

При использовании DNS-сервера Windows можно использовать проверку подлинности Kerberos с -g параметром, nsupdateно он недоступен в версии nsupdateWindows. Чтобы использовать Kerberos, воспользуйтесь kinit для загрузки учетных данных. Например, можно загрузить учетные данные из файла keytab), а затем nsupdate -g забрать учетные данные из кэша.

При необходимости в виртуальные машины можно добавить суффикс поиска DNS. Суффикс DNS указан в /etc/resolv.conf файле. Большинство дистрибутивов Linux управляет содержимым этого файла автоматически, поэтому его обычно нельзя изменить. Суффикс можно переопределить с помощью команды DHCP-клиента supersede . Чтобы переопределить суффикс, добавьте в файл следующую строку /etc/dhcp/dhclient.conf :

supersede domain-name <required-dns-suffix>;