Azure 中的默认出站访问

在 Azure 中,在未定义显式出站连接的虚拟网络中创建的虚拟机将获分配默认出站公共 IP 地址。 此 IP 地址实现从资源到 Internet 的外部连接。 此访问称为“默认出站访问”。

虚拟机的显式出站连接示例包括:

  • 在与 NAT 网关关联的子网中创建。

  • 已在定义了出站规则的标准负载均衡器后端池中部署。

  • 已在基本公共负载均衡器后端池中部署。

  • 具有与之显式关联的公共 IP 地址的虚拟机。

显式出站选项示意图。

如何提供默认出站访问?

用于访问的公共 IPv4 地址称为默认出站访问 IP。 此 IP 是隐式的,属于 Microsoft。 此 IP 地址可能会更改,因此不建议在生产工作负荷中依赖它。

何时提供默认出站访问?

如果在 Azure 中部署虚拟机,但该虚拟机没有显式出站连接,则为其分配默认出站访问 IP。

图中显示了默认出站访问的决策树。

重要

2025 年 9 月 30 日,新部署的默认出站访问将停用。 有关详细信息,请查看官方公告。 建议使用以下部分中所述的显式连接形式之一。

  • 默认保护

    • 默认情况下,不建议使用零信任网络安全原则在 Internet 打开虚拟网络。
  • 显式与隐式

    • 在授予对虚拟网络中资源的访问权限时,建议使用显式的连接方法,而不是隐式方法。
  • IP 地址丢失

    • 客户不拥有默认的出站访问 IP。 此 IP 可能会更改,它的任何依赖都可能导致将来出现问题。

使用默认出站访问时无法正常工作的一些配置示例:

  • 当在同一 VM 上有多个 NIC 时,所有 NIC 的默认出站 IP 不会一致。
  • 纵向扩展/缩减虚拟机规模集时,分配给单个实例的默认出站 IP 可能会更改。
  • 同样,默认出站 IP 在虚拟机规模集中的 VM 实例之间不会一致或连续。

如何转换到公共连接的显式方法 (并禁用默认出站访问)?

有多种方法可以关闭默认出站访问。 以下部分介绍了可用的选项。

利用专用子网参数

  • 创建专用子网可防止子网中的任何虚拟机利用默认出站访问连接到公共终结点。

  • 专用子网上的 VM 仍可以使用显式出站连接访问 Internet。

    注意

    某些服务在专用子网中的虚拟机上不起作用,没有显式的流出量方法(例如 Windows 激活和 Windows 更新)。

添加专用子网功能

  • 在 Azure 门户中,选择子网并选择相应复选框以启用专用子网,如下所示:

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
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)并设有默认路由(0.0.0.0/0)的配置中,将流量发送到上游防火墙/网络虚拟设备时,任何绕过此路由的流量(例如,发送到服务标记的目的地)会在私有子网中出现中断。

  • 专用子网不适用于用于托管 PaaS 服务的委派或托管子网。 在这些方案中,出站连接由单个服务管理。

添加显式出站连接方法

  • 将 NAT 网关关联到虚拟机的子网。

  • 关联一个已配置了出站规则的标准负载均衡器。

  • 将标准公共 IP 关联到虚拟机的任何网络接口(如果有多个网络接口,使单个 NIC 具有标准公共 IP 将阻止虚拟机的默认出站访问)。

注意

有一个 NIC 级参数 (defaultOutboundEnabled),用于跟踪是否正在使用默认出站访问。 将显式出站连接方法添加到虚拟机时,若要更新参数,必须重新启动虚拟机。 顾问“添加显式出站方法以禁用默认出站”会通过检查此参数来运行 - 因此需要停止/解除分配虚拟机才能反映更改并清除操作。

对虚拟机规模集使用灵活业务流程模式

  • 默认情况下,灵活的规模集是安全的。 通过灵活规模集创建的任何实例都不会拥有与其关联的默认出站访问 IP,因此需要明确的出站方法。 如需了解详细信息,请参阅适用于虚拟机规模集的灵活业务流程模式

重要

当负载均衡器的后端池通过IP地址进行配置时,由于持续存在的已知问题,它将使用默认出站访问。 若要在默认情况下保护有很高出站需求的配置和应用程序,请将 NAT 网关关联到负载均衡器后端池中的 VM,以保护流量。 查看有关现有已知问题的详细信息。

NAT 网关是建立显式出站连接的建议方法。 防火墙还可用于提供此访问权限。

约束

  • 默认出站访问 IP 不支持分段数据包。

  • 默认出站访问 IP 不支持 ICMP ping。

后续步骤

有关 Azure 中的出站连接和 Azure NAT 网关的详细信息,请参阅: