Управление записями и наборами записей DNS в службе DNS Azure с помощью Azure PowerShell

В этой статье описывается, как управлять записями DNS для зоны DNS с помощью Azure PowerShell. Записями DNS также можно управлять с помощью кроссплатформенного интерфейса командной строки Azure или портала Azure.

Для работы с руководством необходимо установить Azure PowerShell, войти в учетную запись и создать зону DNS.

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Введение

Чтобы создавать записи DNS в Azure DNS, нужно понимать, как Azure DNS организует записи DNS в соответствующие наборы записей.

Имена записей

В Azure DNS записи указываются с помощью относительных имен. Полное доменное имя включает в себя имя зоны, а относительное имя — нет. Например, относительное имя записи www в зоне contoso.com дает запись с полным именем www.contoso.com.

Запись вершины — это запись DNS в корне (или вершины) зоны DNS. Например, в зоне DNS contoso.com записи вершины также присвоено полное доменное имя contoso.com (такое имя иногда называется доменом без префикса). Обычно относительное имя \'\@\' представляет записи вершин.

Типы записей

У каждой записи DNS есть имя и тип. Записи разделяются на разные типы в зависимости от данных, которые они содержат. Наиболее распространенный тип — запись A, которая сопоставляет имя с IPv4-адресом. Другой распространенный тип — запись MX, которая сопоставляет имя с почтовым сервером.

Azure DNS поддерживает все общие типы записей DNS: A, AAAA, CAA, CNAME, MX, NS, PTR, SOA, SRV и TXT. Обратите внимание, что записи SPF, представлены в виде записей TXT.

Наборы записей

В некоторых случаях необходимо создать несколько записей DNS с заданным именем и типом. Например, предположим, что веб-сайт www.contoso.com размещается по двум разным IP-адресам. Для этого веб-сайта требуются две разные записи A — по одной для каждого IP-адреса: Вот пример набора записей:

www.contoso.com.        3600    IN    A    134.170.185.46
www.contoso.com.        3600    IN    A    134.170.188.221

Azure DNS управляет всеми записями DNS, используя наборы записей. Набор записей (также называется набором записей ресурсов) — это коллекция записей DNS в зоне, которые имеют одно имя и принадлежат к одному типу. Большинство наборов записей содержат одну запись. Однако встречаются и наборы с несколькими записями (как в примере выше).

Например, предположим, что вы уже создали в зоне contoso.com запись А www, указывающую на IP-адрес 134.170.185.46 (первая запись выше). Чтобы создать вторую запись, не нужно создавать дополнительный набор записей — следует добавить запись в уже имеющийся набор записей.

Наборы записей типа SOA и CNAME являются исключениями. По стандартам DNS несколько записей с одним и тем же именем для этих типов не допускаются, поэтому такие наборы записей могут содержать только одну запись.

Дополнительные сведения о записях DNS в Azure DNS см. в статье Зоны и записи DNS.

Создание записи DNS

Имя и тип создаваемого набора записей должны отличаться от существующих записей. Если вы создаете запись с такими же именем и типом, как у существующей записи, эту новую запись нужно добавить в существующий набор записей.

Создание записей А в новом наборе записей

Для создания наборов записей используется командлет New-AzDnsRecordSet. Создавая набор записей, вам нужно определить для него имя, зону, срок жизни (TTL), тип записей и сами создаваемые записи.

Параметры для добавления записей в набор записей зависят от типа набора записей. Например, при использовании набора записей типа A вам нужно указать IP-адрес с использованием параметра -IPv4Address. Различные типы записей будут иметь дополнительные параметры.

В следующем примере создается набор записей с относительным именем www в зоне DNS contoso.com. Полное доменное имя набора записей — www.contoso.com. Тип записи — A, а срок жизни — 3600 секунд. Каждый такой набор содержит одну запись с IP-адресом 1.2.3.4.

New-AzDnsRecordSet -Name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -IPv4Address "1.2.3.4") 

Чтобы создать набор записей на вершине зоны (в нашем примере — contoso.com), используйте имя записи \@ (без кавычек):

New-AzDnsRecordSet -Name "@" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -IPv4Address "1.2.3.4") 

Чтобы создать набор записей, содержащий несколько записей, сначала создайте локальный массив и добавьте записи, а затем передайте этот массив в New-AzDnsRecordSet:

$aRecords = @()
$aRecords += New-AzDnsRecordConfig -IPv4Address "1.2.3.4"
$aRecords += New-AzDnsRecordConfig -IPv4Address "2.3.4.5"
New-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName MyResourceGroup -Ttl 3600 -RecordType A -DnsRecords $aRecords

