Создание виртуальной сети с VPN-подключением типа "сеть — сеть" с помощью PowerShell

В этой статье показано, как использовать PowerShell для создания подключения VPN-шлюза типа "сеть — сеть" из локальной сети к виртуальной сети. Приведенные в этой статье инструкции относятся к модели развертывания с помощью Resource Manager. Эту конфигурацию также можно создать с помощью разных средств или моделей развертывания, выбрав вариант из следующего списка:

Подключение VPN-шлюза типа "сеть — сеть" используется для подключения локальной сети к виртуальной сети Azure через VPN-туннель IPsec/IKE (IKEv1 или IKEv2). Для этого типа подключения требуется локальное VPN-устройство, которому назначен внешний общедоступный IP-адрес. Дополнительные сведения о VPN-шлюзах см. в этой статье.

Diagram of site-to-site VPN Gateway cross-premises connections.

Подготовка к работе

Перед началом настройки убедитесь, что удовлетворены следующие требования:

  • Убедитесь, что у вас есть совместимое VPN–устройство и пользователь, который может настроить его. Дополнительные сведения о совместимых устройствах VPN и их настройке см. в этой статье.
  • Убедитесь, что у вас есть общедоступный IPv4–адрес для вашего VPN–устройства.
  • Если вы не знаете диапазоны IP-адресов в своей конфигурации локальной сети, найдите того, кто сможет предоставить вам нужную информацию. При создании этой конфигурации необходимо указать префиксы диапазона IP-адресов, которые Azure будет направлять к локальному расположению. Ни одна из подсетей локальной сети не может перекрывать виртуальные подсети, к которым вы хотите подключиться.

Azure PowerShell

В этой статье используются командлеты PowerShell. Для запуска командлетов можно использовать Azure Cloud Shell. Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, просто выберите Open Cloudshell в правом верхнем углу блока кода. Кроме того, Cloud Shell можно открыть в отдельной вкладке браузера. Для этого перейдите на страницу https://shell.azure.com/powershell. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте их в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить код.

Кроме того, вы можете установить и запускать командлеты Azure PowerShell локально на компьютере. Командлеты PowerShell часто обновляются. Если вы не установили последнюю версию, значения, указанные в инструкциях, могут завершиться ошибкой. Чтобы узнать, какая версия Azure PowerShell установлена на вашем компьютере, используйте командлет Get-Module -ListAvailable Az. Если необходимо выполнить установку или обновление, см. статью об установке модуля Azure PowerShell.

Пример значений

В примерах этой статьи мы используем следующие значения. Эти значения можно использовать для создания тестовой среды или для лучшего понимания примеров в этой статье.

#Example values

VnetName                = VNet1
ResourceGroup           = TestRG1
Location                = East US 
AddressSpace            = 10.1.0.0/16 
SubnetName              = Frontend 
Subnet                  = 10.1.0.0/24 
GatewaySubnet           = 10.1.255.0/27
LocalNetworkGatewayName = Site1
LNG Public IP           = <On-premises VPN device IP address> 
Local Address Prefixes  = 10.0.0.0/24, 20.0.0.0/24
Gateway Name            = VNet1GW
PublicIP                = VNet1GWPIP
Gateway IP Config       = gwipconfig1 
VPNType                 = RouteBased 
GatewayType             = Vpn 
ConnectionName          = VNet1toSite1

1. Создание виртуальной сети и подсети шлюза

Если у вас нет виртуальной сети, создайте ее. При создании виртуальной сети убедитесь, что указанные адресные пространства не перекрываются ни с одним из адресных пространств, которые используются в локальной сети.

Примечание.

Для подключения этой виртуальной сети к локальному расположению вам необходимо обратиться к администратору локальной сети, чтобы выделить диапазон IP-адресов, который будет использоваться специально для этой виртуальной сети. Если на обеих сторонах VPN-подключения существует повторяющийся диапазон адресов, трафик не направляется так, как он может потребоваться. Кроме того, если вы хотите подключить виртуальную сеть к другой виртуальной сети, адресное пространство не должно пересекаться с другой виртуальной сетью. Спланируйте конфигурацию сети соответствующим образом.

