Использование 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>;