Disponibili gli IPv6 per le Azure Virtual Network (Preview)
È disponibile da pochissimo ed è attualmente ancora in preview la possibilità di assegnare indirizzi IPv6 nelle reti virtuali in Azure.
Poiché si stanno esaurendo gli IPv4 pubblici e c’è un proliferare dei dispositivi IoT e dei dispositivi mobili (smartphone, tablet, ecc.) molti Internet Service Provider stanno già utilizzando gli indirizzi IPv6 per permettere la connettività verso Internet. Per chi volesse approfondire l’argomento rimando alla lettura dell’articolo Saturazione di IPv4
Quindi giocoforza anche il Cloud pubblico sta correndo ai ripari per permettere la transizione da IPv4 a IPv6 e per rimediare all’indisponibilità perpetua di IPv4.
Adesso è possibile ospitare macchine virtuali in Azure con connettività IPv6 e IPv4 sia all’interno di una rete virtuale e da e verso Internet.
In realtà era già possibile ospitare delle macchine virtuali in Azure accessibili da Internet tramite IPv6, ma si poteva fare solo utilizzando Azure Load Balancer. La funzionalità era stata annunciata ad Ignite 2016 https://azure.microsoft.com/en-us/updates/ipv6-for-azure-vms/
Al link https://docs.microsoft.com/it-it/azure/load-balancer/load-balancer-ipv6-overview trovate tutte le indicazioni su come realizzare una connettività IPv6 nativa end-to-end tra client Internet pubblici e macchine virtuali di Azure tramite il servizio di bilanciamento del carico.
Figura 1: Funzionalità IPv6 per Azure Load Balancer.
Il servizio di bilanciamento del carico instrada i pacchetti IPv6 agli indirizzi IPv6 privati delle macchine virtuali tramite NAT (Network Address Translation). Il client Internet IPv6 non può comunicare direttamente con l’indirizzo IPv6 delle macchine virtuali.
D’ora in poi sarà possibile invece avere una distribuzione dual-stack (IPv4 e IPv6) per le reti virtuali in Azure.
I vantaggi dell’utilizzo di IPv6 in una rete virtuale di Azure sono:
- Aiutare ad espandere la copertura di applicazioni e di macchine virtuali ospitate in Azure per via della crescita dei dispositivi mobili e Internet delle cose (IoT).
- Le macchine virtuali con il dual-stack IPv4 e IPv6 offrono maggiore flessibilità. Ogni macchina può essere raggiunta da Internet sia attraverso l’IPv4 che attraverso l’IPv6.
- La connettività IPv6 a Internet viene stabilita solo quando l’utente lo richiede in modo esplicito.
Figura 2: Diagramma del Dual-stack (Ipv4 e IPv6) in Azure Virtual Network
Il supporto ad IPv6 da parte delle reti virtuali in Azure permette anche di:
- Definire il proprio IPv6 address space, in modo tale da poterlo integrare con il proprio spazio di indirizzi on-premises (se qualcuno già utilizza l’IPv6 nella propria rete aziendale)
- Proteggere l’accesso alle risorse attraverso i Network Security Groups
- Utilizzare le User-Defined Route per reindirizzare il traffico IPv6
- Utilizzare Azure DNS per registrare i record AAAA
- Aggiungere facilmente gli indirizzi IPv6 anche alle Virtual Network che adesso utilizzano solo IPv4
Attualmente, in fase di Preview, non è però possibile utilizzare il portale per creare delle reti virtuali che usino il Dual-Stack (IPv4 + IPv6). Utilizzeremo pertanto PowerShell ed in particolare io utilizzerò Azure Cloud Shell https://azure.microsoft.com/it-it/features/cloud-shell/
Come prima operazione sarà necessario abilitare la propria sottoscrizione Azure all’utilizzo di questa funzionalità in preview. Da Azure Cloud Shell ho digitato il comando
1 |
Register-AzProviderFeature -FeatureName AllowIPv6VirtualNetwork -ProviderNamespace Microsoft.Network |
Figura 3: Registrazione della funzionalità di Dual-Stack in Azure Cloud Shell
Ci potrebbero volere fino a 30 minuti per abilitare la funzionalità. Potete verificare l’abilitazione utilizzando il comando
1 |
Get-AzProviderFeature -FeatureName AllowIPv6VirtualNetwork -ProviderNamespace Microsoft.Network |
Figura 4: Verifica dell’abilitazione della funzionalità di Dual-Stack nella propria sottoscrizione
Dopo aver completato la registrazione eseguite il comando
1 |
Register-AzResourceProvider -ProviderNamespace Microsoft.Network |
Figura 5: Completamento della registrazione della funzionalità di Dual-Stack nella propria sottoscrizione
In questa demo verrà creata una virtual network che utilizzerà due address space distinti, uno per l’IPv4 ed un altro per l’IPv6. A questa virtual network verrà associata una macchina virtuale la cui scheda di rete avrà sia la configurazione IPv4 che la configurazione IPv6.
La macchina virtuale sarà raggiungibile anche da Internet tramite protocollo RDP utilizzando un indirizzo IPv6 attraverso un Network Load Balancer.
NOTA: Al momento della stesura di questa guida non è ancora possibile assegnare un IPv6 pubblico direttamente ad una VM
Nello Script PowerShell sotto avete a disposizione i commenti per capire tutti i passaggi necessari alla creazione del Load Balancer, delle regole di sicurezza e della macchina virtuale.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#Creazione del Resource Group $rg = New-AzResourceGroup -ResourceGroupName "DualStackRG" -Location "west europe" #Creazione dei due indirizzi pubblici da assegnare alla VM $PublicIP_v4 = New-AzPublicIpAddress -Name "PublicIPv4" -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -AllocationMethod Dynamic -IpAddressVersion IPv4 $PublicIP_v6 = New-AzPublicIpAddress -Name "PublicIPv6" -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -AllocationMethod Dynamic -IpAddressVersion IPv6 #Creazione degli IP di Front-End per il Network Load Balancer $frontendIPv4 = New-AzLoadBalancerFrontendIpConfig -Name "dsLbFrontEnd_v4" -PublicIpAddress $PublicIP_v4 $frontendIPv6 = New-AzLoadBalancerFrontendIpConfig -Name "dsLbFrontEnd_v6" -PublicIpAddress $PublicIP_v6 #Creazione dell'address pool di backend del Network Load Balancer $backendPoolv4 = New-AzLoadBalancerBackendAddressPoolConfig -Name "dsLbBackEndPool_v4" $backendPoolv6 = New-AzLoadBalancerBackendAddressPoolConfig -Name "dsLbBackEndPool_v6" #Creazione delle regole di bilanciamento per il Load Balancer per l'accesso tramite protocollo RDP $lbrule_v4 = New-AzLoadBalancerRuleConfig -Name "dsLBrule_v4" -FrontendIpConfiguration $frontendIPv4 -BackendAddressPool $backendPoolv4 -Protocol Tcp -FrontendPort 3389 -BackendPort 3389 $lbrule_v6 = New-AzLoadBalancerRuleConfig -Name "dsLBrule_v6" -FrontendIpConfiguration $frontendIPv6 -BackendAddressPool $backendPoolv6 -Protocol Tcp -FrontendPort 3389 -BackendPort 3389 #Creazione del Load Balancer $lb = New-AzLoadBalancer -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -Name "MyLoadBalancer" -Sku "Basic" -FrontendIpConfiguration $frontendIPv4,$frontendIPv6 -BackendAddressPool $backendPoolv4,$backendPoolv6 -LoadBalancingRule $lbrule_v4,$lbrule_v6 #Creazione del Network Security Group per permettere la connessione RDP $rule1 = New-AzNetworkSecurityRuleConfig -Name 'NetworkSecurityGroupRuleRDP' -Description 'Allow RDP' -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 $nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -Name "DualStackNSG" -SecurityRules $rule1 # Creazione della Dual-Stack subnet $subnet = New-AzVirtualNetworkSubnetConfig -Name "DualStackSubnet" -AddressPrefix "10.0.0.0/24","ace:cab:deca:deed::/64" # Creazione della virtual network $vnet = New-AzVirtualNetwork -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -Name "DualStackVNET" -AddressPrefix "10.0.0.0/16","ace:cab:deca::/48" -Subnet $subnet #Creazione della scheda di rete da assegnare alla macchina virtuale $Ip4Config=New-AzNetworkInterfaceIpConfig -Name dsIp4Config -Subnet $vnet.subnets[0] -PrivateIpAddressVersion IPv4 -LoadBalancerBackendAddressPool $backendPoolv4 $Ip6Config=New-AzNetworkInterfaceIpConfig -Name dsIp6Config -Subnet $vnet.subnets[0] -PrivateIpAddressVersion IPv6 -LoadBalancerBackendAddressPool $backendPoolv6 $NIC = New-AzNetworkInterface -Name "dsNIC1" -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -NetworkSecurityGroupId $nsg.Id -IpConfiguration $Ip4Config,$Ip6Config #Creazione di username e password per l'accesso alla macchina virtuale $cred = get-credential #Creazione della VM $vmsize = "Standard_F2s_v2" $ImagePublisher = "MicrosoftWindowsServer" $imageOffer = "WindowsServer" $imageSKU = "2016-Datacenter" $vmName= "dsVM1" $VMconfig = New-AzVMConfig -VMName $vmName -VMSize $vmsize 3> $null | Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent 3> $null | Set-AzVMSourceImage -PublisherName $ImagePublisher -Offer $imageOffer -Skus $imageSKU -Version "latest" 3> $null | Set-AzVMOSDisk -Name "$vmName.vhd" -CreateOption fromImage 3> $null | Add-AzVMNetworkInterface -Id $NIC.Id 3> $null $VM = New-AzVM -ResourceGroupName $rg.ResourceGroupName -Location $rg.Location -VM $VMconfig |
Terminata la creazione della VM e di tutti gli altri componenti è possibile verificare graficamente dal portale di Azure le configurazioni della virtual network e degli altri oggetti creati.
Figura 6: Oggetti creati dallo script in PowerShell
Figura 7: Address spaces della VNET
Figura 8: Configurazione della VNET
Figura 9: Configurazione degli indirizzi di FrontEnd del Load Balancer
Figura 10: Pool di Backend del Network Load Balancer
Potrete recuperare l’indirizzo IPv6 pubblico che è stato assegnato al bilanciatore semplicemente utilizzando il comando:
1 2 |
#Recupero l'indirizzo IP pubblico del Load Balancer (Get-AzPublicIpAddress -Name PublicIPv6).IpAddress |
Figura 11: Recupero dell’indirizzo IP pubblico del Load balancer
Utilizzando il client RDP mi sono connesso all’indirizzo IPv6 del bilanciatore e sono riuscito a connettermi alla macchina virtuale creata in Azure.
NOTA: Per potervi connettere in RDP con l’IPv6 la vostra connessione Internet deve permettervi di ricevere degli indirizzi IPv6.
Nella figura sotto potete visualizzare l’indirizzo IP che ho ricevuto dal mio provider
Figura 12: Indirizzo IPv6 che ho ricevuto dal mio provider di connettività Internet
Dopo essermi collegato in RDP alla macchina virtuale in Azure, con il comando ipconfig ho anche visualizzato l’indirizzo IPv6 interno assegnato alla VM, in modo tale da verificare che la macchina sia stata configurata per il Dual-Stack.
Figura 13: Connessione RDP in IPv6 alla macchina Azure
Dal portale di Azure è anche possibile verificare graficamente la configurazione della scheda di rete della macchina virtuale creata.
Figura 14: Configurazione della scheda di rete della macchina virtuale
La stessa operazione può essere effettuata utilizzando Azure CLI
Nello script sotto sono riportati tutti i passaggi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#Creazione di un Resource Group az group create --name DualStackRG --location westeurope # Creazione di un indirizzo pubblico IPv4 peril bilanciatore di carico az network public-ip create --name dsPublicIP_v4 --resource-group DualStackRG --location westeurope --sku BASIC --allocation-method dynamic --version IPv4 # Creazione di un indirizzo pubblico IPv6 per il bilanciatore di carico az network public-ip create --name dsPublicIP_v6 --resource-group DualStackRG --location westeurope --sku BASIC --allocation-method dynamic --version IPv6 # Creazione di un indirizzo pubblico IPv4 per la VM az network public-ip create --name dsVMPublicIP_v4 --resource-group DualStackRG --location westeurope --sku BASIC --allocation-method dynamic --version IPv4 #Creazione del bilanciatore di carico az network lb create --name dsLB --resource-group DualStackRG --sku Basic --location westeurope --frontend-ip-name dsLbFrontEnd_v4 --public-ip-address dsPublicIP_v4 --backend-pool-name dsLbBackEndPool_v4 #Creazione di un indirizzo IP front-end IPV6 az network lb frontend-ip create --lb-name dsLB --name dsLbFrontEnd_v6 --resource-group DualStackRG --public-ip-address dsPublicIP_v6 #Creazione di un pool di indirizzi back-end IPv6 az network lb address-pool create --lb-name dsLB --name dsLbBackEndPool_v6 --resource-group DualStackRG #Creazione di una regola di bilanciamento del carico per la porta 3389 az network lb rule create --lb-name dsLB --name dsLBrule_v4 --resource-group DualStackRG --frontend-ip-name dsLbFrontEnd_v4 --protocol Tcp --frontend-port 3389 --backend-port 3389 --backend-pool-name dsLbBackEndPool_v4 az network lb rule create --lb-name dsLB --name dsLBrule_v6 --resource-group DualStackRG --frontend-ip-name dsLbFrontEnd_v6 --protocol Tcp --frontend-port 3389 --backend-port 3389 --backend-pool-name dsLbBackEndPool_v6 #Creazione di un Network Security Group az network nsg create --name dsNSG --resource-group DualStackRG --location westeurope # Creazione di una regola Inbound per la porta 3389 az network nsg rule create --name allowRdpIn --nsg-name dsNSG --resource-group DualStackRG --priority 100 --description "Allow Remote Desktop In" --access Allow --protocol "*" --direction Inbound --source-address-prefixes "*" --source-port-ranges "*" --destination-address-prefixes "*" --destination-port-ranges 3389 # Create della regola per Outbound az network nsg rule create --name allowAllOut --nsg-name dsNSG --resource-group DualStackRG --priority 300 --description "Allow All Out" --access Allow --protocol "*" --direction Outbound --source-address-prefixes "*" --source-port-ranges "*" --destination-address-prefixes "*" --destination-port-ranges "*" # Creazione della virtual network az network vnet create --name dsVNET --resource-group DualStackRG --location westeurope --address-prefixes "10.0.0.0/16" "ace:cab:deca::/48" # Creazione della dual stack subnet az network vnet subnet create --name dsSubNET --resource-group DualStackRG --vnet-name dsVNET --address-prefixes "10.0.0.0/24" "ace:cab:deca:deed::/64" --network-security-group dsNSG # Creazione della scheda di rete az network nic create --name dsNIC0 --resource-group DualStackRG --network-security-group dsNSG --vnet-name dsVNET --subnet dsSubNet --private-ip-address-version IPv4 --public-ip-address dsVMPublicIP_v4 # Creazione della configurazione IPv6 per la scheda di rete az network nic ip-config create --name dsIp6Config_NIC0 --nic-name dsNIC0 --resource-group DualStackRG --vnet-name dsVNET --subnet dsSubNet --private-ip-address-version IPv6 #Creazione della macchina virtuale az vm create --name dsVM0 --resource-group DualStackRG --nics dsNIC0 --size Standard_D2s_v3 --image MicrosoftWindowsServer:WindowsServer:2016-Datacenter:latest |
Figura 15: Oggetti creati dallo script CLI
Modifica di una rete virtuale esistente
Se volete modificare una VNet esistente dovete necessariamente farlo tramite PowerShell o CLI. Se infatti tentate di aggiungere un address space IPV6 nel portale di Azure riceverete il messaggio di errore mostrato in figura 17:
Figura 16: Configurazione della VNET esistente
Figura 17: Messaggio di errore quando si tenta di aggiungere un address space IPv6 dal portale di Azure
Per Aggiungere un address space ed una subnet ad una virtual network esistente vi basterà eseguire pochi comandi PowerShell:
1 2 3 4 5 6 7 8 9 10 11 |
#Nome della rete virtuale esistente $vnet = Get-AzureRmVirtualNetwork -Name "DEMOVNET" -ResourceGroupName "DualStackRG" #Aggiunta di un address space IPv6 $vnet.AddressSpace.AddressPrefixes.Add("ace:cab:deca::/48") #Aggiunta di una subnet IPv6 Add-AzVirtualNetworkSubnetConfig -Name "DualStackSubnet" -AddressPrefix "ace:cab:deca:deed::/64" -VirtualNetwork $vnet #Salvataggio delle modifiche apportate alla VNET $vnet | Set-AzVirtualNetwork |
Figura 18: Address space IPv6 aggiunto ad una rete virtual esistente
Figura 19: Subnet IPv6 aggiunta ad una rete virtuale esistente
NOTA: Non è possibile aggiungere il Dual-Stack IPv6 alle VNET che hanno effettuato il Peering con un’latra VNET
Conclusioni
Tanti sono i vantaggi nell’avere una configurazione Dual-Stack (IPv4 + IPv6) in Azure e, anche se al momento la funzionalità è in Preview e le configurazioni sono disponibili solo tramite PowerShell e CLI, ben presto potremo avere la possibilità di configurare le VM e gli altri servizi direttamente dal portale Azure. Nel momento in cui avremo la possibilità di assegnare gli indirizzi IPv6 pubblici alle VM, queste potranno essere accedute direttamente da Internet.