Сведения о подсети шлюза

Шлюз виртуальной сети использует определенную подсеть, которая называется подсетью шлюза. Подсеть шлюза входит в диапазон IP-адресов виртуальной сети, который вы указываете при ее настройке. Подсеть шлюза содержит IP-адреса, которые используют ресурсы и службы шлюза виртуальной сети. Чтобы развертывать ресурсы шлюза в Azure, подсети нужно присвоить имя GatewaySubnet. Для развертывания ресурсов шлюза нельзя указывать другую подсеть. Если при создании VPN-шлюза у вас нет подсети с именем GatewaySubnet, операция завершится сбоем.

При создании подсети шлюза указывается количество IP-адресов, которое содержит подсеть. Необходимое количество IP-адресов зависит от конфигурации VPN-шлюза, который вы хотите создать. Некоторым конфигурациям требуется больше IP-адресов, чем прочим. Рекомендуем создать подсеть шлюза, которая использует /27 или /28.

Если появится сообщение об ошибке, которое указывает, что адресное пространство пересекается с подсетью или что подсеть находится вне адресного пространства виртуальной сети, проверьте диапазон адресов виртуальной сети. Возможно, в диапазоне адресов, созданном для виртуальной сети, недостаточно IP-адресов. Например, если подсеть по умолчанию охватывает весь диапазон адресов, не остается IP-адресов для создания дополнительных подсетей. Можно настроить подсети в существующем пространстве адресов, чтобы освободить IP-адреса, или указать дополнительный диапазон адресов и создать в нем подсеть шлюза.

Важно!

При работе с подсетями шлюза избегайте связывания группы безопасности сети (NSG) с подсетью шлюза. Связывание группы безопасности сети с этой подсетью может привести к остановке работы шлюза виртуальной сети (VPN и шлюзов ExpressRoute). Дополнительные сведения о группах безопасности сети см. в статье Фильтрация сетевого трафика с помощью групп безопасности сети.

Создание виртуальной сети и подсети шлюза

В этом примере создается виртуальная сеть и подсеть шлюза. Если у вас уже есть виртуальная сеть, в которую необходимо добавить подсеть шлюза, см. раздел Добавление подсети шлюза в созданную виртуальную сеть.

Создание группы ресурсов.

New-AzResourceGroup -Name TestRG1 -Location 'East US'

Создайте свою виртуальную сеть.

  1. Задайте переменные.

    $subnet1 = New-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix 10.1.255.0/27
    $subnet2 = New-AzVirtualNetworkSubnetConfig -Name 'Frontend' -AddressPrefix 10.1.0.0/24
    
  2. Создайте виртуальную сеть.

    New-AzVirtualNetwork -Name VNet1 -ResourceGroupName TestRG1 `
    -Location 'East US' -AddressPrefix 10.1.0.0/16 -Subnet $subnet1, $subnet2
    

Добавление подсети шлюза в уже созданную виртуальную сеть

Если у вас уже есть виртуальная сеть, но необходимо добавить подсеть шлюза, следуйте инструкциям из этого раздела.

  1. Задайте переменные.

    $vnet = Get-AzVirtualNetwork -ResourceGroupName TestRG1 -Name VNet1
    
  2. Создайте подсеть шлюза.

    Add-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix 10.1.255.0/27 -VirtualNetwork $vnet
    
  3. Теперь нужно настроить конфигурацию.

    Set-AzVirtualNetwork -VirtualNetwork $vnet
    

2. Создание локального сетевого шлюза

Обычно термин "шлюз локальной сети" (LNG) означает локальное расположение. Это не то же самое, что и шлюз виртуальной сети. Присвойте сайту имя, по которому Azure может обращаться к этому сайту, а затем укажите IP-адрес локального VPN-устройства, к которому вы подключитесь. Вы можете также указать префиксы IP-адресов, которые будут направляться через VPN-шлюз к VPN-устройству. Указываемые префиксы адресов расположены в локальной сети. При изменении локальной сети вы сможете без проблем обновить эти префиксы.

Выберите один из следующих примеров. Значения, используемые в примерах:

  • Параметр GatewayIPAddress — это IP-адрес локального VPN-устройства.
  • Параметр AddressPrefix — локальное адресное пространство.

Пример префикса одного адреса

New-AzLocalNetworkGateway -Name Site1 -ResourceGroupName TestRG1 `
-Location 'East US' -GatewayIpAddress '23.99.221.164' -AddressPrefix '10.0.0.0/24'

