在 Azure 中,在没有显式定义的出站连接方法的情况下将虚拟机(VM)部署到虚拟网络中时,会自动为其分配出站公共 IP 地址。 此 IP 地址支持从资源到 Internet 以及 Microsoft 内的其他公共终结点的出站连接。 此访问称为“默认出站访问”。
虚拟机的显式出站连接示例包括:
- 部署在与 NAT 网关关联的子网中。
- 已在定义了出站规则的标准负载均衡器后端池中部署。
- 已在基本公共负载均衡器后端池中部署。
- 具有与之显式关联的公共 IP 地址的虚拟机。
如何以及何时提供默认出站访问
如果部署虚拟机(VM)时没有显式出站连接方法,Azure 会为其分配默认出站公共 IP 地址。 此 IP(称为默认出站访问 IP)由Microsoft拥有,可以随时更改。 不建议将其用于生产工作负载。
注意
在某些情况下,默认出站 IP 仍分配给非特权子网中的虚拟机,即使配置了显式出站方法(例如 NAT 网关或 UDR)将流量定向到 NVA/防火墙。 这并不意味着默认出站 IP 用于出口,除非删除了这些显式方法。 若要完全删除默认出站 IP,必须将子网设为专用子网,并且必须停止并解除分配虚拟机。
重要
2026 年 3 月 31 日之后,新的虚拟网络默认使用专用子网,这意味着必须启用显式出站方法才能访问 Internet 上的公共终结点,并在Microsoft内访问公共终结点。 有关详细信息,请查看官方公告。 建议使用以下部分中所述的显式连接形式之一。 有关其他问题,请参阅“常见问题解答:默认行为更改为专用子网”部分。
为什么建议禁用默认出站访问?
安全性:默认 Internet 访问与零信任原则相矛盾。
明确性:显式连接优先于隐式访问。
稳定性:默认出站 IP 不是客户拥有的,并且可能会更改,从而导致潜在的中断。
使用默认出站访问时不起作用的配置的一些示例:
- VM 上的多个 NIC 可能会产生不一致的出站 IP
- 缩放 Azure 虚拟机规模集可能导致出站 IP 更改
- 跨虚拟机规模集的实例,出站 IP 地址不一致或非连续。
另外,
- 默认出站访问 IP 不支持分段数据包
- 默认出站访问 IP 不支持 ICMP ping
如何转换到公共连接的显式方法 (并禁用默认出站访问)?
专用子网概述
- 创建专用子网可防止子网中的任何虚拟机利用默认出站访问连接到公共终结点。
- 私有子网上的 VM 仍可以使用显式的外部连接访问 Internet(或 Microsoft 内的任何公共终结点)。
注意
某些服务在专用子网中没有明确出口方法的虚拟机上无法正常运行(例如 Windows 激活和 Windows 更新)。
如何配置专用子网
- 在 Azure 门户中,选择子网并选择复选框以启用专用子网,如下所示:
- 以下脚本使用 PowerShell 获取资源组和虚拟网络的名称,并循环访问每个子网以启用专用子网。
$resourceGroupName = ""
$vnetName = ""
$vnet = Get-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Name $vnetName
foreach ($subnet in $vnet.Subnets) {
if ($subnet.DefaultOutboundAccess -eq $null) {
$subnet.DefaultOutboundAccess = $false
Write-Output "Set 'defaultoutboundaccess' to \$false for subnet: $($subnet.Name)"
}
elseif ($subnet.DefaultOutboundAccess -eq $false) {
# Output message if the value is already $false
Write-Output "already private for subnet: $($subnet.Name)"
}
}
Set-AzVirtualNetwork -VirtualNetwork $vnet
- 使用 CLI:使用 az network vnet subnet update 更新子网,并将
--default-outbound
设置为“false”
az network vnet subnet update --resource-group rgname --name subnetname --vnet-name vnetname --default-outbound false
- 使用 Azure 资源管理器模板将
defaultOutboundAccess
参数的值设置为“false”
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vnetName": {
"type": "string",
"defaultValue": "testvm-vnet"
},
"subnetName": {
"type": "string",
"defaultValue": "default"
},
"subnetPrefix": {
"type": "string",
"defaultValue": "10.1.0.0/24"
},
"vnetAddressPrefix": {
"type": "string",
"defaultValue": "10.1.0.0/16"
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-11-01",
"name": "[parameters('vnetName')]",
"location": "westus2",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetPrefix')]",
"defaultoutboundaccess": false
}
}
]
}
}
]
}
专用子网的限制
若要激活或更新虚拟机操作系统(例如 Windows),需要显式出站连接方法。
在使用用户定义的路由 (UDR) 的配置中,任何配置的下一个跃点类型为
Internet
的路由都会在专用子网中断开。虚拟机仍能够访问专用子网中同一区域中的 Azure 存储帐户,而无需显式出站方法。 建议 NSG 控制出口连接。
专用子网不适用于用于托管 PaaS 服务的委派或托管子网。 在这些方案中,出站连接由单个服务管理。
添加显式出站方法
- 将 NAT 网关关联到虚拟机的子网。 请注意,对于大多数方案,建议使用此方法。
- 关联一个已配置了出站规则的标准负载均衡器。
- 将标准公共 IP 关联到任何虚拟机的网络接口。
- 将防火墙或网络虚拟设备(NVA)添加到虚拟网络,并使用用户定义的路由(UDR)将流量指向它。
使用灵活的编排模式管理虚拟机规模集
- 默认情况下,灵活的规模集是安全的。 通过灵活规模集创建的任何实例都不会拥有与其关联的默认出站访问 IP,因此需要显示出站方法。 如需了解详细信息,请参阅适用于虚拟机规模集的灵活业务流程模式
常见问题解答:清除默认出站 IP 警报
为什么看到一个警报,显示我的 VM 上有默认出站 IP?
有一个 NIC 级参数(defaultOutboundConnectivityEnabled),用于跟踪是否将默认出站 IP 分配给 VM/VMSS 实例。 这用于为标记此状态的 VM/VMSS 生成 Azure 门户横幅。 VM 顾问“添加显式出站方法以禁用默认出站”也通过检查此参数来运行。
如何清除此警报?
- 必须为已标记的 VM/VMSS 使用出站显式方法。 有关不同选项,请参阅上面的部分。
- 应将子网设为专用子网,以防止创建新的默认出站 IP。
- 必须停止并解除分配子网中具有标志的任何适用虚拟机,才能在 NIC 级参数和标志中反映更改。 (请注意,这在反向也是如此;为了使计算机在子网级别参数设置为 false 后获得默认出站 IP,需要停止/解除分配虚拟机。
我已使用出站显式方法,因此为什么仍会看到此警报?
在某些情况下,默认出站 IP 仍分配给非特权子网中的虚拟机,即使配置了显式出站方法(例如 NAT 网关或 UDR)将流量定向到 NVA/防火墙。 这并不意味着默认出站 IP 用于出口,除非删除了这些显式方法。 若要完全删除默认出站 IP(并删除警报),必须将子网设为专用子网,并且必须停止并解除分配虚拟机。
常见问题解答:默认行为更改为专用子网
使专用子网默认意味着什么,以及如何实现专用子网?
随着 API 版本在 2026 年 3 月 31 日之后发布,默认情况下,新 VNET 中子网的默认OutboundAccess 属性将设置为“false”。 此更改默认将子网设为专用,并阻止为这些子网中的虚拟机生成默认出站 IP。 此行为适用于所有配置方法--ARM 模板、Azure 门户、PowerShell 和 CLI。 早期版本的 ARM 模板(或可以指定旧版本的 Terraform 等工具)将继续将 defaultOutboundAccess 设置为 null,从而隐式允许出站访问。
现有 VNET 和虚拟机会发生什么情况? 在现有虚拟网络 (VNET) 中创建的新虚拟机呢?
不会对现有 VNET 进行更改。 这意味着,除非手动将子网修改为私有的,否则这些 VNET 中现有的虚拟机和新创建的虚拟机将继续生成默认的出站 IP 地址。
新的虚拟网络部署怎么样? 我的基础结构依赖于默认出站 IP,目前尚未准备好迁移到专用子网。
仍可以使用任何受支持的方法(ARM 模板、门户、CLI、PowerShell)将子网配置为非特权。 这可确保依赖于默认出站 IP 的基础结构的兼容性,并且尚未准备好转换为专用子网。
后续步骤
有关 Azure 中的出站连接的详细信息,请参阅: