Использование 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
но он недоступен в версии nsupdate
Windows. Чтобы использовать Kerberos, воспользуйтесь kinit
для загрузки учетных данных. Например, можно загрузить учетные данные из файла keytab), а затем nsupdate -g
забрать учетные данные из кэша.
При необходимости в виртуальные машины можно добавить суффикс поиска DNS. Суффикс DNS указан в /etc/resolv.conf
файле. Большинство дистрибутивов Linux управляет содержимым этого файла автоматически, поэтому его обычно нельзя изменить. Суффикс можно переопределить с помощью команды DHCP-клиента supersede
. Чтобы переопределить суффикс, добавьте в файл следующую строку /etc/dhcp/dhclient.conf
:
supersede domain-name <required-dns-suffix>;