使用 PowerShell 从不同的部署模型连接虚拟网络

本文可帮助你将经典 VNet 连接到资源管理器 VNet,以使位于单独部署模型中的资源能够相互通信。 本文中的步骤使用 PowerShell。

本文适用于已经拥有使用经典(旧版)部署模型创建的 VNet,并且现在希望将经典 VNet 连接到使用最新部署模型创建的另一个 VNet 的客户。 如果还没有旧版 VNet,请改用创建 VNet 到 VNet 连接一文。

体系结构

将经典 VNet 连接到 Resource Manager VNet 类似于将 VNet 连接到本地站点位置。 这两种连接类型都使用 VPN 网关来提供使用 IPsec/IKE 的安全隧道。 可以在位于不同订阅、不同区域中的 VNet 之间创建连接。 还可以连接已连接到本地网络的 VNet,只要网关是动态或基于路由的。 有关 VNet 到 VNet 连接的详细信息,请参阅 VNet 到 VNet 连接常见问题解答

对于此配置,会在虚拟网络之间创建基于 IPsec/IKE VPN 隧道的 VPN 网关连接。 请确保 VNet 的范围不互相重叠,也不与它们连接到的任何本地网络重叠。

下表显示了有关如何定义示例 VNet 和本地站点的示例:

虚拟网络 地址空间 区域 连接到本地网络站点
ClassicVNet (10.1.0.0/16) 中国东部 2 RMVNetSite (192.168.0.0/16)
RMVNet (192.168.0.0/16) 中国北部 2 ClassicVNetSite (10.1.0.0/16)

先决条件

以下步骤指导完成为每个 VNet 配置动态或基于路由的网关以及在网关之间创建 VPN 连接所需的设置。 此配置不支持静态网关或基于策略的网关。

这些步骤假定已创建旧版经典 VNet 和资源管理器 VNet。

示例设置

可以使用这些值来更好地了解示例。

经典 VNet

VNet 名称 = ClassicVNet
资源组 = ClassicRG 位置 = 中国东部 2
虚拟网络地址空间 = 10.1.0.0/16
Subnet1 = 10.1.0.0/24
GatewaySubnet = 10.1.255.0/27
本地网络名称 = RMVNetSite
网关类型 = DynamicRouting

Resource Manager VNet

VNet 名称 = RMVNet
资源组 = RMRG
虚拟网络 IP 地址空间 = 192.168.0.0/16
Subnet1 = 192.168.1.0/24
GatewaySubnet = 192.168.255.0/27
位置 = 中国北部 2
网关公共 IP 名称 = rmgwpip
本地网络网关 = ClassicVNetSite
虚拟网关名称 = RMGateway
网关 IP 地址配置 = gwipconfig

配置经典 VNet

本部分将配置已有的经典 VNet。 如果 VNet 已有网关,请验证网关是否基于路由,然后继续下一部分。 如果网关并非基于路由,请先删除网关,然后再继续执行后续步骤。 稍后将有机会创建新的网关。

1. 下载网络配置文件

  1. 在 PowerShell 控制台中,使用提升的权限登录到 Azure 帐户。 以下 cmdlet 会提示提供 Azure 帐户的登录凭据。 登录后它会下载帐户设置,以便这些信息可供 Azure PowerShell 使用。 在本部分中使用经典服务管理 (SM) Azure PowerShell cmdlet。

    Add-AzureAccount -Environment AzureChinaCloud
    

    获取 Azure 订阅。

    Get-AzureSubscription
    

    如果有多个订阅,请选择要使用的订阅。

    Select-AzureSubscription -SubscriptionName "Name of subscription"
    
  2. 在计算机上创建目录。 在本示例中,我们创建了 AzureNet。

  3. 通过运行以下命令,导出 Azure 网络配置文件。 如有必要,可以将文件的导出位置更改为其他位置。

    Get-AzureVNetConfig -ExportToFile C:\AzureNet\NetworkConfig.xml
    
  4. 打开下载的 .xml 文件进行编辑。 有关网络配置文件的示例,请参阅网络配置架构

  5. 记下 VirtualNetworkSite name= 值。 如果使用门户创建了经典 VNet,则名称遵循类似于“Group ClassicRG ClassicVNet”的格式,而不是门户中的“ClassicVNet”。

2. 验证网关子网

在 VirtualNetworkSites 元素中,向 VNet 添加一个网关子网(如果尚未创建)。 网关子网必须命名为“GatewaySubnet”,否则 Azure 无法识别并将其用作网关子网。

重要

不支持网关子网上的网络安全组 (NSG)。 将网络安全组关联到此子网可能会导致虚拟网络网关(VPN 和 ExpressRoute 网关)停止按预期方式工作。 有关网络安全组的详细信息,请参阅什么是网络安全组?

示例:

<VirtualNetworkSites>
  <VirtualNetworkSite name="ClassicVNet" Location="China East 2">
    <AddressSpace>
      <AddressPrefix>10.1.0.0/16</AddressPrefix>
    </AddressSpace>
    <Subnets>
      <Subnet name="Subnet1">
        <AddressPrefix>10.1.0.0/24</AddressPrefix>
      </Subnet>
      <Subnet name="GatewaySubnet">
        <AddressPrefix>10.1.255.0/27</AddressPrefix>
      </Subnet>
    </Subnets>
  </VirtualNetworkSite>
</VirtualNetworkSites>

3. 添加本地网络站点

所添加的本地网络站点表示要连接到的 RM VNet。 如果文件中尚不存在 LocalNetworkSites 元素,请进行添加。 此时,在配置中,VPNGatewayAddress 可以是任何有效的公共 IP 地址,因为我们尚未针对 Resource Manager VNet 创建网关。 一旦创建 RM 网关,便会将此占位符 IP 地址替换为已分配给 RM 网关的正确公共 IP 地址。

<LocalNetworkSites>
  <LocalNetworkSite name="RMVNetSite">
    <AddressSpace>
      <AddressPrefix>192.168.0.0/16</AddressPrefix>
    </AddressSpace>
    <VPNGatewayAddress>5.4.3.2</VPNGatewayAddress>
  </LocalNetworkSite>
</LocalNetworkSites>

4. 将 VNet 与本地网络站点关联

在此部分中,我们将指定要将 VNet 连接到的本地网络站点。 在本例中,该站点即前面提到的资源管理器 VNet。 请确保名称相匹配。 此步骤不会创建网关。 它指定网关将连接到的本地网络。

<Gateway>
  <ConnectionsToLocalNetwork>
    <LocalNetworkSiteRef name="RMVNetSite">
      <Connection type="IPsec" />
    </LocalNetworkSiteRef>
  </ConnectionsToLocalNetwork>
</Gateway>

5. 保存文件并上传

保存文件,然后运行以下命令以将其导入到 Azure。 确保根据环境需要更改文件路径。

Set-AzureVNetConfig -ConfigurationPath C:\AzureNet\NetworkConfig.xml

表明导入成功的类似结果随即显示。

OperationDescription        OperationId                      OperationStatus                                                
--------------------        -----------                      ---------------                                                
Set-AzureVNetConfig        e0ee6e66-9167-cfa7-a746-7casb9    Succeeded 

6. 创建网关

运行此示例之前,请参阅所下载的网络配置文件,了解 Azure 所需要的确切名称。 网络配置文件包含了经典虚拟网络的值。 使用门户创建经典 VNet 时,网络配置文件中的虚拟网络名称有所不同。 例如,如果使用 Azure 门户创建一个名为“Classic VNet”的经典 VNet,并在资源组中创建一个名为“ClassicRG”的经典 VNet,则网络配置文件中的名称将变为“Group ClassicRG Classic VNet”。 使用 PowerShell 时,请始终使用网络配置文件中包含的名称。 指定包含空格的 VNet 的名称时,请使用引号将值引起来。

使用以下示例创建动态路由网关:

New-AzureVNetGateway -VNetName ClassicVNet -GatewayType DynamicRouting

可以使用 Get-AzureVNetGateway cmdlet 检查网关状态。

配置 RM VNet 网关

