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

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

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

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

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