Метаданные набора записей используются для связывания данных приложения с каждым набором записей в виде пар "ключ — значение". В следующем примере показано, как создать набор с двумя записями метаданных: dept=finance и environment=production.

New-AzDnsRecordSet -Name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -IPv4Address "1.2.3.4") -Metadata @{ dept="finance"; environment="production" } 

В Azure DNS также поддерживаются пустые наборы записей, которые могут использоваться как заполнители для резервирования имен DNS перед созданием записей DNS. Пустые наборы записей, отображаются на панели управления Azure DNS и серверах имен Azure DNS. В следующем примере создается пустой набор записей.

New-AzDnsRecordSet -Name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords @()

Создание записей других типов

Вы уже узнали, как создавать записи типа А. В следующем примере показано, как создавать записи других типов, поддерживаемые в Azure DNS.

Мы покажем, как создать набор записей каждого типа, который будет содержать одну запись. Создавать наборы записей других типов (пустые наборы записей или содержащие несколько записей с метаданными) можно на основе представленных выше примеров с записями типа A.

Пример создания набора записей типа SOA отсутствует, поскольку SOA создаются и удаляются с каждой зоной DNS. Запись типа SOA нельзя создать или удалить отдельно. Однако SOA можно изменить, как показано в следующем примере.

Создание набора записей типа AAAA с одной записью

New-AzDnsRecordSet -Name "test-aaaa" -RecordType AAAA -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Ipv6Address "2607:f8b0:4009:1803::1005") 

Создание набора записей типа CAA с одной записью

New-AzDnsRecordSet -Name "test-caa" -RecordType CAA -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Caaflags 0 -CaaTag "issue" -CaaValue "ca1.contoso.com") 

Создание набора записей типа CNAME с одной записью

Примечание

Стандарты DNS не допускают использование записей типа CNAME на вершине зоны (-Name '@'), а также использование наборов записей, содержащих более одной записи.

Дополнительные сведения см. в разделе Записи типа CNAME.

New-AzDnsRecordSet -Name "test-cname" -RecordType CNAME -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Cname "www.contoso.com") 

Создание набора записей типа MX с одной записью

Чтобы создать запись MX на вершине зоны (в данном случае — contoso.com), в этом примере мы используем имя набора записей \@.

New-AzDnsRecordSet -Name "@" -RecordType MX -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Exchange "mail.contoso.com" -Preference 5) 

Создание набора записей типа NS с одной записью

New-AzDnsRecordSet -Name "test-ns" -RecordType NS -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Nsdname "ns1.contoso.com") 

Создание набора записей типа PTR с одной записью

В этом случае my-arpa-zone.com представляет зону обратного просмотра ARPA вашего диапазона IP-адресов. Каждая запись PTR в этой зоне соответствует IP-адресу в этом диапазоне. Имя записи 10 — это последний октет IP-адреса в этом диапазоне IP-адресов, представленном данной записью.

New-AzDnsRecordSet -Name 10 -RecordType PTR -ZoneName "my-arpa-zone.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Ptrdname "myservice.contoso.com") 

Создание набора записей типа SRV с одной записью

Создавая набор записей SRV, укажите в его имени _service и _protocol. Нет необходимости включать @ в имя набора записей при создании набора записей SRV на вершине зоны.

New-AzDnsRecordSet -Name "_sip._tls" -RecordType SRV -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Priority 0 -Weight 5 -Port 8080 -Target "sip.contoso.com") 

Создание набора записей типа TXT с одной записью

В следующем примере показано, как создать запись типа ТХТ. Дополнительные сведения о максимальной длине строки, поддерживаемой в записях типа TXT, см. в разделе Записи типа TXT.

New-AzDnsRecordSet -Name "test-txt" -RecordType TXT -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -Ttl 3600 -DnsRecords (New-AzDnsRecordConfig -Value "This is a TXT record") 

Получение набора записей

Чтобы извлечь существующий набор записей, используйте команду Get-AzDnsRecordSet. Этот командлет возвращает локальный объект, представляющий набор записей в Azure DNS.

Как и в случае с командлетом New-AzDnsRecordSet, имя записи должно быть относительным, т. е. оно не должно содержать имя зоны. Также необходимо определить тип записи и зону, содержащую набор записей.

В следующем примере показано, как получить набор записей. В этом примере зона определяется с помощью -ZoneName и -ResourceGroupName параметров.

$rs = Get-AzDnsRecordSet -Name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"

Вместо этого зону можно указать с помощью объекта зоны, переданного с помощью параметра -Zone.

$zone = Get-AzDnsZone -Name "contoso.com" -ResourceGroupName "MyResourceGroup"
$rs = Get-AzDnsRecordSet -Name "www" -RecordType A -Zone $zone

