本文可帮助你将经典 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 的地址范围不相互重叠,也不与网关可能连接到的其他连接的任何范围重叠。 
- 本文中使用 PowerShell。 在计算机上安装适用于资源管理器和服务管理的最新 PowerShell cmdlet。 - 虽然可以执行一些 PowerShell 命令,但需要安装这两个版本的 cmdlet 才能正确创建连接。 - 服务管理(经典)PowerShell cmdlet。 安装服务管理 cmdlet 时,可能需要修改执行策略才能安装经典版本的 Azure 模块。 
 - 有关详细信息,请参阅如何安装和配置 Azure PowerShell。 
示例设置
可以使用这些值来更好地了解示例。
经典 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. 下载网络配置文件
- 在 PowerShell 控制台中,使用提升的权限登录到 Azure 帐户。 以下 cmdlet 会提示提供 Azure 帐户的登录凭据。 登录后它会下载帐户设置,以便这些信息可供 Azure PowerShell 使用。 在本部分中使用经典服务管理 (SM) Azure PowerShell cmdlet。 - Add-AzureAccount -Environment AzureChinaCloud- 获取 Azure 订阅。 - Get-AzureSubscription- 如果有多个订阅,请选择要使用的订阅。 - Select-AzureSubscription -SubscriptionName "Name of subscription"
- 在计算机上创建目录。 在本示例中,我们创建了 AzureNet。 
- 通过运行以下命令,导出 Azure 网络配置文件。 如有必要,可以将文件的导出位置更改为其他位置。 - Get-AzureVNetConfig -ExportToFile C:\AzureNet\NetworkConfig.xml
- 打开下载的 .xml 文件进行编辑。 有关网络配置文件的示例,请参阅网络配置架构。 
- 记下 - 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 地址之后再开始执行以下步骤。
- 在 PowerShell 控制台中登录到 Azure 帐户。 以下 cmdlet 会提示提供 Azure 帐户的登录凭据。 登录后将下载帐户设置,以便 Azure PowerShell 使用这些设置。 - Connect-AzAccount -Environment AzureChinaCloud- 若要验证是否在使用正确的订阅,请运行以下 cmdlet: - Get-AzSubscription- 如果有多个订阅,请指定要使用的订阅。 - Select-AzSubscription -SubscriptionName "Name of subscription"
- 创建本地网络网关。 在虚拟网络中,局域网网关通常指本地位置。 在本例中,本地网络网关是指经典 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
- 请求一个公共 IP 地址并将其分配到 Resource Manager VNet 的虚拟网络网关。 无法指定要使用的 IP 地址。 IP 地址动态分配到虚拟网络网关。 但是,这并不意味着 IP 地址会更改。 虚拟网络网关 IP 地址只在删除或重新创建网关时更改。 该地址不会因为网关大小调整、重置或其他内部维护/升级而更改。 - 本步骤还将设置一个要在后续步骤中使用的变量。 - $ipaddress = New-AzPublicIpAddress -Name rmgwpip ` -ResourceGroupName RMRG -Location 'China North 2' ` -AllocationMethod Dynamic
- 验证虚拟网络是否包含网关子网。 如果不存在任何网关子网,则添加一个。 请确保网关子网命名为 GatewaySubnet。 - $vnet = Get-AzVirtualNetwork -ResourceGroupName RMRG -Name RMVNet Add-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix 192.168.255.0/27 -VirtualNetwork $vnet Set-AzVirtualNetwork -VirtualNetwork $vnet
- 通过运行以下命令,检索用于网关的子网。 在此步骤中,我们还将设置一个要在下一步使用的变量。 - -Name 是 Resource Manager VNet 的名称。 
 -ResourceGroupName 是 VNet 所关联的资源组。 此 VNet 必须已经存在网关子网,并且该子网必须命名为 GatewaySubnet 才能正常工作。- $subnet = Get-AzVirtualNetworkSubnetConfig -Name GatewaySubnet ` -VirtualNetwork (Get-AzVirtualNetwork -Name RMVNet -ResourceGroupName RMRG)
- 创建网关 IP 寻址配置。 网关配置定义要使用的子网和公共 IP 地址。 使用以下示例创建网关配置。 - 在本步骤中,-SubnetId 和 -PublicIpAddressId 参数必须分别从子网和 IP 地址对象传递 ID 属性。 不能使用简单字符串。 将在请求公共 IP 的步骤和检索子网的步骤中设置这些变量。 - $gwipconfig = New-AzVirtualNetworkGatewayIpConfig ` -Name gwipconfig -SubnetId $subnet.id ` -PublicIpAddressId $ipaddress.id
- 通过运行以下命令,创建 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
- VPN 网关创建好后,复制公共 IP 地址。 为经典 VNet 配置本地网络设置时要使用该地址。 可以使用以下 cmdlet 来检索公共 IP 地址。 公共 IP 地址在返回结果中作为 IpAddress 列出。 - Get-AzPublicIpAddress -Name rmgwpip -ResourceGroupName RMRG
修改经典 VNet 本地站点设置
本节涉及经典 VNet。 在指定用于连接到资源管理器 VPN 网关的本地站点设置时所指定的占位符 IP 地址会被替换。
- 导出网络配置文件。 - Get-AzureVNetConfig -ExportToFile C:\AzureNet\NetworkConfig.xml
- 使用文本编辑器,修改 VPNGatewayAddress 的值。 将占位符 IP 地址替换为 Resource Manager 网关的公共 IP 地址,然后保存所做的更改。 - <VPNGatewayAddress>13.68.210.16</VPNGatewayAddress>
- 将修改后的网络配置文件导入到 Azure。 - Set-AzureVNetConfig -ConfigurationPath C:\AzureNet\NetworkConfig.xml
在网关之间创建连接
在网关之间创建连接需要用到 PowerShell。 可能需要添加 Azure 帐户才能使用经典版 PowerShell cmdlet。 为此,请使用 Add-AzureAccount -Environment AzureChinaCloud。
- 在 PowerShell 控制台中设置共享密钥。 运行 cmdlet 之前,请参阅已下载的网络配置文件,了解 Azure 所需要的确切名称。 指定包含空格的 VNet 的名称时,请使用单引号将值引起来。 - 在以下示例中,-VNetName 是经典 VNet 的名称,-LocalNetworkSiteName 是为本地网络站点指定的名称。 验证之前下载的网络配置文件中两者的名称。 - -SharedKey 是你生成并指定的值。 在示例中,我们使用的是“abc123”,但可以生成和使用更复杂的。 重要的是,此处指定的值必须与下一步中创建连接时指定的值相同。 返回结果应显示“状态:成功”。 - Set-AzureVNetGatewayKey -VNetName ClassicVNet ` -LocalNetworkSiteName RMVNetSite -SharedKey abc123
- 运行以下命令创建 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。
- 使用以下 cmdlet 示例,配置符合自己需要的值。 如果虚拟网络的名称包含空格,必须将该名称括在引号中。 使用虚拟网络的名称,如网络配置文件中所示。 - Get-AzureVNetConnection "ClassicVNet"
- 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”。
- 使用以下 cmdlet 示例,配置符合自己需要的值。 如果出现提示,请选择“A”运行“所有”。 在此示例中,“ -Name”是指要测试的连接的名称。 - Get-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 -ResourceGroupName TestRG1
- cmdlet 运行完毕后,查看该值。 在以下示例中,连接状态显示为“已连接”,且可以看到入口和出口字节数。 - "connectionStatus": "Connected", "ingressBytesTransferred": 33509044, "egressBytesTransferred": 4142431
后续步骤
有关 VNet 到 VNet 连接的详细信息,请参阅 VPN 网关常见问题解答。