Gestire record e recordset DNS in DNS di Azure con Azure PowerShell

Questo articolo descrive come gestire i record DNS per la zona DNS usando Azure PowerShell. Per gestire i record DNS è anche possibile usare l'interfaccia della riga di comando multipiattaforma di Azure o il portale di Azure.

Gli esempi contenuti in questo articolo presuppongono che l'utente abbia installato Azure PowerShell, eseguito l'accesso e creato una zona DNS.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Introduzione

Prima di creare record DNS nel servizio DNS di Azure, è necessario comprendere il modo in cui quest'ultimo organizza i record DNS nei set di record DNS.

Nomi dei record

Nel servizio DNS di Azure i record vengono specificati usando nomi relativi. Un nome di dominio completo (FQDN) include il nome della zona, mentre un nome relativo no. Ad esempio, il nome del record relativo www nella zona contoso.com consente di ottenere il nome completo del record www.contoso.com.

Un record vertice è un record DNS alla radice (o vertice) di una zona DNS. Ad esempio, nella zona DNS contoso.com anche un record vertice ha il nome completo contoso.com, chiamato a volte dominio di tipo naked. Per convenzione, per rappresentare record vertice viene usato il nome relativo \'\@\'.

Tipi di record

Ogni record DNS ha un nome e un tipo. I record sono organizzati in tipi diversi in base ai dati che contengono. Il tipo più comune è il record "A", che esegue il mapping di un nome a un indirizzo IPv4. Un altro tipo comune è il record "MX", che esegue il mapping di un nome a un server di posta.

DNS di Azure supporta tutti i tipi di record DNS comuni: A, AAAA, CAA, CNAME, MX, NS, PTR, SOA, SRV e TXT. Si noti che i record SPF vengono rappresentati usando record TXT.

Set di record

In alcuni casi è necessario creare più record DNS con un determinato nome e tipo. Si supponga, ad esempio, che il sito Web "www.contoso.com" sia ospitato in due diversi indirizzi IP. Questo sito Web richiede due diversi record A, uno per ogni indirizzo IP. Ecco un esempio di un set di record:

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

DNS di Azure gestisce tutti i record DNS usando set di record. Un set di record, chiamato anche set di record di risorse è la raccolta di record DNS che hanno lo stesso nome e sono dello stesso tipo in una zona. La maggior parte dei set di record contiene un singolo record. Non sono tuttavia rari esempi come quello precedente, in cui un set di record contiene più di un record.

Si supponga, ad esempio, di aver già creato un record "www" nella zona "contoso.com", che punta all'indirizzo IP "134.170.185.46" (primo record sopra). Per creare il secondo record, è necessario aggiungere il record al set di record esistente invece di creare un altro set di record.

I tipi di record SOA e CNAME sono eccezioni. Gli standard DNS non permettono più record con lo stesso nome per questi tipi, quindi questi set di record possono contenere un solo record.

Per altre informazioni sui record DNS nel servizio DNS di Azure, vedere Zone e record DNS.

Creare un nuovo record DNS

Per creare un nuovo set di record, deve avere un nome e un tipo diversi da quelli esistenti. Se il nuovo record ha lo stesso nome e tipo di un record esistente, sarà necessario aggiungerlo al set di record esistente.

Creare record di tipo "A" in un nuovo set di record

I set di record vengono creati usando il cmdlet New-AzDnsRecordSet. Quando si crea un set di record, è necessario specificare il nome, la zona, la durata (TTL), il tipo di record e i record da creare.

I parametri per l'aggiunta di record a un set di record variano a seconda del tipo del set di record. Quando ad esempio si usa un set di record di tipo A, è necessario specificare l'indirizzo IP usando il parametro -IPv4Address. Diversi tipi di record avranno parametri aggiuntivi.

L'esempio seguente illustra la creazione di un set di record con il nome relativo www nella zona DNS contoso.com. Il nome completo del set di record è www.contoso.com. Il tipo di record è "A" e la durata (TTL) è 3600 secondi. Il set di record contiene un record singolo con indirizzo 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") 

