Я настроил свою виртуальную машину Azure на применение Azure DNS на уровне NIC, используя IP-адрес, но разрешение записи имени хост-системы завершается неудачей. Этого не происходит при настройке на уровне виртуальной сети на выполняемое Azure разрешение имен. Почему?

На уровне виртуальной сети в Azure вы можете выполнить настройку на службу разрешения имени IDNS, обеспечиваемую Azure, либо можете указать пользовательский список IP-адресов. Эта настройка применяется к виртуальным машинам в виртуальной сети через DHCP. Кроме того, настройки DNS могут быть указаны на уровне vmNIC, что позволяет задать список IP-адресов, которые считаются службой DNS пользователя, даже если вы зададите адрес 168.63.129.16, по которому направляются запросы к IDNS (это важно).

Динамическая служба DNS представляет собой технологию, которая позволяет экземплярам операционной системы регистрировать записи имени хост-системы (А) для того, чтобы сопоставить их имя хоста с их IP-адресом, или при использовании службы DHCP сервер DHCP может зарегистрировать запись от имени клиента, что требуется для операционных систем типа Linix. В случае с Azure инфраструктура Azure всегда регистрирует запись хоста во внутренней службе DNS для экземпляров операционной системы (даже если применяется пользовательская служба DNS). Записи создаются во внутренней зоне в формате < VNet encoded ID>..internal.cloudapp. net. Инфраструктура Azure получает имя хост-системы операционной системы как часть запроса обнаружения DHCP, отсылаемого клиентом во время запуска системы.

Когда настройка для vmNIC DNS осуществляется из виртуальной сети и настраивается на использование IDNS (заданные по умолчанию службы Azure DNS), клиенту отсылается IP-адрес внутренних DNS-служб, 168.63.129.16 и заданный по умолчанию суффикс DNS внутренней зоны, например kwagipstuffqxwwc.bx.internal.cloudapp.net. Эта часть важна, поскольку она разрешает операционной системе клиента впоследствии запрашивать DNS, так как она имеет правильный суффикс для зоны, где регистрируются записи. Когда клиент ищет webappl, операционная система добавляет заданный по умолчанию суффикс и запрашивает DNS так, что ищется на самом деле webappl. kwagipstuffqxwwc.bx.internal.cloudapp.net. Это означает, что разрешение имени работает для записей внутри виртуальной сети.

Когда настройка для vmNIC DNS выполняется на уровне vmNIC, она считается пользовательской службой DNS, даже когда она настроена на значение
168.63.129.16 (IDNS). Таким образом, клиенту отсылается IP сервера DNS, но не отсылается суффикс DNS внутренней зоны. Поскольку инфраструктура Azure регистрирует упомянутую выше запись хоста в вирту-
альные сети, соединенные с внутренней зоной, гостевая операционная система не знает, что это за зона, следовательно, когда она запрашивает DNS, результата не будет, так как она не запрашивает по правильному имени FQDN (имя хост-системы плюс суффикс DNS). Вот почему вы видите разницу в поведении.

Решение состоит в том, чтобы настроить гостевую операционную систему с заданным по умолчанию суффиксом виртуальной сети. Этот суффикс вы можете найти, открыв сайт https://resources.azure.com и перейдя к разделу сетевого адаптера NIC, соединенного с виртуальной сетью, которая запущена. Там вы увидите имя суффикса internalDomainNameSuffix. Запишите это значение.

Теперь вам надо либо вручную указать суффикс DNS внутри гостевой операционной системы, либо настроить его как часть развертывания виртуальной машины с помощью пользовательских расширений. Пример такого подхода можно найти в документе по адресу: https://github.com/Azure/azure-quickstart-templates/tree/master/custom-private-dns. Обратите внимание, этот пример создает всю среду. Ключевая часть — это вложенная папка, которая собирает все значения суффикса. Например, команда для выполнения на Lunix будет такой (согласно https://github.com/Azure/azure-quickstart-templates/blob/master/custom-private-dns/nested/linux-client/setuplinuxclient.sh):

Команды для Windows приведены в статье по адресу: https://github.com/Azure/azure-quickstart-tempIates/ blob/master/custom-private-dns/nested/windows-client/ setupwinclient.psl.

После выполнения всех перечисленных действий локальная виртуальная машина получит правильный суффикс и сможет разрешить записи.