Перечисление наборов записей

Чтобы перечислить наборы записей в зоне, можно использовать Get-AzDnsZone, опустив параметр -Name и (или) -RecordType.

В следующем примере возвращаются все наборы записей в зоне:

$recordsets = Get-AzDnsRecordSet -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"

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

$recordsets = Get-AzDnsRecordSet -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"

Чтобы получить все наборы записей разных типов с нужным именем, необходимо получить все наборы записей, а затем отфильтровать результаты:

$recordsets = Get-AzDnsRecordSet -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" | where {$_.Name.Equals("www")}

Во всех этих примерах зону можно определить с помощью параметров -ZoneName и -ResourceGroupName (как и показано) или с помощью объекта зоны:

$zone = Get-AzDnsZone -Name "contoso.com" -ResourceGroupName "MyResourceGroup"
$recordsets = Get-AzDnsRecordSet -Zone $zone

Добавление записи в существующий набор записей

Чтобы добавить запись в существующий набор записей, сделайте следующее.

  1. Получите существующий набор записей.

    $rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
    
  2. Добавьте новую запись в локальный набор записей.

    Add-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
    
  3. Обновите изменения, чтобы они были применены в службе Azure DNS.

    Set-AzDnsRecordSet -RecordSet $rs
    

С помощью Set-AzDnsRecordSet существующий набор записей в Azure DNS (и все записи, которые он содержит) будет заменен указанным набором записей. Проверки Etag помогают избежать перезаписи параллельных изменений. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite.

Последовательность операций также можно направить в конвейер. Это значит, что объект набора записей передается с помощью конвейера, а не как параметр:

Get-AzDnsRecordSet -Name "www" –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A | Add-AzDnsRecordConfig -Ipv4Address "5.6.7.8" | Set-AzDnsRecordSet

Приведенные выше примеры иллюстрируют добавление записи типа А в существующий набор записей типа A. Аналогичная последовательность операций используется и для добавления записей в наборы записей других типов. Для этого в Add-AzDnsRecordConfig нужно просто заменить параметр -Ipv4Address параметром, соответствующим нужному типу записи. Параметры, используемые для каждого типа записи, соответствуют параметрам в командлете New-AzDnsRecordConfig, как видно в примерах с другими типами записей (см. выше).

Наборы записей типа CNAME или SOA не могут содержать более одной записи. Это ограничение определяется общими стандартами DNS, а не Azure DNS.

Удаление записи из существующего набора записей

Процедура удаления записи из существующего набора записей аналогична процедуре добавления в такой набор.

  1. Получите существующий набор записей.

    $rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
    
  2. Удалите запись из объекта локального набора записей. Удаляемая запись должна точно соответствовать существующей записи по всем параметрам.

    Remove-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
    
  3. Зафиксируйте изменения в службе Azure DNS. Чтобы отменить проверки Etag (проверки перезаписи параллельных изменений), используйте необязательный параметр -Overwrite.

    Set-AzDnsRecordSet -RecordSet $Rs
    

Используя приведенную выше последовательность для удаления последней записи из набора, вы не удалите набор, а оставите его пустым. Как удалить сам набор записей, описано в разделе Удаление набора записей.

Как и при добавлении записей в набор записей, последовательность операций для удаления набора записей также можно объединить в конвейер:

Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A | Remove-AzDnsRecordConfig -Ipv4Address "5.6.7.8" | Set-AzDnsRecordSet

Поддержку разных типов записей можно реализовать, передав в Remove-AzDnsRecordSet соответствующие каждому типу параметры. Параметры, используемые для каждого типа записи, соответствуют параметрам в командлете New-AzDnsRecordConfig, как видно в примерах с другими типами записей (см. выше).

Обновление существующего набора записей

Процедура изменения существующего набора записей аналогична процедуре добавления записей в набор записей и их удаления оттуда.

  1. Извлеките существующий набор записей, используя командлет Get-AzDnsRecordSet.
  2. Чтобы изменить локальный объект набора записей, сделайте следующее:
    • добавьте или удалите записи;
    • измените параметры существующих записей;
    • измените метаданные и время жизни (TTL) для набора записей.
  3. Зафиксируйте изменения с помощью командлета Set-AzDnsRecordSet . Существующий набор записей в Azure DNS будет заменен указанным набором.

При использовании Set-AzDnsRecordSet команды используются проверки Etag , чтобы убедиться, что параллельные изменения не перезаписываются. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite.

Обновление записи в существующем наборе записей

В данном примере мы изменим IP-адрес существующей записи типа A:

$rs = Get-AzDnsRecordSet -name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"
$rs.Records[0].Ipv4Address = "9.8.7.6"
Set-AzDnsRecordSet -RecordSet $rs

Изменение записи типа SOA

В автоматически созданном наборе записей типа SOA на вершине зоны (-Name "@", включая кавычки) добавлять или удалять записи нельзя. Однако вы можете изменить любые параметры в записи типа SOA (за исключением параметра "Узел") и TTL набора записей.

В следующем примере показано, как изменить свойство Email записи типа SOA:

$rs = Get-AzDnsRecordSet -Name "@" -RecordType SOA -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"
$rs.Records[0].Email = "admin.contoso.com"
Set-AzDnsRecordSet -RecordSet $rs

Изменение записи NS на вершине зоны

Набор записей типа NS на вершине зоны автоматически создается вместе с каждой зоной DNS. Он содержит имена DNS-серверов Azure, назначенные зоне.

Вы можете добавить большее количество серверов доменных имен в этот набор записей NS для поддержки совместных доменов с несколькими поставщиками DNS. Вы также можете изменить TTL и метаданные для этого набора записей. Однако вы не можете удалить или изменить предварительно указанные DNS-серверы Azure.

Это ограничение распространяется только на набор записей NS на вершине зоны. Другие наборы записей NS в зоне (используемые для делегирования дочерних зон) можно изменять без ограничений.

В следующем примере показано, как добавить еще один сервер доменных имен в набор записей NS на вершине зоны:

$rs = Get-AzDnsRecordSet -Name "@" -RecordType NS -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"
Add-AzDnsRecordConfig -RecordSet $rs -Nsdname ns1.myotherdnsprovider.com
Set-AzDnsRecordSet -RecordSet $rs

Изменение метаданных набора записей

Метаданные набора записей используются для связывания данных приложения с каждым набором записей в виде пар "ключ — значение".

В примере ниже показано, как изменить метаданные существующего набора записей:

# Get the record set
$rs = Get-AzDnsRecordSet -Name www -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"

# Add 'dept=finance' name-value pair
$rs.Metadata.Add('dept', 'finance') 

# Remove metadata item named 'environment'
$rs.Metadata.Remove('environment')  

# Commit changes
Set-AzDnsRecordSet -RecordSet $rs

Удаление набора записей

Наборы записей можно удалять с помощью командлета Remove-AzDnsRecordSet . При удалении набора записей также удаляются все содержащиеся в нем записи.

Примечание

Удалить наборы записей типа SOA и NS на вершине зоны (-Name '@') нельзя. Эти записи создаются и удаляются в Azure DNS автоматически вместе с зоной.

В примере ниже показано, как удалить набор записей. В этом примере имя и тип набора записей, имя зоны и группа ресурсов указываются явным образом.

Remove-AzDnsRecordSet -Name "www" -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"

Вместо этого набор записей можно указать по имени, типу и зоне (определяется с помощью объекта):

$zone = Get-AzDnsZone -Name "contoso.com" -ResourceGroupName "MyResourceGroup"
Remove-AzDnsRecordSet -Name "www" -RecordType A -Zone $zone

Либо же можно указать сам набор записей, используя объект набора записей:

$rs = Get-AzDnsRecordSet -Name www -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup"
Remove-AzDnsRecordSet -RecordSet $rs

Указывая набор удаляемых записей с помощью объекта, вы можете выполнить проверки Etag, чтобы избежать удаления параллельных изменений. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite.

Объект набора записей также можно направить в конвейер, а не передать в качестве параметра:

Get-AzDnsRecordSet -Name www -RecordType A -ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" | Remove-AzDnsRecordSet

Запросы на подтверждение

Командлеты New-AzDnsRecordSet, Set-AzDnsRecordSet и Remove-AzDnsRecordSet поддерживают запросы на подтверждение.

Каждый командлет запрашивает подтверждение, если привилегированная переменная $ConfirmPreference в PowerShell имеет значение Medium или ниже. Так как по умолчанию переменной $ConfirmPreference присвоено значение High, эти запросы не применяются при использовании стандартных параметров PowerShell.

Текущее значение $ConfirmPreference можно переопределить с помощью параметра -Confirm. Если вы определите -Confirm или -Confirm:$True, командлет будет запрашивать подтверждение перед выполнением. Если вы определите -Confirm:$False, командлет не будет запрашивать подтверждение.

Дополнительные сведения об элементах -Confirm и $ConfirmPreference см. в статье о привилегированных переменных.

Дальнейшие действия

См. дополнительные сведения о зонах и записях в Azure DNS.
Узнайте, как защитить зоны и записи при использовании Azure DNS.
Просмотрите справочную документацию по Azure DNS PowerShell.