Creazione di zone DNS con nomi di dominio privati e scenari split-horizon con Azure DNS

Azure DNS è un servizio che permette la risoluzione dei nomi dei domini pubblici e da poco tempo, in versione preview, anche dei domini privati. In questo articolo voglio mostrarvi funzionalità e vantaggi dell’utilizzo di Azure DNS in scenari in cui c’è la necessità di utilizzare nomi di dominio privati (cioè domini la cui estensione non è pubblica, come ad esempio .lan, .local, .lab, ecc.) all’interno delle virtual network.

I vantaggi offerti da Azure DNS sono molteplici ed in particolare:

  • Elimina la necessità di soluzioni DNS personalizzate.
  • Consente di usare tutti i tipi di record DNS comuni. DNS di Azure supporta i record A, AAAA, CNAME, MX, PTR, SOA, SRV e TXT.
  • Gestione automatica dei record dei nomi host. Oltre a ospitare i record DNS personalizzati, Azure mantiene automaticamente i record dei nomi host per le macchine virtuali nelle reti virtuali (VNET).
  • Risoluzione di nomi host tra reti virtuali. Le zone DNS private possono essere condivise tra le reti virtuali.
  • Supporto DNS split-horizon. Azure DNS consente di creare zone con lo stesso nome che risolvono in maniera diversa i nomi host se la richiesta proviene dall’interno di una rete virtuale e dalla rete pubblica (Internet).

Quando collegate una zona DNS privata ad una Azure virtual network, le macchine virtuali vengono automaticamente aggiunte come record host A alla zona DNS. Nel caso in cui le macchine vengano eliminate verranno eliminati anche i record A.

Scenari di utilizzo delle zone private di Azure DNS

  1. Risoluzione dei nomi in una singola rete virtuale

    Nel caso abbiate un’unica rete virtuale di Azure, sarà possibile risolvere i nomi delle VM utilizzando una zona DNS interna e in questo modo la risoluzione sarà privata e non accessibile da Internet. Per le macchine virtuali all’interno della rete virtuale avverrà la registrazione automatica nella zona DNS. Una volta creata una zona privata e viene collegata la rete virtuale come rete virtuale di registrazione (registration virtual network), Azure DNS crea automaticamente due record A nella zona, come illustrato nella figura sotto:

Figura 1: Risoluzione dei nomi in una singola rete virtuale

  1. Risoluzione dei nomi tra diverse reti virtuali

    Nel caso abbiate più reti virtuali, come ad esempio in scenari di hub-spoke, la rete virtuale hub centrale può essere collegata come rete virtuale di registrazione a una zona privata e le reti virtuali spoke possono essere collegate come reti virtuali di risoluzione. Nella figura seguente sono presenti solo due reti virtuali, A e B. La Virtual Network A è designata come rete virtuale di registrazione (registration virtual network) e la Virtual Network B è designata come rete virtuale di risoluzione (resolution virtual network). La finalità per entrambe le reti virtuali è quella di condividere una zona comune.

    Azure DNS registra automaticamente i record DNS per le macchine virtuali (VNETA-VM1 e VNETA-VM2), ma è anche possibile aggiungere manualmente i record DNS nella zona per le macchine virtuali nella Virtual Network B.

    NOTA: I recordi che si autoregistrano non sono visibili dal portale di Azure, mentre saranno visibili quelli creati manualmente da voi