Per creare un set di record nel vertice di una zona, in questo caso "contoso.com", usare il nome del set di record \'\@\', escluse le virgolette:

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

Se è necessario creare un nuovo set di record contenente più record, creare prima una matrice locale e aggiungervi i record, quindi passare la matrice a New-AzDnsRecordSet, come indicato di seguito:

$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

È possibile usare i metadati del set di record per associare dati specifici dell'applicazione a ogni set di record, sotto forma di coppie chiave-valore. L'esempio seguente mostra come creare un set di record con due voci di metadati, dept="finance" ed 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" } 

Il servizio DNS di Azure supporta anche set di record vuoti, che possono fungere da segnaposto per riservare un nome DNS prima della creazione di record DNS. I set di record vuoti sono visibili nel piano di controllo del servizio DNS di Azure, ma vengono visualizzati nei server dei nomi del servizio DNS di Azure. L'esempio seguente mostra come creare un set di record vuoto:

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

Creare record di altri tipi

Dopo aver visto in dettaglio come creare record di tipo A, gli esempi seguenti illustrano come creare record di altri tipi supportati dal servizio DNS di Azure.

Per ogni caso viene illustrato come creare un set di record contenente un record singolo. Gli esempi precedenti relativi ai record di tipo A possono essere adattati per creare set di record di altri tipi che contengono più record, con metadati, o per creare set di record vuoti.

Non esiste un esempio per creare un set di record SOA, poiché i record SOA vengono creati ed eliminati con ogni zona DNS. Il record SOA non può essere creato o eliminato separatamente. Tuttavia, è possibile modificare i record SOA, come illustrato in uno degli esempi successivi.

Creare un set di record AAAA con un singolo record

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

Creare un set di record CAA con un singolo record

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") 

Creare un set di record CNAME con un singolo record

Nota

Gli standard DNS non accettano record CNAME nel dominio radice di una zona (-Name '@') né set di record contenenti più di un record.

Per altre informazioni, vedereRecord CNAME.

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

Creare un set di record MX con un singolo record

In questo esempio viene usato il nome del set di record '\@\' per creare un record MX al vertice della zona, in questo caso "contoso.com".

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

Creare un set di record NS con un singolo record

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

Creare un set di record PTR con un singolo record

In questo caso "my-arpa-zone.com" è la zona ARPA di ricerca inversa che rappresenta l'intervallo IP dell'utente. Ogni record PTR impostato in questa zona corrisponde a un indirizzo IP che rientra nell'intervallo IP. Il nome del record "10" è l'ultimo ottetto dell'indirizzo IP all'interno di questo intervallo di indirizzi rappresentato dal record.

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

Creare un set di record SRV con un singolo record

Quando si crea un set di record SRV, specificare _service e _protocol nel nome del set di record. Non è necessario includere '@' nel nome del set di record durante la creazione di un set di record SRV nel dominio radice della zona.

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") 

Creare un set di record TXT con un singolo record

L'esempio seguente mostra come creare un record TXT. Per altre informazioni sulla lunghezza massima delle stringhe supportata nei record TXT, vedere Record TXT.

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

Ottenere un set di record

Per recuperare un set di record esistente, usare Get-AzDnsRecordSet. Questo cmdlet restituisce un oggetto locale che rappresenta il set di record nel servizio DNS di Azure.

Come per New-AzDnsRecordSet, il nome assegnato al set di record deve essere un nome relativo, ovvero deve escludere il nome della zona. È anche necessario specificare il tipo di record e la zona contenente il set di record.

L'esempio seguente mostra come recuperare un set di record. In questo esempio la zona viene specificata con i parametri -ZoneName e -ResourceGroupName.

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

È invece possibile specificare la zona usando un oggetto zona, passato usando il parametro -Zone.

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

Elencare i set di record

È anche possibile usare Get-AzDnsZone per elencare i set di record in una zona, omettendo uno o entrambi i parametri -Name o -RecordType.

L'esempio seguente restituisce tutti i set di record nella zona:

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

L'esempio seguente illustra come è possibile recuperare tutti i set di record di un determinato tipo, specificando il tipo di record e omettendo il nome del set di record:

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