Пример префикса нескольких адресов

New-AzLocalNetworkGateway -Name Site1 -ResourceGroupName TestRG1 `
-Location 'East US' -GatewayIpAddress '23.99.221.164' -AddressPrefix @('20.0.0.0/24','10.0.0.0/24')

3. Запрос общедоступного IP-адреса

VPN-шлюз должен иметь общедоступный IP-адрес. Сначала запросите ресурс IP-адреса, а затем укажите его при создании шлюза виртуальной сети. IP-адрес динамически назначается ресурсу при создании VPN-шлюза. Общедоступный IP-адрес изменяется только после удаления и повторного создания шлюза. При изменении размера, сбросе или других внутренних операциях обслуживания или обновления IP-адрес VPN-шлюза не изменяется.

Запросите общедоступный IP-адрес для VPN-шлюза виртуальной сети.

$gwpip= New-AzPublicIpAddress -Name VNet1GWPIP -ResourceGroupName TestRG1 -Location 'East US' -AllocationMethod Static -Sku Standard

4. Создание конфигурации IP-адресации шлюза

Конфигурация шлюза определяет используемые подсеть (GatewaySubnet) и общедоступный IP-адрес. Используйте следующий пример, чтобы создать конфигурацию шлюза:

$vnet = Get-AzVirtualNetwork -Name VNet1 -ResourceGroupName TestRG1
$subnet = Get-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $vnet
$gwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $subnet.Id -PublicIpAddressId $gwpip.Id

5. Создание VPN-шлюза

Создайте VPN-шлюз виртуальной сети. Создание шлюза часто занимает 45 минут и более, в зависимости от выбранного SKU шлюза. В примере используются следующие значения:

  • - GatewayType для конфигурации типа "сеть — сеть" — VPN. Тип шлюза всегда зависит от используемой конфигурации. Например, для других конфигураций шлюза может потребоваться -GatewayType ExpressRoute.
  • У параметра -VpnType может быть значение RouteBased (в некоторых документах такой шлюз называется шлюзом с динамической маршрутизацией) или PolicyBased (в некоторых документах — шлюз со статической маршрутизацией). Дополнительные сведения о типах VPN-шлюзов см. в статье Основные сведения о VPN-шлюзах Azure.
  • Выберите SKU шлюза, который нужно использовать. К определенным номерам SKU применяются ограничения настройки. Дополнительные сведения см. в разделе о номерах SKU шлюзов. Если при создании VPN-шлюза вы получаете сообщение об ошибке с -GatewaySku, убедитесь, что установлена последняя версия командлетов PowerShell.
New-AzVirtualNetworkGateway -Name VNet1GW -ResourceGroupName TestRG1 `
-Location 'East US' -IpConfigurations $gwipconfig -GatewayType Vpn `
-VpnType RouteBased -GatewaySku VpnGw2

6. Настройка VPN-устройства

Для подключения "сеть — сеть" к локальной сети требуется VPN-устройство. На этом этапе мы настроим VPN-устройство. Чтобы настроить локальное VPN-устройство, вам потребуется следующее:

  • Общий ключ. Это тот же общий ключ, который указывается при создании VPN-подключения "сеть — сеть". В наших примерах мы используем простые общие ключи. Для практического использования рекомендуется создавать более сложные ключи.

  • Общедоступный IP-адрес шлюза виртуальной сети. Общедоступный IP-адрес можно просмотреть с помощью портала Azure, PowerShell или CLI. Чтобы найти общедоступный IP-адрес шлюза виртуальной сети с помощью PowerShell, используйте следующий пример. В этом примере VNet1GWPIP — это имя общедоступного ресурса IP-адреса, который вы создали на предыдущем шаге.

    Get-AzPublicIpAddress -Name VNet1GWPIP -ResourceGroupName TestRG1
    

Скачивание скриптов конфигурации VPN-устройства:

В зависимости от устройства VPN можно загрузить для него скрипт конфигурации. Дополнительные сведения см. в статье о скачивании скриптов конфигурации для VPN-устройств.

Дополнительные сведения о конфигурации см. по следующим ссылкам:

7. Создание VPN-подключения

Затем создайте VPN-подключение типа "сеть — сеть" между шлюзом виртуальной сети и VPN-устройством. Обязательно подставьте собственные значения. Общий ключ должен соответствовать значению, использованному в конфигурации VPN-устройства. Обратите внимание, что тип "-Подключение ionType" для типа "сеть — сеть" — IPsec.

  1. Задайте переменные.

    $gateway1 = Get-AzVirtualNetworkGateway -Name VNet1GW -ResourceGroupName TestRG1
    $local = Get-AzLocalNetworkGateway -Name Site1 -ResourceGroupName TestRG1
    
  2. Создайте подключение.

    New-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 -ResourceGroupName TestRG1 `
    -Location 'East US' -VirtualNetworkGateway1 $gateway1 -LocalNetworkGateway2 $local `
    -ConnectionType IPsec -SharedKey 'abc123'
    

Через некоторое время будет установлено подключение.

8. Проверка VPN-подключения

Существует несколько разных способов для проверки VPN-подключения.

Убедиться в успешном выполнении подключения можно с помощью командлета Get-AzVirtualNetworkGatewayConnection с параметром -Debug или без него.

  1. Используйте командлет из следующего примера, подставив свои значения. При появлении запроса выберите "A", чтобы выполнить команду All (Все). В примере параметр --name — это имя подключения, которое требуется проверить.

    Get-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 -ResourceGroupName TestRG1
    
  2. После завершения работы командлета просмотрите результаты. В следующем примере показано, что подключение установлено (состояние "Подключено"), а также указан объем полученных и отправленных данных в байтах.

    "connectionStatus": "Connected",
    "ingressBytesTransferred": 33509044,
    "egressBytesTransferred": 4142431
    

Подключение к виртуальной машине

Вы можете подключиться к виртуальной машине, развернутой в виртуальной сети, создав Подключение удаленного рабочего стола на виртуальной машине. Лучший способ проверить, можете ли вы подключиться к своей виртуальной машине, — подключиться, используя частный IP-адрес, а не имя компьютера. Таким образом, вы проверяете, можете ли вы подключиться, а не правильно ли настроено разрешение имен.

  1. Найдите частный IP-адрес. Частный IP-адрес виртуальной машины можно найти, просматривая свойства виртуальной машины в портал Azure или с помощью PowerShell.

    • портал Azure. Найдите виртуальную машину в портал Azure. Просмотрите свойства виртуальной машины. Там будет указан частный IP-адрес.

    • PowerShell. Используйте пример для просмотра списка виртуальных машин и частных IP-адресов из групп ресурсов. Вам не нужно изменять этот пример перед использованием.

      $VMs = Get-AzVM
      $Nics = Get-AzNetworkInterface | Where-Object VirtualMachine -ne $null
      
      foreach ($Nic in $Nics) {
      $VM = $VMs | Where-Object -Property Id -eq $Nic.VirtualMachine.Id
      $Prv = $Nic.IpConfigurations | Select-Object -ExpandProperty PrivateIpAddress
      $Alloc = $Nic.IpConfigurations | Select-Object -ExpandProperty PrivateIpAllocationMethod
      Write-Output "$($VM.Name): $Prv,$Alloc"
      }
      
  2. Убедитесь, что вы подключены к виртуальной сети.

  3. Откройте Подключение удаленного рабочего стола, введя Подключение RDP или удаленный рабочий стол в поле поиска на панели задач. Затем выберите Подключение удаленного рабочего стола. Вы также можете открыть Подключение удаленного mstsc рабочего стола с помощью команды в PowerShell.

  4. В сеансе подключения к удаленному рабочему столу введите частный IP-адрес виртуальной машины. Вы можете выбрать "Показать параметры" , чтобы настроить другие параметры, а затем подключиться.

Если у вас возникли проблемы с подключением к виртуальной машине через VPN-подключение, проверка следующие моменты:

  • Убедитесь, что вы используете активное VPN-подключение.
  • Убедитесь, что подключаетесь к частному IP-адресу виртуальной машины.
  • Если вы можете подключиться к виртуальной машине с помощью частного IP-адреса, но не имени компьютера, убедитесь, что dns настроен правильно. Дополнительные сведения о том, как работает разрешение имен для виртуальных машин, см. в разделе "Разрешение имен" для виртуальных машин.

Дополнительные сведения о подключениях RDP см. в статье Устранение неполадок с подключением к виртуальной машине Azure через удаленный рабочий стол.

Изменение префиксов IP-адресов для локального сетевого шлюза

Если префиксы IP-адресов, которые должны перенаправляться к локальному расположению, изменились, можно изменить шлюз локальной сети. При использовании этих примеров настройте параметры в соответствии с вашей средой.

Чтобы добавить дополнительные префиксы адресов:

  1. Задайте переменную для локального сетевого шлюза.

    $local = Get-AzLocalNetworkGateway -Name Site1 -ResourceGroupName TestRG1
    
  2. Измените префиксы. Указанные значения перезаписывают предыдущие значения.

    Set-AzLocalNetworkGateway -LocalNetworkGateway $local `
    -AddressPrefix @('10.101.0.0/24','10.101.1.0/24','10.101.2.0/24')
    

