2017-02-02 1 views
1

Je dois lancer une requête DNS IPv6 à partir de ma machine virtuelle Azure. J'ai besoin de contrôler tous les paramètres de cette requête. Je peux le faire via des appels réseau ou via la commande dig. Puis-je le faire avec Azure? Cela probablement: l'équilibreur de charge peut-il prendre en charge une requête DNS IPv6 sortante?Requête DNS IPv6 sur Azure

+0

Qu'est-il arrivé quand vous essayé? –

+0

Jusqu'ici, tout ce que j'obtiens est une requête IPv4, mais nous travaillons toujours à comprendre comment travailler avec le LB pour les transactions initiées, donc c'est probablement plus nous. Chaque pièce de documentation que je lis ne parle que de http, et la plupart des LB sont limités à cela pour des raisons de sécurité. Ce n'est pas une limitation des LB eux-mêmes - le service que j'interroge depuis Azure a un LB devant le résolveur DNS réel, mais j'étais inquiet que la raison pour laquelle cela ne fonctionnait pas était que cela ne fonctionne pas. Nous continuerons à dénigrer l'obtention de la transaction sortante pour ensuite voir ce que nous observons. – brtech

Répondre

0

Je ne comprends pas ce que vous voulez dire par lancer une requête IPv6. Voulez-vous dire une requête pour un enregistrement AAAA ou voulez-vous dire le trafic réseau IPv6? Si vous vouliez dire le type de requête, des outils comme nslookup et dig vous permettent de contrôler la requête, mais lorsque vous recherchez un nom d'hôte dans des navigateurs, l'OS décide comment résoudre le nom, ce qui n'est pas spécifique à Azure. Si vous parlez du trafic au niveau IP, les résolveurs récursifs DNS Azure ne peuvent être contactés qu'en utilisant IPv4 à l'heure actuelle.

1

Nous avions besoin de confirmer que nos serveurs DNS géraient les requêtes arrivant sur IPv6, et Azure était l'un des fournisseurs de cloud que nous pouvions utiliser. Ce n'était pas facile, mais j'ai fini par le faire fonctionner. Pour obtenir le service IPv6 sortant d'une machine virtuelle Azure, la machine virtuelle doit être créée dans un ensemble de disponibilité avec un équilibreur de charge doté d'adresses IPv6 dynamiques publiques, de règles NAT entrantes pour IPv4 et IPv6 et de règles d'équilibrage de charge pour le même. Les machines virtuelles existantes ne peuvent pas être reconfigurées pour cela. Azure semble créer une partie du tunnel entre l'équilibreur de charge configuré et les machines virtuelles que vous avez placées dans le même ensemble de disponibilité. Ce n'est pas évident du point de vue de la machine virtuelle, sauf que vous ne pouvez communiquer que sur IPv6 avec l'Internet extérieur et non avec les autres machines virtuelles dans votre soumission Azure.

La prise en charge IPv6 n'est actuellement pas possible via le portail Azure. J'ai fait un usage intensif des deux liens suivants pour obtenir ce travail:

https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-ipv6-overview

https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-ipv6-internet-ps

Vous aurez besoin d'une machine virtuelle Windows pour exécuter une grande partie de ce qui précède; PowerShell pour Linux et AzureRM.NetCore.Preview n'ont pas la parité de fonctionnalités avec PowerShell dans Windows.

J'ai dû pirater l'exemple ci-dessus pendant un certain temps avant de proposer ce qui suit ... vous devrez peut-être le pirater un peu plus pour travailler dans votre environnement. Notez que j'ai exécuté ce script à partir de Powershell ISE afin que je puisse préconfigurer l'environnement avec $ mySecureCredentials et Login-AzureRMAccount si nécessaire.

Le tableau ci-dessous va créer une machine virtuelle Centos 7.3 capable de lancer des requêtes DNS IPv6 sur Internet. Notez que vous devrez activer vos interfaces IPv6 dans l'invité après le redémarrage. Malheureusement, mon représentant est trop faible pour publier plus de 2 liens, alors recherchez 'azure linux dhcp ipv6' pour voir comment activer la configuration du client DHCPv6 sur votre machine virtuelle.


$resgroupName = 'YourResourceGroup' 

$location = 'east US' # of course, select your preferred location 
# you will need some secure credentials. run something like: 
# $mySecureCredentials = Get-Credential -Message "Type the username and password of the local administrator account." 

# you will also need to log into azure (Login-AzureRMAccount) 

# IP addresses, load balancer config 

$publicIPv4= New-AzureRmPublicIpAddress -name 'lb-pub-ipv4' -ResourceGroupName $resgroupName -location $location ` 
-Allocationmethod Static -IpAddressVersion IPv4 -domainnamelabel my-lbnrpipv4 

$publicIPv6 = New-AzureRmPublicIpAddress -name 'lb-pub-ipv6' -ResourceGroupName $resgroupName -location $location ` 
-AllocationMethod Dynamic -IpAddressVersion IPv6 -DomainNameLabel my-lbnrpipv6 


$FEIPConfigv4 = New-AzureRmLoadBalancerFrontendIpConfig -name "LB-Frontendv4" -PublicIpAddress $publicIPv4 

$FEIPConfigv6 = New-AzureRmLoadBalancerFrontendIpConfig -name "LB-Frontendv6" -PublicIpAddress $publicIPv6 

