Назад | Перейти на главную страницу

Настройка DNS в виртуальной сети Azure

У меня есть несколько облачных служб и виртуальная машина с Redis в Azure. Насколько я понимаю, мне нужно создать виртуальную сеть, чтобы облачные службы могли взаимодействовать с Redis на виртуальной машине. Это было легко. Теперь я хотел бы настроить DNS, чтобы не указывать везде IP-адреса.

Все статьи, которые я нахожу, посвящены интеграции DNS-сервера на сайте, но у меня этого нет. Есть ли способ использовать для этого godaddy или dnsimple? Как насчет того, чтобы просто установить простую службу DNS на текущую виртуальную машину?

Я предполагаю, что мой вопрос можно резюмировать так: что мне нужно сделать, чтобы мои облачные сервисы могли связываться с моей виртуальной сетью через DNS-имя?

У меня была такая же проблема, и я считаю, что нашел разумное решение, которое не требует дополнительных машин и требует очень мало работы.

Короче говоря, вы помещаете свой бэкэнд и интерфейс в одну и ту же виртуальную сеть и подсеть, чтобы им был предоставлен один и тот же DNS-сервер. Затем вы настраиваете список поиска DNS-суффиксов на интерфейсных службах, чтобы они использовали DNS-суффикс серверной части при выполнении разрешения имен.

Шаги:

  1. Войдите в одну из ваших внутренних виртуальных машин и выполните ipconfig.
  2. Из вывода получите значение Connection-specific DNS Suffix

  3. Установите значение $dnsSuffix к значению из шага 2 в следующем скрипте.

    $dnsSuffix = 'xxxxxx.yyyyy.uswest.internal.cloudapp.net';
    
    $nics = Get-WmiObject `
      -Class win32_networkadapterconfiguration `
      -Filter 'IPEnabled = true';
    $nics | % {
      $nicSuffixes = $_.DNSDomainSuffixSearchOrder;
      if ($nicSuffixes -notcontains $dnsSuffix) {
        $_.DNSDomainSuffixSearchOrder = $dnsSuffix + $_.DNSDomainSuffixSearchOrder;
      }
    };
    
    Invoke-WmiMethod `
        -Class win32_networkadapterconfiguration `
        -Name setDNSSuffixSearchOrder `
        -ArgumentList @(@($dnsSuffix)),$null;
    
  4. Назовите этот сценарий Set-DnsSuffixSearchList.ps1 и включите его в свой проект, установив для свойств файла значение «Всегда копировать» следующим образом:

  5. Создайте файл с именем startup.cmd который содержит следующее содержимое, а также задает свойство «Копировать всегда»:

    powershell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
    
    # Set the DNS SearchList so that backend hosts are resolvable using their shortened names.
    powershell .\Set-DnsSuffixSearchList.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
    
  6. Добавьте задачу запуска в свой проект облачной службы Azure, отредактировав ServiceDefinition.csdef и добавив следующий XML в WebRole узел:

    <Startup>
      <Task
        commandLine="startup.cmd"
        executionContext="elevated"
        taskType="background">
      </Task>
    </Startup>
    
  7. Готово, если вы уже указали, что ваш сайт и серверная часть должны находиться в одной подсети. Если нет, добавьте это в свой ServiceConfiguration.Cloud.cscfg файл внутри ServiceConfiguration узел:

      <NetworkConfiguration>
        <VirtualNetworkSite name="yourVirtualNetwork" />
        <AddressAssignments>
          <InstanceAddress roleName="yourCloudServiceName">
            <Subnets>
              <Subnet name="yourSubnetName" />
            </Subnets>
          </InstanceAddress>
        </AddressAssignments>
      </NetworkConfiguration>
    

Надеюсь, это поможет любому, кто сталкивается с той же проблемой!

В Azure есть несколько «скрытых» функций виртуальных сетей, которые могут вам помочь. Во-первых, да, вы правы. Если вы создаете виртуальную сеть, разрешение имен не будет работать, если вы не предоставите свой собственный DNS-сервер и не настроите его для разрешения динамических обновлений. Вы не можете использовать общедоступные службы DNS для обеспечения разрешения имен DNS для виртуальной сети Windows Azure.

Итак, вот ваше решение. Вы должны запустить «Clean», потому что вы не можете изменить IP-адрес DNS-сервера, если в виртуальной сети уже запущены виртуальные машины.

  • Создайте обычную виртуальную сеть (и ее подсети)
  • Укажите адрес DNS-сервера. Установите этот адрес как xxx.xxx.xxx.4 (4 всегда будет первым IP-адресом, назначенным в данной подсети!)!
  • В этой чистой виртуальной сети создайте новую виртуальную машину с Windows Server. Эта виртуальная машина получит IP-адрес xxx.xxx.xxx.4
  • Установите и настройте роль DNS-сервера на этом компьютере
  • НЕ УСТАНАВЛИВАЙТЕ СТАТИЧЕСКИЙ IP-АДРЕС ЭТОЙ МАШИНЫ!
  • Создайте остальные ВМ как обычно

На что следует обратить внимание:

  • Никогда не назначайте статические IP-адреса какой-либо виртуальной машине в Windows Azure. Им должны быть назначены IP-адреса DHCP.
  • Будьте осторожны при создании DNS-машины, чтобы получить IP-адрес .4
  • Ваша виртуальная машина DNS сохранит свой IP-адрес (.4) до тех пор, пока вы не удалите его.

Эта архитектура доказала свою пригодность и работает в среде Windows Azure IaaS (также известной как виртуальные машины).

На новом портале вы можете установить свое DNS-имя в общедоступном IP-адресе. Вот фото, которое описывает, как его настроить: