<!-- AI_TASK_START: AI标题翻译 -->
[解决方案] 子网对等
<!-- AI_TASK_END: AI标题翻译 -->
<!-- AI_TASK_START: AI竞争分析 -->
# 产品功能分析
## 新功能/新产品概述
Subnet Peering 是 Azure 的一项新功能,允许在子网级别选择性地共享 IP 地址空间,而不是像传统 **VNET Peering** 那样合并整个虚拟网络的地址空间。核心目标是解决微分段(micro-segmentation)和 IP 地址空间耗尽的问题,提供更精细的网络隔离和资源管理。
背景在于,许多企业应用需要将前端子网暴露给外部,同时保持应用层和数据库层隔离;或在 IP 地址资源有限时,避免不必要的地址冲突。该功能适用于云计算环境中的多层架构场景,目标用户群包括需要增强网络安全性和资源效率的企业 IT 团队,市场定位是提升 Azure 网络功能的灵活性和可扩展性。
## 关键客户价值
- **微分段实现**:通过选择性子网对等,用户可以仅共享特定子网(如前端子网),有效隔离内部资源,避免使用 **Network Security Groups (NSGs)** 的额外复杂性,与传统 **VNET Peering** 相比,显著提高了网络安全性和控制粒度,但可能在多子网环境中增加配置管理难度。
- **IP 地址空间优化**:解决了地址空间重叠问题,允许在资源有限的场景下进行部分对等,即使存在重叠前缀(如 172.16.0.0/16),也能成功建立连接,与传统方案的全局合并不同,这提升了地址利用效率,特别适用于大型企业网络。
- **业务场景差异化**:相比其他云提供商的网络对等功能,Azure 的 Subnet Peering 强调子网级别的灵活性,实现定向路由和访问控制,在高安全性需求场景中体现出优势,如多租户环境,但其当前仅支持 CLI 配置可能限制了快速部署的便利性。
## 关键技术洞察
- **技术独特性**:基于 **Azure CLI** 的新参数(如 --peer-complete-vnets 0、--local-subnet-names 和 --remote-subnet-names),实现子网级对等连接,仅共享指定子网的 IP 范围,例如将 vnet-left 的 subnet1 与 vnet-right 的 subnet0 和 subnet2 对等。工作原理是通过修改有效路由表(如使用 az network nic show-effective-route-table),使指定子网间形成路由域,而非整个 VNET。
- **创新点与影响**:创新在于允许部分对等,即使地址空间重叠,也能避免错误(如 VnetAddressSpacesOverlap),这对性能和安全性有积极影响,例如减少不必要的流量路由,提高网络可用性;但在大规模组网时,可能面临管理复杂度上升的问题,如需要双向配置以确保路由对称性。
- **挑战与解决方式**:当前不支持 Azure 门户,只能通过 CLI、Bicep 或 ARM 模板部署,这增加了初始学习曲线;原文提到需要订阅允许列表(通过特定表单),作为缓解方式,确保功能在生产环境中安全测试和使用。
## 其他信息
功能已在所有 Azure 区域可用,支持通过 **Azure CLI**、Bicep、ARM 模板和 Terraform 部署,未来计划集成到 **Azure Virtual Network Manager (AVNM)** 和 **Virtual WAN** 中,以实现企业级规模扩展。
<!-- AI_TASK_END: AI竞争分析 -->
<!-- AI_TASK_START: AI全文翻译 -->
# 子网对等
**原始链接:** [https://techcommunity.microsoft.com/blog/azurenetworkingblog/subnet-peering/4397640](https://techcommunity.microsoft.com/blog/azurenetworkingblog/subnet-peering/4397640)
**发布时间:** 2025-03-26
**厂商:** AZURE
**类型:** TECH-BLOG
---

Azure Networking Blog
# 子网对等
2025年3月26日
# 基础知识:VNET 对等 (VNET Peering)
Azure 中的虚拟网络 (Virtual Networks) 可以通过 [VNET 对等](<https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview>) 进行连接。对等后的 VNET 成为一个路由域,这意味着每个 VNET 的整个 IP 空间对另一个 VNET 可见且可达。这对于许多应用场景非常有用:提供线速连接,而无需网关或其他复杂性。
在下图中,vnet-left 和 vnet-right 已对等:

在门户中,vnet-left 的显示如下(右侧 VNET 类似):

任一 VNET 中的虚拟机 (VM) 的有效路由显示了对等 VNET 的整个 IP 空间。
对于 vnet-left 中的 vm left-1:
az network nic show-effective-route-table -g sn-rg -n left-1701 -o table
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.0.0.0/16 VnetLocal
Default Active 10.1.0.0/16 VNetPeering
Default Active 0.0.0.0/0 Internet
对于 vnet-right 中的 vm right-1:
az network nic show-effective-route-table -g sn-rg -n right-159 -o table
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.1.0.0/16 VnetLocal
Default Active 10.0.0.0/16 VNetPeering
Default Active 0.0.0.0/0 Internet
# 问题
在某些情况下,完全合并 VNET 的地址空间并非理想选择。
考虑微分段 (micro-segmentation):多层应用的前端必须从 VNET 外部暴露和访问,而应用层和数据库层应保持隔离。目前,使用网络安全组 (Network Security Groups) 来实现隔离;它们可以阻止来自 VNET IP 范围或前端子网外的来源访问内部层。
另一个场景是 IP 地址空间耗尽:许多公司中,私有 IP 空间是一种稀缺资源。可能没有足够的可用空间为每个 VNET 分配一个独特、可路由的足够大的段来容纳所有托管资源。而且,并非所有资源都需要可路由 IP 地址,因为它们无需从 VNET 外部访问。
# 解决方案:子网对等 (Subnet Peering)
上述场景可以通过在子网级别选择性共享 VNET 的地址范围来解决。
引入 [子网对等](<https://learn.microsoft.com/en-us/azure/virtual-network/how-to-configure-subnet-peering>):这一新功能允许在子网级别选择性共享 IP 地址空间。
子网对等目前无法通过 Azure 门户配置,但可以通过 Azure CLI 配置。现有 _az network vnet peering create_ 命令添加了几个新参数:
- _\--peer-complete-vnets {0, 1 (默认), f, false, n, no, t, true, y, yes}_:设置为 0、false 或 no 时,将对等配置为子网级别,而不是 VNET 级别。
- _\--local-subnet-names_:当前 VNET(即 _\--vnet-name_ 参数指定的 VNET)中要对等的子网列表。
- _\--remote-subnet-names_:远程 VNET(即 _\--remote-vnet_ 参数指定的 VNET)中要对等的子网列表。
- _\--enable-only-ipv6 {0(默认), 1, f, false, n, no, t, true, y, yes}_:设置为 true 时,仅对等双栈 VNET 中的 IPv6 空间。
注意:虽然子网对等在所有 Azure 区域可用,但仍需通过 [此表单](<https://forms.office.com/pages/responsepage.aspx?id=v4j5cvGGr0GRqy180BHbR4Qnh_A4SJlJmB_ayXa7POFUNzlOVDdXQlY5WUxHWkcyNTZPRFpQV01VUi4u&route=shorturl>) 进行订阅允许列表。请阅读表单中的第 11 点并注意相关注意事项。
## 分段
此命令将 vnet-left 中的 subnet1 对等到 vnet-right 中的 subnet0 和 subnet2:
_az network vnet peering create -g sn-rg -n left0-right0 --vnet-name vnet-left --local-subnet-names subnet1 --remote-subnet-names subnet0 subnet2 --remote-vne vnet-right --peer-complete-vnets 0 --allow-vnet-access 1_
然后在相反方向建立对等:
_az network vnet peering create -g sn-rg -n right0-left0 --vnet-name vnet-right --local-subnet-names subnet0 subnet2 --remote-subnet-names subnet1 --remote-vne vnet-left --peer-complete-vnets 0 --allow-vnet-access 1_
这将使 vnet-left 中的 subnet0 和 subnet2,以及 vnet-right 中的 subnet1 断开连接,从而在对等 VNET 之间实现分段,而无需使用 NSGs。
从左到右的对等细节如下。注意本地地址空间 (localAddressSpace) 和远程地址空间 (remoteAddressSpace) 前缀是已对等本地和远程子网的那些。
其他方向类似,只是本地地址空间和远程地址空间前缀互换。
_az network vnet peering show -g sn-rg -n left0-right0 --vnet-name vnet-left_
{
"allowForwardedTraffic": false,
"allowGatewayTransit": false,
"allowVirtualNetworkAccess": true,
"doNotVerifyRemoteGateways": false,
"etag": "W/\"6a80a7da-36f4-404c-8bd8-d23e1b2bdd9a\"",
"id": "/subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-left/virtualNetworkPeerings/left0-right0",
"localAddressSpace": {
"addressPrefixes": [
"10.0.1.0/24"
]
},
"localSubnetNames": [
"subnet1"
],
"localVirtualNetworkAddressSpace": {
"addressPrefixes": [
"10.0.1.0/24"
]
},
"name": "left0-right0",
"peerCompleteVnets": false,
"peeringState": "Connected",
"peeringSyncLevel": "FullyInSync",
"provisioningState": "Succeeded",
"remoteAddressSpace": {
"addressPrefixes": [
"10.1.0.0/24",
"10.1.2.0/24"
]
},
"remoteSubnetNames": [
"subnet0",
"subnet2"
],
"remoteVirtualNetwork": {
"id": "/subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-right",
"resourceGroup": "sn-rg"
},
"remoteVirtualNetworkAddressSpace": {
"addressPrefixes": [
"10.1.0.0/24",
"10.1.2.0/24"
]
},
"remoteVirtualNetworkEncryption": {
"enabled": false,
"enforcement": "AllowUnencrypted"
},
"resourceGroup": "sn-rg",
"resourceGuid": "eb63ec9e-aa48-023e-1514-152f8ab39ae7",
"type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
"useRemoteGateways": false
}
这些对等在门户中显示为“正常”VNET 对等,因为子网对等尚未由门户支持。

唯一表明这不是完整 VNET 对等的迹象是已对等 IP 地址空间——这是远程子网(s)的子网 IP 范围。

检查 vm left-1 的有效路由显示它有 subnet0 和 subnet2 的路由,但没有 vnet-right 中的 subnet1:
_az network nic show-effective-route-table -g sn-rg -n left-1701 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.0.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.1.0.0/24 VNetPeering
Default Active 10.1.2.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
注意,vm left-0 和 left-1 也有 vnet-right 中相同子网的路由,即使它们的子网未在 _\--local-subnet-names_ 参数中列出:
_az network nic show-effective-route-table -g sn-rg -n left-0681 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.0.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.1.0.0/24 VNetPeering
Default Active 10.1.2.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
_az network nic show-effective-route-table -g sn-rg -n left-2809 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.0.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.1.0.0/24 VNetPeering
Default Active 10.1.2.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
在当前版本中,_ \--remote-subnet-names_ 中列出的子网的 IP 空间会传播到本地 VNET 的所有子网,而不仅仅是 _\--local-subnet-names_ 中列出的子网。
然而,vnet-right 中的子网仅收到 vnet-left 中 subnet1 的地址空间,如右侧 VM 的有效路由所示:
_az network nic show-effective-route-table -g sn-rg -n right-0814 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.1.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.0.1.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
_az network nic show-effective-route-table -g sn-rg -n right-159 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.1.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.0.1.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
_az network nic show-effective-route-table -g sn-rg -n right-2283 -o table_
Source State Address Prefix Next Hop Type Next Hop IP
-------- ------- ---------------- --------------- -------------
Default Active 10.1.0.0/16 VnetLocal
Default Active 172.16.0.0/24 VnetLocal
Default Active 10.0.1.0/24 VNetPeering
Default Active 0.0.0.0/0 Internet
因此,双向路由仅存在于 vnet-left 中的 subnet1 和 vnet-right 中的 subnet0 及 subnet2 之间,正如预期:

通过从 left-1 到右侧 VM 的 ping 测试来演示:
to right-0:
PING 10.1.0.4 (10.1.0.4) 56(84) bytes of data.
64 bytes from 10.1.0.4: icmp_seq=1 ttl=64 time=1.20 ms
64 bytes from 10.1.0.4: icmp_seq=2 ttl=64 time=1.24 ms
64 bytes from 10.1.0.4: icmp_seq=3 ttl=64 time=1.06 ms
64 bytes from 10.1.0.4: icmp_seq=4 ttl=64 time=1.56 ms
^C
--- 10.1.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
to right-1:
PING 10.1.1.4 (10.1.1.4) 56(84) bytes of data.
^C
--- 10.1.1.4 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4131ms
to right-2:
PING 10.1.2.4 (10.1.2.4) 56(84) bytes of data.
64 bytes from 10.1.2.4: icmp_seq=1 ttl=64 time=3.39 ms
64 bytes from 10.1.2.4: icmp_seq=2 ttl=64 time=0.968 ms
64 bytes from 10.1.2.4: icmp_seq=3 ttl=64 time=3.00 ms
64 bytes from 10.1.2.4: icmp_seq=4 ttl=64 time=2.47 ms
^C
--- 10.1.2.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
## 重叠 IP 空间
现在,向两个 VNET 添加重叠 IP 空间。
移除对等后,我们向每个 VNET 添加 172.16.0.0/16,创建 subnet3(172.16.3.0/24)并插入一个 VM。
尝试对等完整 VNET 时,会因地址空间重叠而出错:
_az network vnet peering create -g sn-rg -n left0-right0 --vnet-name vnet-left --remote-vnet vnet-right --peer-complete-vnets 1 --allow-vnet-access 1_
(VnetAddressSpacesOverlap) Cannot create or update peering /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-left/virtualNetworkPeerings/left0-right0. Virtual networks /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-left and /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-right cannot be peered because their address spaces overlap. Overlapping address prefixes: 172.16.0.0/16, 172.16.0.0/16
Code: VnetAddressSpacesOverlap

现在,我们像前一节一样重新建立子网级别对等:
_az network vnet peering create -g sn-rg -n left0-right0 --vnet-name vnet-left --local-subnet-names subnet1 --remote-subnet-names subnet0 subnet2 --remote-vne vnet-right --peer-complete-vnets 0 --allow-vnet-access 1_
_az network vnet peering create -g sn-rg -n right0-left0 --vnet-name vnet-right --local-subnet-names subnet0 subnet2 --remote-subnet-names subnet1 --remote-vne vnet-left --peer-complete-vnets 0 --allow-vnet-access 1_
尽管存在重叠地址空间,此操作成功完成。
_az network vnet peering show -g sn-rg -n left0-right0 --vnet-name vnet-left --query "[provisioningState, remoteAddressSpace]"_
[
"Succeeded",
{
"addressPrefixes": [
"10.1.0.0/24",
"10.1.2.0/24"
]
}
]
_az network vnet peering show -g sn-rg -n right0-left0 --vnet-name vnet-right --query "[provisioningState, remoteAddressSpace]"_
[
"Succeeded",
{
"addressPrefixes": [
"10.0.1.0/24"
]
}
]

现在,尝试将 vnet-left 中的 subnet3(与右侧 subnet3 重叠)包含在对等中:
_az network vnet peering create -g sn-rg -n left0-right0 --vnet-name vnet-left --local-subnet-names subnet1 subnet3 --remote-subnet-names subnet0 subnet2 --remote-vne vnet-right --peer-complete-vnets 0 --allow-vnet-access 1_
(VnetAddressSpacesOverlap) Cannot create or update peering /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-left/virtualNetworkPeerings/left0-right0. Virtual networks /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-left and /subscriptions/7cb39d93-f8a1-48a7-af6d-c8e12136f0ad/resourceGroups/sn-rg/providers/Microsoft.Network/virtualNetworks/vnet-right cannot be peered because their address spaces overlap. Overlapping address prefixes: 172.16.3.0/24
Code: VnetAddressSpacesOverlap
这表明子网对等允许部分对等包含重叠 IP 空间的 VNET。
如所述,这在私有 IP 空间短缺的场景中非常有用。
# 展望未来
子网对等现已在所有 Azure 区域可用:欢迎测试、实验并在生产环境中使用。
该功能目前仅通过最新版本的 [Azure CLI](<https://learn.microsoft.com/en-us/cli/azure/network/vnet/peering?view=azure-cli-latest>)、[Bicep](<https://learn.microsoft.com/en-us/azure/templates/microsoft.network/virtualnetworks/virtualnetworkpeerings?pivots=deployment-language-bicep>)、[ARM 模板](<https://learn.microsoft.com/en-us/azure/templates/microsoft.network/virtualnetworks/virtualnetworkpeerings?pivots=deployment-language-arm-template>)、[Terraform](<https://learn.microsoft.com/en-us/azure/templates/microsoft.network/virtualnetworks/virtualnetworkpeerings?pivots=deployment-language-terraform>) 和 PowerShell 可用。门户支持即将添加。
有意义的下一步是将在子网对等集成到 Azure 虚拟网络管理器 (Azure Virtual Network Manager,AVNM) 和虚拟广域网 (Virtual WAN) 中,从而在企业规模的网络基础架构中利用其优势。
我将继续跟踪进展并适时更新此文章。
更新于 2025 年 3 月 26 日
版本 2.0
<!-- AI_TASK_END: AI全文翻译 -->