$backendpoolipv4 = New-AzureRmLoadBalancerBackendAddressPoolConfig -name "BackendPoolIPv4" 

$backendpoolipv6 = New-AzureRmLoadBalancerBackendAddressPoolConfig -name "BackendPoolIPv6" 

# This script assumes you already have a virtual network defined - replace myRG-vnet with the name of the virtual network you want to use. 

$vnet = Get-AzureRmVirtualNetwork -name myRG-vnet -ResourceGroupName $resgroupName 

# I assume you want to use the default subnet. 

$backendSubnet = Get-AzureRmVirtualNetworkSubnetConfig -name default -virtualnetwork $vnet 

# Create NAT rules for load balancer 
# Even if you don't actually need any inbound rules, some rules appear to be necessary to make outbound IPv6 work. 

# Inbound SSH 
$inboundNATRule1v4 = New-AzureRmLoadBalancerInboundNatRuleConfig -name "NicNatRulev4" -FrontendIpConfiguration $FEIPConfigv4 -Protocol TCP -FrontendPort 22 -BackendPort 22 
$inboundNATRule1v6 = New-AzureRmLoadBalancerInboundNatRuleConfig -name "NicNatRulev6" -FrontendIpConfiguration $FEIPConfigv6 -Protocol TCP -FrontendPort 22 -BackendPort 22 

$lbrule1v4 = New-AzureRmLoadBalancerRuleConfig -name "HTTPv4" -FrontendIpConfiguration $FEIPConfigv4 -BackendAddressPool $backendpoolipv4 -Protocol TCP -FrontendPort 80 -BackendPort 80 
$lbrule1v6 = New-AzureRmLoadBalancerRuleConfig -name "HTTPv6" -FrontendIpConfiguration $FEIPConfigv6 -BackendAddressPool $backendpoolipv6 -Protocol TCP -FrontendPort 80 -BackendPort 80 

$NRPLB = New-AzureRmLoadBalancer -ResourceGroupName $resgroupName -name 'myNrpIPv6LB' -location $location ` 
-FrontendIpConfiguration $FEIPConfigv4,$FEIPConfigv6 -BackendAddressPool $backendpoolipv4,$backendpoolipv6 ` 
-LoadBalancingRule $lbrule1v4,$lbrule1v6 -inboundNatRule $inboundNATRule1v4,$inboundNATRule1v6 

$nic1IPv4 = New-AzureRmNetworkInterfaceIpConfig -name "IPv4IPConfig" -PrivateIpAddressVersion "IPv4" -subnet $backendSubnet -LoadBalancerBackendAddressPool $backendpoolipv4 -LoadBalancerInboundNatRule $inboundNATRule1v4 

$nic1IPv6 = New-AzureRmNetworkInterfaceIpConfig -name "IPv6IPConfig" -PrivateIpAddressVersion "IPv6" -LoadBalancerBackendAddressPool $backendpoolipv6 -LoadBalancerInboundNatRule $inboundNATRule1v6 

$nic1 = New-AzureRmNetworkInterface -Name 'myNrpIPv6Nic0' -IpConfiguration $nic1IPv4,$nic1IPv6 ` 
-resourceGroupName $resgroupName -location $location 

New-AzureRmAvailabilitySet -name "myNrpIPv6AvSet" -resourcegroupname $resgroupName -location $location 

$avset1 = Get-AzureRmAvailabilitySet -resourcegroupname $resgroupName -name 'myNrpIPv6AvSet' 

try { 

New-AzureRmStorageAccount -ResourceGroupName $resgroupName -name 'mynrpipv6stacct' -location $location -skuname ` 
"Standard_LRS" -erroraction stop 
    } catch { 
    echo "new storage account failed, let's just hope it was a dup and gets found anyway" 
} 

# find my existing storage account 

$storAcct = Get-AzureRmStorageAccount -resourcegroupname $resgroupName -name 'mynrpipv6stacct' 

if ($storAcct -eq $null) { 
    throw "I could not find a storage accoount" 
} 

$nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $resgroupName -name 'myNrpIPv6Nic0' 

$vm1 = New-AzureRmVMConfig -vmName 'myNrpLinuxIPv6VM1' -vmSize 'Standard_d1' -AvailabilitySetId $avset1.Id 
$vm1 = Set-AzureRmVMOperatingSystem -vm $vm1 -Linux -ComputerName 'myNrpLinuxIPv6VM1' -Credential $mySecureCredentials 
$vm1 = Set-AzureRmVMSourceImage -VM $vm1 -PublisherName OpenLogic -Offer CentOS -Skus '7.3' -Version "latest" 
$vm1 = Add-AzureRmVMNetworkInterface -VM $vm1 -Id $nic1.Id -Primary 
$osDisk1Uri = $storAcct.PrimaryEndpoints.Blob.ToString() + "vhds/myNrpLinuxIPv6VM1osdisk.vhd" 
$vm1 = Set-AzureRmVMOSDisk -VM $vm1 -Name 'myNrpLinuxIPv6VM1osdisk' -VhdUri $osDisk1Uri -CreateOption FromImage 

echo now creating... 
new-azurermvm -ResourceGroupName $resgroupName -location $location -VM $vm1 

echo done