2017-02-02 2 views
1

Мне нужно запустить DNS-запрос IPv6 с моей Azure VM. Мне нужно контролировать все параметры этого запроса. Я могу сделать это через сетевые вызовы или через команду dig. Могу ли я сделать это с помощью Azure? Это возможно: может ли балансировка нагрузки поддерживать исходящий DNS-запрос IPv6?IPv6 DNS-запрос на Azure

+0

Что произошло, когда вы пробовали? –

+0

До сих пор все, что я получаю, это запрос IPv4, но мы по-прежнему работаем над пониманием того, как работать с LB для исходящих инициированных транзакций, так что это, вероятно, больше нас. Каждая часть документации, которую я читаю, только говорит о http, и большинство LB ограничены этим по соображениям безопасности. Это не является ограничением самих LB - служба, к которой я обращаюсь от Azure, имеет LB перед фактическим DNS-резольвером, но я был обеспокоен тем, что причина, по которой он не работал, заключается в том, что он этого не делает. Мы будем беспокоиться о том, чтобы заставить исходящую транзакцию работать, а затем посмотреть, что мы наблюдаем. – brtech

ответ

0

Я не понимаю, что вы подразумеваете при запуске запроса IPv6. Вы имеете в виду запрос для записи AAAA или вы имеете в виду сетевой трафик IPv6? Если вы имели в виду тип запроса, тогда такие инструменты, как nslookup и dig, позволяют управлять запросом, но при поиске имени хоста в таких вещах, как браузеры, они позволяют ОС решить, как разрешить имя, это не характерно для Azure. Если вы говорите о трафике уровня IP, рекурсивные резольверы Azure DNS доступны только с помощью IPv4.

1

Нам необходимо было подтвердить, что наши DNS-серверы обрабатывали запросы, поступающие через IPv6, и Azure был одним из облачных провайдеров, которые мы могли бы использовать. Это было нелегко, но в итоге я получил его на работу.

Чтобы получить исходящую службу IPv6 от Azure VM, виртуальная машина должна быть создана в наборе доступности с балансировщиком нагрузки, который имеет общедоступные динамические IPv6-адреса, входящие правила NAT для IPv4 и IPv6, а также правила балансировки нагрузки для того же. Существующие виртуальные машины не могут быть перенастроены для поддержки этого. Кажется, что Azure создает некоторые туннели между настроенным балансировщиком нагрузки и виртуальными машинами, которые вы ввели в тот же набор доступности. Это не очевидно с точки зрения VM, за исключением того, что вы можете общаться только через IPv6 с внешним Интернетом, а не с другими виртуальными машинами в своем Azure submit.

В настоящее время поддержка IPv6 для настройки через портал Azure отсутствует. Я сделал интенсивное использование двух следующих ссылок, чтобы получить эту работу:

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

Вы будете нуждаться в VM для Windows, чтобы запустить много выше; PowerShell для Linux и AzureRM.NetCore.Preview не имеет паритета функций с PowerShell в Windows.

Я должен был взломать приведенный выше пример в течение некоторого времени, прежде чем приступать к следующему ... вам, возможно, придется взломать его еще немного, чтобы работать в вашей среде. Обратите внимание, что я запустил этот скрипт из Powershell ISE, чтобы я мог предварительно настроить среду с помощью $ mySecureCredentials и Login-AzureRMAccount, если это необходимо.

Ниже будет создана виртуальная машина Centos 7.3, которая может инициировать DNS-запросы IPv6 в Интернете. Обратите внимание, что после перезагрузки вам придется включить свои IPv6-интерфейсы в гостевой системе. К сожалению, моя репутация слишком низкая, чтобы разместить более двух ссылок, поэтому найдите «azure linux dhcp ipv6», чтобы увидеть, как настроить настройку клиента DHCPv6 на вашей виртуальной машине.


$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 
Смежные вопросы