使用 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 的地址范围不相互重叠,也不与网关可能连接到的其他连接的任何范围重叠。
本文中使用 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 网关常见问题解答。