2017-02-02 5 views
1

Ich muss eine IPv6-DNS-Abfrage von meiner Azure-VM aus starten. Ich muss alle Parameter dieser Abfrage steuern. Ich kann es über Netzwerkanrufe oder über den Dig-Befehl tun. Kann ich das mit Azure machen? Wahrscheinlich: Kann der Load Balancer eine ausgehende IPv6-DNS-Abfrage unterstützen?IPv6-DNS-Abfrage in Azure

+0

Was passiert, wenn man es versucht? –

+0

Bis jetzt ist alles, was ich bekomme, eine IPv4-Abfrage, aber wir arbeiten immer noch daran zu verstehen, wie man mit der LB für ausgehende Transaktionen arbeitet, also sind das wahrscheinlich mehr wir. Jede Dokumentation, die ich lese, spricht nur von http, und die meisten LBs sind aus Sicherheitsgründen darauf beschränkt. Das ist keine Einschränkung der LBs selbst - der Service, den ich von Azure abfrage, hat eine LB vor dem eigentlichen DNS-Resolver, aber ich habe mir Sorgen gemacht, dass der Grund dafür nicht funktionierte, dass es das nicht tut. Wir werden weiter versuchen, die ausgehende Transaktion zum Laufen zu bringen, und dann sehen, was wir beobachten. – brtech

Antwort

0

Ich verstehe nicht, was Sie meinen, indem Sie eine IPv6-Abfrage starten. Meinst du Abfrage für einen AAAA-Datensatz oder meinst du IPv6-Netzwerkverkehr? Wenn Sie den Abfragetyp gemeint haben, können Sie mit Tools wie nslookup und dig zwar die Abfrage steuern, aber wenn Sie in Browsern nach einem Hostnamen suchen, kann das Betriebssystem entscheiden, wie der Name aufgelöst werden soll. Das ist nicht Azure-spezifisch. Wenn Sie über IP-Verkehr sprechen, sind die rekursiven Azure DNS-Resolver derzeit nur mit IPv4 erreichbar.

1

Wir mussten bestätigen, dass unsere DNS-Server Anfragen über IPv6 beantworteten, und Azure war einer der Cloud-Anbieter, die wir verwenden konnten. Es war nicht einfach, aber ich habe es schließlich zum Laufen gebracht.

Um IPv6-Ausgangsdienste von einer Azure-VM zu erhalten, muss die VM in einem Verfügbarkeitssatz mit einem Lastenausgleich mit öffentlichen dynamischen IPv6-Adressen, eingehenden NAT-Regeln für IPv4 und IPv6 sowie Lastenausgleichsregeln erstellt werden für dasselbe. Bestehende VMs können nicht neu konfiguriert werden, um dies zu unterstützen. Azure scheint einige Tunnels zwischen dem konfigurierten Lastenausgleich und den VMs zu erstellen, die Sie in den gleichen Verfügbarkeitssatz eingefügt haben. Dies ist aus der Sicht der VM nicht offensichtlich, außer dass Sie nur über IPv6 mit dem externen Internet und nicht mit den anderen VMs in Azure kommunizieren können.

IPv6-Unterstützung kann derzeit nicht über das Azure-Portal konfiguriert werden. Ich machte starken Gebrauch von den folgenden beiden Links diese Funktion zu erhalten:

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

Sie erhalten einen Windows-VM benötigt viel von der oben zu laufen; PowerShell für Linux und AzureRM.NetCore.Preview verfügt nicht über Feature-Parität mit PowerShell in Windows.

Ich musste am obigen Beispiel für einige Zeit hacken, bevor Sie mit dem folgenden ... kommen, müssen Sie es möglicherweise noch etwas hacken, um in Ihrer Umgebung zu arbeiten. Beachten Sie, dass ich dieses Skript in Powershell ISE ausgeführt habe, sodass ich die Umgebung nach Bedarf mit $ mySecureCredentials und Login-AzureRMAccount konfigurieren konnte.

Im Folgenden wird eine Centos 7.3-VM erstellt, die IPv6-DNS-Abfragen für das Internet initiieren kann. Beachten Sie, dass Sie nach dem Neustart Ihre IPv6-Schnittstellen im Gast aktivieren müssen. Leider ist mein Rep-Wert zu niedrig, um mehr als 2 Links zu posten. Suchen Sie nach 'azure linux dhcp ipv6', um zu sehen, wie die DHCPv6-Client-Konfiguration auf Ihrer VM aktiviert wird.


$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