Чтобы удалить префиксы адресов, используйте фрагмент кода ниже.

Не указывайте префиксы, которые больше не нужны. В этом примере нам больше не нужен префикс 10.101.2.0/24 (из предыдущего примера), поэтому мы обновим шлюз локальной сети и исключим этот префикс.

  1. Задайте переменную для локального сетевого шлюза.

    $local = Get-AzLocalNetworkGateway -Name Site1 -ResourceGroupName TestRG1
    
  2. Укажите шлюз с обновленными префиксами.

    Set-AzLocalNetworkGateway -LocalNetworkGateway $local `
    -AddressPrefix @('10.101.0.0/24','10.101.1.0/24')
    

Изменение IP-адреса шлюза для локального сетевого шлюза

Если общедоступный IP-адрес VPN-устройства, к которому вы хотите подключиться, изменился, измените шлюз локальной сети в соответствии с изменениями. При изменении этого значения вы также можете изменить префиксы адресов. Не забудьте указать имеющееся имя шлюза локальной сети для перезаписи текущих параметров. Если используется другое имя, необходимо создать новый шлюз локальной сети вместо перезаписи существующего.

New-AzLocalNetworkGateway -Name Site1 `
-Location "East US" -AddressPrefix @('10.101.0.0/24','10.101.1.0/24') `
-GatewayIpAddress "5.4.3.2" -ResourceGroupName TestRG1

Удаление подключения шлюза

Узнать имя своего подключения можно с помощью командлета Get-AzVirtualNetworkGatewayConnection'.

Remove-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 `
-ResourceGroupName TestRG1

Следующие шаги