Figura 2: Risoluzione dei nomi tra reti virtuali diverse

  1. Funzionalità split-horizon

    Lo scenario split-horizon è interessante quando si vogliono risolvere i nomi DNS In maniera diversa a seconda di dove si trovi il client (all’interno di Azure o in Internet) per la stessa zona DNS. Si potrebbe ad esempio avere una versione pubblica e una privata di un’applicazione, con caratteristiche o comportamenti diversi, ma si vuole usare lo stesso nome di dominio per entrambe le versioni. È possibile realizzare questo scenario con Azure DNS creando una zona DNS pubblica e una zona privata, con lo stesso nome.

    Nella figura sotto c’è una rete virtuale A con due macchine virtuali (VNETA-VM1 e VNETA-VM2) che hanno entrambe indirizzi IP privati e indirizzi IP pubblici allocati. Si crea una zona DNS pubblica denominata e si registrano gli indirizzi IP pubblici per queste macchine virtuali come record DNS all’interno della zona. Si crea anche una zona DNS privata che ha lo stesso nome della zona pubblica specificando la Virtual Network A come rete virtuale di registrazione (registration virtual network). Azure registra automaticamente le macchine virtuali come record A nella zona privata, che puntano ai relativi indirizzi IP privati.

    Quando un client Internet esegue una query DNS per cercare VNETA-VM1.contoso.com, Azure restituisce il record IP pubblico dalla zona pubblica. Se la stessa query DNS viene eseguita da un’altra macchina virtuale (ad esempio, VNETA-VM2) nella stessa rete virtuale A, Azure restituisce il record IP privato dalla zona privata.

Figura 3: Funzionalità split-horizon

Creazione di una zona DNS privata con Azure PowerShell

Per creare una zona Azure DNS privata è necessario utilizzare Azure PowerShell (New-AzDNSZone) oppure Azure CLI perché al momento non è possibile farlo da portale web. Al momento della creazione della zona dovremo specificare l’elenco di reti virtuali autorizzate a risolvere i record (resolution virtual network). È anche possibile specificare una rete virtuale per cui Azure DNS manterrà i record dei nomi host ogni volta che una macchina virtuale viene creata o eliminata oppure ne viene modificato l’indirizzo IP (registration virtual network).

 

Se si vuole creare una zona solo per la risoluzione dei nomi (senza la creazione automatica dei nomi host), è possibile usare il parametro ResolutionVirtualNetworkId anziché il parametro RegistrationVirtualNetworkId.

Figura 4: Creazione della zona privata in Azure DNS

Nel portale di Azure la zona DNS privata vi mostrerà che non ci sono Name Server e al momento è l’unico modo per capire che si tratta di una zona privata (oltre ovviamente ad usare la cmdlet PowerShell Get-AzDnsZone).

Figura 5: La zona DNS privata è visibile dal portale di Azure

Per testare la registrazione automatica dei record delle VM associate alla virtual network della mia zona DNS privata ho creato una macchina virtuale collegata alla VNET AmsterdamVNET e ho testato la risoluzione del nome. Come potete vedere dalla figura sotto la macchina Amsterdam01 ha ricevuto l’indirizzo IP 10.1.0.4, che si è registrato correttamente nella zona DNS privata ictpower.local

Figura 6: Registrazione del record host A effettuata correttamente nella zona privata

All’interno della zona privata è anche possibile registrare manualmente i record, sia tramite portale che tramite PowerShell o CLI. Ho provveduto quindi a creare un record di prova chiamato www.ictpower.local

Figura 7: Registrazione di un nuovo record DNS nella zona privata

Figura 8: Nella zona privata sono visibili solo i record creati manualmente e non quelli creati automaticamente

Risoluzione dei nomi tra reti virtuali diverse

Supponiamo che abbiate una seconda virtual network e vogliate risolvere i nomi della zona DNS privata che avete creato. Ho creato una VNET chiamata DublinoVNET (in North Europe) e ho creato una VM chiamata Dublino01. Le due VNET DublinoVNET e AmsterdamVNET non sono in peering tra di loro.

Per permettere l’accesso della VNET DublinoVNET come resolution virtual network ho eseguito i comandi PowerShell:

 

Purtroppo, ho ricevuto l’errore mostrato in figura. L’associazione come resolution virtual network non è possibile quando la virtual network contiene già delle macchine virtuali o delle risorse Azure collegate alla rete. Devo dire che questo è attualmente un grosso limite e spero che venga risolto in futuro.

Figura 9: L’associazione come resolution virtual network non è possibile quando la virtual network contiene già delle risorse

Ho provveduto a cancellare la VM creata e tutte le risorse collegate alla VNET (NSG, Nic, ecc.) e riprovando a rilanciare lo script tutto ha funzionato senza problemi. Le VM che saranno collegate alla VNET DublinoVNET saranno d’ora in poi capaci di risolvere i nomi della zona ictpower.local

Figura 10: La seconda VNET ora è capace di risolvere i nomi della zona ictpower.local

Ho ricreato la VM Dublino01 nella VNET DublinoVNET (in North Europe) e sono riuscito a risolvere con successo entrambi i record creati nella zona privata ictpower.local, sia quello dinamico creato dalla VM Amsterdam01 sia quello statico creato prima (www.ictpower.local).

Figura 11: Risoluzione dei record della zona privata anche da una VM in un’altra VNET

Creazione dello scenario split-horizon

Lo scenario split-horizon permette di risolvere i nomi DNS in maniera diversa a seconda di dove si trovi il client (all’interno di Azure o in Internet) per la stessa zona DNS.

Per poterlo implementare sarà sufficiente creare due zone con lo stesso nome (io userò il nome ictpower.it), di cui una pubblica ed una privata. Tenete in considerazione che non è possibile creare due zone con lo stesso nome nello stesso resource group, quindi le creerò in due resource group separati.

Esattamente come ho fatto prima, creo una zona DNS privata ictpower.it e la associo ad una VNET chiamata AmsterdamVNET che si trova nel resource group ICTPower

 

Per creare una zona DNS pubblica ictpower.it devo prima creare un diverso resource group, che ho chiamato ICTPowerLab e poi posso creare la zona DNS

 

Figura 12: Creazione di due zone con lo stesso nome per implementare lo scenario split-horizon

Come si può notare dalla figura 13, le due zone sono visibili dal portale di Azure e sono configurabili con record diversi in modo tale da poter risolvere i record in maniera diversa se la richiesta arriva da un client Internet oppure da una VM presente nella VNET a cui è associata la zona DNS interna.

Figura 13: Le due zone con lo stesso nome sono visibili nel portale di Azure

Per creare due record con lo stesso nome ho utilizzato i seguenti comandi PowerShell, ma ovviamente la creazione può essere fatta in maniera grafica dal portale di Azure.

 

Figura 14: Creazione di due record www nelle due zone DNS, pubblica e privata

Quando un client Internet esegue una query DNS per cercare www.ictpower.it, Azure restituisce il record IP pubblico dalla zona pubblica. Se la stessa query DNS viene eseguita da una macchina virtuale che si trova nella virtual network AmsterdamVNET, Azure restituisce il record IP privato dalla zona privata.

In figura 15 si può vedere a sinistra una query DNS eseguita dal mio computer personale e a destra una query DNS eseguita da un computer chiamato Amsterdam01 collegato alla VNET AmsterdamVNET

Figura 15: La stessa query DNS restituisce risultato diversi a seconda del client che richiede il record DNS

Conclusioni

Le zone DNS private in Azure offrono un servizio DNS affidabile per gestire e risolvere i nomi di dominio in una rete virtuale senza la necessità di aggiungere una soluzione DNS personalizzata. L’uso di nomi di dominio personalizzati consente di personalizzare l’architettura di rete virtuale in base alle esigenze della propria organizzazione e offre la risoluzione dei nomi per le macchine virtuali sia all’interno di una rete virtuale che tra reti virtuali differenti. È anche possibile configurare i nomi di zona con uno scenario di tipo split-horizon, che consente a una zona DNS privata e pubblica di condividere il nome e di risolvere i record in maniera diversa a seconda che il client che effettua la connessione sia in Internet o sia collegato alla virtual network.