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


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

Azure provides name resolution for virtual machines (VMs) and role instances. Если разрешение имен превышает возможности, предоставляемые системой доменных имен Azure по умолчанию (DNS), вы можете предоставить собственные 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=contoso.com

# 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-сервера Bind создается пара открытого и закрытого ключей (http://linux.yyz.us/nsupdate/). DNS-сервер настроен (http://linux.yyz.us/dns/ddns-server.html) с открытой частью ключа, чтобы проверить подпись в запросе. Чтобы предоставить пару ключей nsupdate, используйте параметр -k, чтобы запрос на обновление DDNS был подписан.

When you use a Windows DNS server, you can use Kerberos authentication with the -g parameter in nsupdate, but it isn't available in the Windows version of nsupdate. Чтобы использовать Kerberos, воспользуйтесь kinit для загрузки учетных данных. For example, you can load credentials from a keytab file), and then nsupdate -g picks up the credentials from the cache.

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

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