Per recuperare tutti i set di record con un nome specifico, indipendentemente dai tipi di record, è necessario recuperare tutti i set di record e quindi filtrare i risultati:

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

In tutti gli esempi precedenti è possibile specificare la zona usando i parametri -ZoneName e -ResourceGroupName, come illustrato, oppure specificando un oggetto zona:

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

Aggiungere un record a un set di record esistente

Per aggiungere un record a un set di record esistente, seguire questa procedura in tre passaggi:

  1. Ottenere il set di record esistente.

    $rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
    
  2. Aggiungere il nuovo record al set di record locale.

    Add-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
    
  3. Aggiornare le modifiche in modo che vengano rispecchiate nel servizio DNS di Azure.

    Set-AzDnsRecordSet -RecordSet $rs
    

Set-AzDnsRecordSetsostituisce il set di record esistente nel servizio DNS di Azure, e tutti i record in esso contenuti, con il set di record specificato. I controlli ETag vengono usati per fare in modo che le modifiche simultanee non vengano sovrascritte. È possibile usare l'opzione facoltativa -Overwrite per disattivare tali controlli.

Questa sequenza di operazioni può anche essere inviata tramite pipe, vale a dire che l'oggetto set di record può essere passato usando la pipe anziché come parametro:

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

Gli esempi precedenti mostrano come aggiungere un record "A" a un set di record esistente di tipo A. Una sequenza di operazioni simile permette di aggiungere record a set di record di altri tipi, sostituendo il parametro -Ipv4Address di Add-AzDnsRecordConfig con altri parametri specifici per ogni tipo di record. I parametri per ogni tipo di record sono gli stessi usati per il cmdlet New-AzDnsRecordConfig, come illustrato in altri esempi di tipi di record precedenti.

I set di record di tipo "CNAME" o "SOA" non possono contenere più di un record. Questo vincolo è dato dagli standard DNS, Non è una limitazione del servizio DNS di Azure.

Rimuovere un record da un set di record esistente

Il processo di rimozione di un record da un set di record è simile a quello di aggiunta di un record a un set di record esistente:

  1. Ottenere il set di record esistente.

    $rs = Get-AzDnsRecordSet -Name www –ZoneName "contoso.com" -ResourceGroupName "MyResourceGroup" -RecordType A
    
  2. Rimuovere il record dall'oggetto set di record locale. Il record che viene rimosso deve corrispondere esattamente a un record esistente in tutti i parametri.

    Remove-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "5.6.7.8"
    
  3. Eseguire il commit della modifica nel servizio DNS di Azure. Usare l'opzione facoltativa -Overwrite per disattivare i controlli ETag per le modifiche simultanee.

    Set-AzDnsRecordSet -RecordSet $Rs
    

Se si usa la sequenza di operazioni precedente per rimuovere l'ultimo record da un set di record, il set di record non viene eliminato, ma rimane un set di record vuoto. Per rimuovere del tutto un set di record, vedere Eliminare un set di record.

Come per l'aggiunta di record a un set di record, anche la sequenza di operazioni per rimuovere un set di record può essere inviata tramite pipe:

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

Perché vengano supportati tipi di record diversi, occorre passare i parametri specifici del tipo appropriati a Remove-AzDnsRecordSet. I parametri per ogni tipo di record sono gli stessi usati per il cmdlet New-AzDnsRecordConfig, come illustrato in altri esempi di tipi di record precedenti.

Modificare un set di record esistente

La procedura per la modifica di un set di record esistente è simile a quella per l'aggiunta o la rimozione di record da un set di record:

  1. Recuperare il set di record esistente usando Get-AzDnsRecordSet.
  2. Modificare l'oggetto set di record locale. A tale scopo:
    • Aggiungere o rimuovere record.
    • Modificare i parametri di record esistenti.
    • Modificare i metadati e la durata (TTL) del set di record.
  3. Confermare le modifiche usando il cmdlet Set-AzDnsRecordSet . In questo modo si sostituisce il set di record esistente nel servizio DNS di Azure con il set di record specificato.

Quando si usa il comando Set-AzDnsRecordSet, vengono usati controlli Etag per garantire che le modifiche simultanee non vengano sovrascritte. È possibile usare l'opzione facoltativa -Overwrite per disattivare tali controlli.

Per aggiornare un record in un set di record esistente

In questo esempio viene modificato l'indirizzo IP di un record "A" esistente:

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

Per modificare un record SOA

Non è possibile aggiungere o rimuovere record dal set di record SOA creato automaticamente nel dominio radice della zona, vale a dire -Name "@", incluse le virgolette. È tuttavia possibile modificare i parametri all'interno del record SOA, ad eccezione di "Host", e la durata (TTL) del set di record.

L'esempio seguente mostra come modificare la proprietà Email del record SOA:

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

Per modificare i record NS al vertice della zona

Il set di record NS al vertice della zona viene creato automaticamente con ogni zona DNS. Contiene i nomi dei server dei nomi DNS di Azure assegnati alla zona.

È possibile aggiungere altri server dei nomi a questo set di record NS per supportare domini con co-hosting con più provider DNS. È anche possibile modificare il valore TTL e i metadati per questo set di record. Non è tuttavia possibile rimuovere o modificare i server dei nomi DNS di Azure già popolati.

Questa restrizione si applica solo al set di record NS nel dominio radice della zona. Gli altri set di record NS nella zona (usati per delegare le zone figlio) possono essere modificati senza vincoli.

L'esempio seguente mostra come aggiungere un altro server dei nomi al set di record NS nel dominio radice della zona:

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

Per modificare i metadati del set di record

È possibile usare i metadati del set di record per associare dati specifici dell'applicazione a ogni set di record, sotto forma di coppie chiave-valore.

L'esempio seguente mostra come modificare i metadati di un set di record esistente:

# 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

Eliminare un set di record

È possibile eliminare i set di record usando il cmdlet Remove-AzDnsRecordSet . Eliminando un set di record vengono eliminati anche tutti i record in esso contenuti.

Nota

Non è possibile eliminare i set di record SOA e NS dal dominio radice della zona (-Name '@'). Tali set di record vengono creati automaticamente da DNS di Azure durante la creazione della zona e vengono eliminati automaticamente quando la zona viene eliminata.

L'esempio seguente mostra come eliminare un set di record. In questo esempio il nome del set di record, il tipo di set di record, il nome della zona e il gruppo di risorse vengono specificati singolarmente in modo esplicito.

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

È invece possibile specificare il set di record in base al nome e al tipo e specificare la zona con un oggetto:

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

Una terza soluzione consiste nello specificare lo stesso set di record usando un oggetto set di record:

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

Quando si specifica il set di record da eliminare usando un oggetto set di record, vengono usati i controlli ETag per garantire che le modifiche simultanee non vengano eliminate. È possibile usare l'opzione facoltativa -Overwrite per disattivare tali controlli.

L'oggetto del set di record può essere anche reindirizzato invece che passato come parametro:

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

Richieste di conferma

I cmdlet New-AzDnsRecordSet, Set-AzDnsRecordSet e Remove-AzDnsRecordSet supportano le richieste di conferma.

Ogni cmdlet richiede una conferma se la variabile di preferenza PowerShell $ConfirmPreference ha un valore minore o uguale a Medium. Dato che il valore predefinito per $ConfirmPreference è High, non vengono restituite richieste se si usano le impostazioni predefinite di PowerShell.

Per eseguire l'override dell'impostazione $ConfirmPreference corrente è possibile usare il parametro -Confirm. Se si specifica -Confirm o -Confirm:$True, il cmdlet chiede conferma prima dell'esecuzione. Se si specifica -Confirm:$False, il cmdlet non chiede alcuna conferma.

Per altre informazioni su -Confirm e $ConfirmPreference, vedere About Preference Variables (Informazioni sulle variabili di preferenza).

Passaggi successivi

Altre informazioni su zone e record nel servizio DNS di Azure.
Informazioni su come proteggere zone e record quando si usa il servizio DNS di Azure.
Vedere la documentazione di riferimento di PowerShell nel servizio DNS di Azure.