先决条件是假设你已创建了一个 RM VNet。 在此步骤中,你将为 RM VNet 创建一个 VPN 网关。 请务必在检索到经典 VNet 的网关的公共 IP 地址之后再开始执行以下步骤。

  1. 在 PowerShell 控制台中登录到 Azure 帐户。 以下 cmdlet 会提示提供 Azure 帐户的登录凭据。 登录后将下载帐户设置,以便 Azure PowerShell 使用这些设置。

    Connect-AzAccount -Environment AzureChinaCloud
    

    若要验证是否在使用正确的订阅,请运行以下 cmdlet:

    Get-AzSubscription
    

    如果有多个订阅,请指定要使用的订阅。

    Select-AzSubscription -SubscriptionName "Name of subscription"
    
  2. 创建本地网络网关。 在虚拟网络中,局域网网关通常指本地位置。 在本例中,本地网络网关是指经典 VNet。 指定该网关的名称以供 Azure 引用,同时指定地址空间前缀。 Azure 使用指定的 IP 地址前缀来识别要发送到本地位置的流量。 如果稍后需要在创建网关之前调整此处的信息,可以修改这些值并再次运行该示例。

    -Name 是要分配以指代本地网络网关的名称。
    -AddressPrefix 是经典 VNet 的地址空间。
    -GatewayIpAddress 是经典 VNet 网关的公共 IP 地址。 请务必更改下面的示例文本“n.n.n.n”以反映正确的 IP 地址。

    New-AzLocalNetworkGateway -Name ClassicVNetSite `
    -Location "China East 2" -AddressPrefix "10.1.0.0/16" `
    -GatewayIpAddress "n.n.n.n" -ResourceGroupName RMRG
    
  3. 请求一个公共 IP 地址并将其分配到 Resource Manager VNet 的虚拟网络网关。 无法指定要使用的 IP 地址。 IP 地址动态分配到虚拟网络网关。 但是,这并不意味着 IP 地址会更改。 虚拟网络网关 IP 地址只在删除或重新创建网关时更改。 该地址不会因为网关大小调整、重置或其他内部维护/升级而更改。

    本步骤还将设置一个要在后续步骤中使用的变量。

    $ipaddress = New-AzPublicIpAddress -Name rmgwpip `
    -ResourceGroupName RMRG -Location 'China North 2' `
    -AllocationMethod Dynamic
    
  4. 验证虚拟网络是否包含网关子网。 如果不存在任何网关子网,则添加一个。 请确保网关子网命名为 GatewaySubnet

    $vnet = Get-AzVirtualNetwork -ResourceGroupName RMRG -Name RMVNet
    Add-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix 192.168.255.0/27 -VirtualNetwork $vnet
    Set-AzVirtualNetwork -VirtualNetwork $vnet
    
  5. 通过运行以下命令,检索用于网关的子网。 在此步骤中,我们还将设置一个要在下一步使用的变量。

    -Name 是 Resource Manager VNet 的名称。
    -ResourceGroupName 是 VNet 所关联的资源组。 此 VNet 必须已经存在网关子网,并且该子网必须命名为 GatewaySubnet 才能正常工作。

    $subnet = Get-AzVirtualNetworkSubnetConfig -Name GatewaySubnet `
    -VirtualNetwork (Get-AzVirtualNetwork -Name RMVNet -ResourceGroupName RMRG)
    
  6. 创建网关 IP 寻址配置。 网关配置定义要使用的子网和公共 IP 地址。 使用以下示例创建网关配置。

    在本步骤中,-SubnetId 和 -PublicIpAddressId 参数必须分别从子网和 IP 地址对象传递 ID 属性。 不能使用简单字符串。 将在请求公共 IP 的步骤和检索子网的步骤中设置这些变量。

    $gwipconfig = New-AzVirtualNetworkGatewayIpConfig `
    -Name gwipconfig -SubnetId $subnet.id `
    -PublicIpAddressId $ipaddress.id
    
  7. 通过运行以下命令,创建 Resource Manager 虚拟网络网关。 -VpnType 必须是 RouteBased。 创建网关可能需要 45 分钟或更长时间。

    New-AzVirtualNetworkGateway -Name RMGateway -ResourceGroupName RMRG `
    -Location "China North 2" -GatewaySKU Standard -GatewayType Vpn `
    -IpConfigurations $gwipconfig `
    -EnableBgp $false -VpnType RouteBased
    
  8. VPN 网关创建好后,复制公共 IP 地址。 为经典 VNet 配置本地网络设置时要使用该地址。 可以使用以下 cmdlet 来检索公共 IP 地址。 公共 IP 地址在返回结果中作为 IpAddress 列出。

    Get-AzPublicIpAddress -Name rmgwpip -ResourceGroupName RMRG
    

修改经典 VNet 本地站点设置

