Azure 应用程序网关的运行状况探测中出现意外的 IPv6 客户端地址

Azure 应用程序网关的运行状况探测中出现意外的 IPv6 客户端地址

我在 Azure 中有以下设置:

  • 公共 IP 地址 (IPv4)
  • Azure 应用程序网关(标准 V2)
  • 具有一个子网的 V-NET。AGW 已部署到该子网,并且已禁用“添加 IPv6 地址空间”复选框
  • AppServices 和 Functions 作为后端

如果这很重要的话,一切都位于西欧地区。

我正在排查一个问题,我注意到 AGW 健康探测不包含原始 IPv4 地址。我期望健康探测请求源自 AGW 子网。事实上,在具有类似设置的其他环境中,情况也是如此。

我有一个简单的Azure 函数X-Forwarded-From我用它来测试,它在header中记录了一个 IP 地址列表。其实没什么特别的:

if (request.Headers.TryGetValues("X-Forwarded-For", out var values)){
  foreach(var val in values) log.LogInformation($"IP:{val}");
}
  • 当我直接调用此函数时,我可以在那里看到一个 IP 地址(我的电脑的 IP)。
  • 当我呼叫 AGW 时,我可以看到三个 IP(我的电脑、Cloudflare 和一个未知的 IPv6(???))。
  • 当 AGW 执行健康探测时,我只能看到一个 IPv6 条目(与上面相同)

这个 IPv6(fde4:8dba:1200:xxxx:xxxx:xxx:xxxx:x在我看来像 ULA)地址来自哪里?为什么我在子网范围内看不到 IPv4 地址?我如何才能强制 IPv4 地址存在?

这种情况违反了我的 IIS IP 限制规则。

我知道我也可以将 IPv6 列入白名单:

<add ipAddress="2001:4898:2a:5:c4ad:9291:22b1:c870" subnetMask="ffff:ffff::" allowed="true" />

但这并不能解开谜团。

答案1

确保未在应用程序网关的子网中启用 Microsoft.Web 服务终结点。这将导致通过该 IPv6 终结点(而不是从应用程序网关的公共 IP 地址)发送至应用服务的流量。

相关内容