Управление записями и наборами записей DNS в службе DNS Azure с помощью Azure PowerShell
В этой статье описывается, как управлять записями DNS для зоны DNS с помощью Azure PowerShell. Записями DNS также можно управлять с помощью кроссплатформенного интерфейса командной строки Azure или портала Azure.
Для работы с руководством необходимо установить Azure PowerShell, войти в учетную запись и создать зону DNS.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Введение
Чтобы создавать записи DNS в Azure DNS, нужно понимать, как Azure DNS организует записи DNS в соответствующие наборы записей.
Имена записей
В Azure DNS записи указываются с помощью относительных имен. Полное доменное имя (FQDN) включает имя зоны, в то время как относительное имя не имеет. Например, относительное имя записи 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 (DNSSEC), таких как подписыватель делегирования (DS) и записи ресурсов tlsA.
Типы записей ресурсов DNSSEC, такие как DNSKEY, RRSIG и NSEC3, добавляются автоматически при подписании зоны с помощью DNSSEC. Эти типы записей ресурсов DNSSEC нельзя создавать или изменять после подписывания зоны.
Наборы записей
В некоторых случаях необходимо создать несколько записей 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
Добавление записи в существующий набор записей
Чтобы добавить запись в существующий набор записей, сделайте следующее.
Получите существующий набор записей.
$rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
Добавьте новую запись в локальный набор записей.
Add-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
Обновите изменения, чтобы они были применены в службе 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.
Удаление записи из существующего набора записей
Процедура удаления записи из существующего набора записей аналогична процедуре добавления в такой набор.
Получите существующий набор записей.
$rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
Удалите запись из объекта локального набора записей. Удаляемая запись должна точно соответствовать существующей записи по всем параметрам.
Remove-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
Зафиксируйте изменения в службе 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
, как видно в примерах с другими типами записей (см. выше).
Обновление существующего набора записей
Процедура изменения существующего набора записей аналогична процедуре добавления записей в набор записей и их удаления оттуда.
- Извлеките существующий набор записей, используя командлет
Get-AzDnsRecordSet
. - Измените локальный объект набора записей следующим образом:
- добавьте или удалите записи;
- измените параметры существующих записей;
- измените метаданные и время жизни (TTL) для набора записей.
- Зафиксируйте изменения с помощью командлета
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.