本节涉及经典 VNet。 在指定用于连接到资源管理器 VPN 网关的本地站点设置时所指定的占位符 IP 地址会被替换。

  1. 导出网络配置文件。

    Get-AzureVNetConfig -ExportToFile C:\AzureNet\NetworkConfig.xml
    
  2. 使用文本编辑器,修改 VPNGatewayAddress 的值。 将占位符 IP 地址替换为 Resource Manager 网关的公共 IP 地址,然后保存所做的更改。

    <VPNGatewayAddress>13.68.210.16</VPNGatewayAddress>
    
  3. 将修改后的网络配置文件导入到 Azure。

    Set-AzureVNetConfig -ConfigurationPath C:\AzureNet\NetworkConfig.xml
    

在网关之间创建连接

在网关之间创建连接需要用到 PowerShell。 可能需要添加 Azure 帐户才能使用经典版 PowerShell cmdlet。 为此,请使用 Add-AzureAccount -Environment AzureChinaCloud

  1. 在 PowerShell 控制台中设置共享密钥。 运行 cmdlet 之前,请参阅已下载的网络配置文件,了解 Azure 所需要的确切名称。 指定包含空格的 VNet 的名称时,请使用单引号将值引起来。

    在以下示例中,-VNetName 是经典 VNet 的名称,-LocalNetworkSiteName 是为本地网络站点指定的名称。 验证之前下载的网络配置文件中两者的名称。

    -SharedKey 是你生成并指定的值。 在示例中,我们使用的是“abc123”,但可以生成和使用更复杂的。 重要的是,此处指定的值必须与下一步中创建连接时指定的值相同。 返回结果应显示“状态:成功”

    Set-AzureVNetGatewayKey -VNetName ClassicVNet `
    -LocalNetworkSiteName RMVNetSite -SharedKey abc123
    
  2. 运行以下命令创建 VPN 连接:

    设置变量。

    $vnet01gateway = Get-AzLocalNetworkGateway -Name ClassicVNetSite -ResourceGroupName RMRG
    $vnet02gateway = Get-AzVirtualNetworkGateway -Name RMGateway -ResourceGroupName RMRG
    

    创建连接。 请注意,-ConnectionType 是 IPsec,而不是 Vnet2Vnet。

    New-AzVirtualNetworkGatewayConnection -Name RM-Classic -ResourceGroupName RMRG `
    -Location "China North 2" -VirtualNetworkGateway1 `
    $vnet02gateway -LocalNetworkGateway2 `
    $vnet01gateway -ConnectionType IPsec -RoutingWeight 10 -SharedKey 'abc123'
    

验证连接

经典 VNet 到 RM VNet

可使用“Get-AzureVNetConnection”cmdlet 来验证连接是否已成功。 必须在计算机上本地运行此 cmdlet。

  1. 使用以下 cmdlet 示例,配置符合自己需要的值。 如果虚拟网络的名称包含空格,必须将该名称括在引号中。 使用虚拟网络的名称,如网络配置文件中所示。

    Get-AzureVNetConnection "ClassicVNet"
    
  2. cmdlet 运行完毕后,查看该值。 在以下示例中,连接状态显示为“已连接”,且可以看到入口和出口字节数。

    ConnectivityState         : Connected
    EgressBytesTransferred    : 0
    IngressBytesTransferred   : 0
    LastConnectionEstablished : 4/25/2022 4:24:34 PM
    LastEventID               : 24401
    LastEventMessage          : The connectivity state for the local network site 'RMVNetSite' changed from Not Connected to Connected.
    LastEventTimeStamp        : 4/25/2022 4:24:34 PM
    LocalNetworkSiteName      : RMVNetSite
    OperationDescription      :
    OperationId               :
    OperationStatus           :
    

RM VNet 到经典 VNet

可以验证连接是否成功,方法是使用“Get-AzVirtualNetworkGatewayConnection”cmdlet,带或不带“-Debug”。

  1. 使用以下 cmdlet 示例,配置符合自己需要的值。 如果出现提示,请选择“A”运行“所有”。 在此示例中,“ -Name”是指要测试的连接的名称。

    Get-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 -ResourceGroupName TestRG1
    
  2. cmdlet 运行完毕后,查看该值。 在以下示例中,连接状态显示为“已连接”,且可以看到入口和出口字节数。

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

后续步骤

有关 VNet 到 VNet 连接的详细信息,请参阅 VPN 网关常见问题解答