使用现有的本地代理服务器

配置 Microsoft Entra 应用程序代理连接器以使用出站代理服务器。 本文假定网络环境已有代理服务器。

首先,我们探讨以下主要部署方案:

  • 将连接器配置为绕过本地出站代理。
  • 将连接器配置为使用出站代理来访问 Microsoft Entra 应用程序代理。
  • 配置为在连接器与后端应用程序之间使用代理。

有关连接器工作原理的详细信息,请参阅了解 Microsoft Entra 应用程序代理连接器

绕过出站代理

连接器具有可发出出站请求的基础 OS 组件。 这些组件会使用 Web 代理自动发现 (WPAD) 自动尝试查找网络上的代理服务器。

OS 组件尝试通过针对 wpad.domainsuffix 执行域名系统 (DNS) 查找来定位代理服务器。 如果在 DNS 中解析查找,则系统会向 wpad.dat 的 Internet 协议 (IP) 地址发出 HTTP 请求。 此请求将成为环境中的代理配置脚本。 连接器使用此脚本选择出站代理服务器。 但是,连接器流量可能仍会失败,因为代理上需要更多的配置设置。

可以将连接器配置为绕过本地代理,以确保它使用与 Microsoft Entra 应用程序代理服务的直接连接。 建议使用直接连接,因为它们需要较少的配置。 但是,某些网络策略要求流量通过本地代理服务器。

若要禁用连接器的出站代理用法,请编辑 C:\Program Files\Microsoft Azure AD App Proxy Connector\ApplicationProxyConnectorService.exe.config 文件并添加 system.net 部分,如代码示例中所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <defaultProxy enabled="false"></defaultProxy>
  </system.net>
  <runtime>
    <gcServer enabled="true"/>
  </runtime>
  <appSettings>
    <add key="TraceFilename" value="AadAppProxyConnector.log" />
  </appSettings>
</configuration>

要确保连接器更新服务也会绕过代理,请对 ApplicationProxyConnectorUpdaterService.exe.config 文件执行类似的更改。 此文件位于 C:\Program Files\Microsoft Azure AD App Proxy Connector Updater 下。

请务必备份原始文件,以防你需要还原到默认的 .config 文件。

使用出站代理服务器

某些环境要求所有出站流量通过出站代理而不发生异常。 因此,绕过代理是不可行的。

可按下图所示将连接器流量配置为通过出站代理:

Configuring connector traffic to go through an outbound proxy to Microsoft Entra application proxy

由于只会发生出站流量,因此不需要配置通过防火墙进行入站访问。

注意

应用程序代理不支持对其他代理进行身份验证。 连接器/更新程序网络服务帐户应能够在不进行身份验证的情况下连接到代理。

如果在环境中启用并正确配置了 WPAD,连接器会自动发现出站代理服务器并尝试使用它。 但是,可以显式将连接器配置为通过出站代理。

为此,请编辑 C:\Program Files\Microsoft Azure AD App Proxy Connector\ApplicationProxyConnectorService.exe.config 文件,并添加 system.net 部分,如代码示例中所示。 更改 proxyserver:8080 以反映你的本地代理服务器名称或 IP 地址和端口。 即使使用的是 IP 地址,该值也必须具有前缀 http://

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>  
    <defaultProxy>   
      <proxy proxyaddress="http://proxyserver:8080" bypassonlocal="True" usesystemdefault="True"/>   
    </defaultProxy>  
  </system.net>
  <runtime>
    <gcServer enabled="true"/>
  </runtime>
  <appSettings>
    <add key="TraceFilename" value="AadAppProxyConnector.log" />
  </appSettings>
</configuration>

接下来,通过对 C:\Program Files\Microsoft Azure AD App Proxy Connector Updater\ApplicationProxyConnectorUpdaterService.exe.config 文件执行类似的更改,配置连接器更新服务以使用代理。

注意

如果(默认)未在 ApplicationProxyConnectorService.exe.config 中配置“defaultProxy”,则连接器服务会评估在 %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 中“defaultProxy”配置的使用情况。这同样适用于连接器更新服务 (ApplicationProxyConnectorUpdaterService.exe.config)。

对于出站代理,需要考虑到四个方面:

  • 代理出站规则
  • 代理身份验证
  • 代理端口
  • 传输层安全性 (TLS) 检查

代理出站规则

允许访问以下 URL:

代码 端口 用途
* .msappproxy.net
*.servicebus.windows.net
443/HTTPS 连接器与应用程序代理云服务之间的通信
crl3.digicert.com
crl4.digicert.com
ocsp.digicert.com
crl.microsoft.com
oneocsp.microsoft.com
ocsp.msocsp.com
80/HTTP 连接器使用这些 URL 来验证证书。
login.windows.net
secure.aadcdn.microsoftonline p.com
*.microsoftonline.com
*.microsoftonline-p.com
*.msauth.net
*.msauthimages.net
*.msecnd.net
*.msftauth.net
*.msftauthimages.net
*.phonefactor.net
enterpriseregistration.windows.net
management.azure.com
policykeyservice.dc.ad.msft.net
ctldl.windowsupdate.com
443/HTTPS 在注册过程中,连接器将使用这些 URL。
ctldl.windowsupdate.com
www.microsoft.com/pkiops
80/HTTP 在注册过程中,连接器将使用这些 URL。

如果防火墙或代理允许配置 DNS 允许列表,则可以允许连接到 *.msappproxy.net*.servicebus.windows.net

如果无法通过完全限定的域名 (FQDN) 允许连接,并且需要改为指定 IP 范围,请使用以下选项:

  • 允许连接器对所有目标进行出站访问。
  • 允许连接器对所有 Azure 数据中心 IP 范围进行出站访问。 使用 Azure 数据中心 IP 范围列表的难点在于,该列表每周都会更新。 需要制定一个流程来确保相应地更新访问规则。 只使用 IP 地址的一个子集可能导致配置中断。 从 https://download.microsoft.com 下载最新的 Azure 数据中心 IP 范围。 使用搜索词 Azure IP Ranges and Service Tags。 请务必选择相关的云。 例如,可以通过搜索 Azure IP Ranges and Service Tags – Public Cloud 找到公有云 IP 范围。 可以通过搜索 Azure IP Ranges and Service Tags – US Government Cloud 找到美国政府云。

代理身份验证

当前不支持代理身份验证。 目前的建议是允许连接器对 Internet 目标进行匿名访问。

代理端口

连接器使用 CONNECT 方法建立基于 TLS 的出站连接。 此方法实质上是通过出站代理建立一个隧道。 将代理服务器配置为允许与端口 443 和 80 建立隧道连接。

注意

服务总线在通过 HTTPS 运行时,将使用端口 443。 但是,在默认情况下,服务总线会尝试建立直接 连接协议 (TCP) 连接,并且只有在直接连接失败时才回退到 HTTPS。

TLS 检查

请勿对连接器流量使用 TLS 检查,因为这会导致连接器流量出现问题。 连接器使用证书对应用程序代理服务进行身份验证,在 TLS 检查过程中,该证书可能会丢失。

配置为在连接器与后端应用程序之间使用代理

在某些环境中,可能专门要求使用转接代理来与后端应用程序进行通信。 若要启用转接代理,请执行以下步骤:

步骤 1:将所需的注册表值添加到服务器

  1. 若要启用默认代理使用,请将注册表值“(DWORD)”UseDefaultProxyForBackendRequests = 1 添加到位于 HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Azure AD App Proxy Connector 的连接器配置注册表项。

步骤 2:使用 netsh 命令手动配置代理服务器

  1. 启用组策略 Make proxy settings per-machine。 组策略位于:Computer Configuration\Policies\Administrative Templates\Windows Components\Internet Explorer。 需要设置组策略,而不是对每个用户设置策略。
  2. 在服务器上运行 gpupdate /force。 或者,若要确保组策略已更新,请重新启动服务器。
  3. 使用管理员权限启动提升的命令提示符,然后输入 control inetcpl.cpl
  4. 配置所需的代理设置。

这些设置使连接器使用同一个转接代理来与 Azure 和后端应用程序进行通信。 修改文件 ApplicationProxyConnectorService.exe.config 以更改转接代理。 在“绕过出站代理”和“使用出站代理服务器”部分中有转接代理配置的介绍。

注意

有多种方法可用来在操作系统中配置 Internet 代理。 通过 NETSH WINHTTP 配置的代理设置(运行 NETSH WINHTTP SHOW PROXY 来验证)替代了在步骤 2 中配置的代理设置。

连接器更新服务使用计算机代理。 可在 ApplicationProxyConnectorUpdaterService.exe.config 文件中找到该设置。

排查连接器代理问题和服务连接问题

现在,应会看到所有流量都会流过代理服务器。 如果遇到问题,以下故障排除信息应会有所帮助。

识别和排查连接器连接问题的最佳方法就是在启动连接器服务时,创建“网络”捕获。 以下是一些关于捕获和筛选网络跟踪的小技巧。

可以使用自选的监视工具。 本文使用了 Microsoft 消息分析器。

注意

Microsoft Message Analyzer (MMA) 已停用,并且其下载包已于 2019 年 11 月 25 日从 microsoft.com 站点上删除。 目前尚未开发 Microsoft Message Analyzer 的 Microsoft 替代品。 如需类似功能,请考虑使用第三方网络协议分析器工具,例如 Wireshark。

以下示例特定于消息分析器,但其原理适用于任何分析工具。

创建连接器流量的捕获

在初始故障排除期间,请执行以下步骤:

  1. services.msc,停止 Microsoft Entra 应用程序代理连接器服务。

    Microsoft Entra application proxy connector service in services.msc

  2. 以管理员身份运行消息分析器。

  3. 选择“启动本地跟踪”。

  4. 启动 Microsoft Entra 应用程序代理连接器服务。

  5. 停止网络捕获。

    Screenshot shows the Stop network capture button

检查连接器通信流是否绕过出站代理

如果你预期连接器与应用程序代理服务建立直接连接,则端口 443 上的 SynRetransmit 响应表明存在网络或防火墙问题。

使用“消息分析器”筛选器识别失败的传输控制协议 (TCP) 连接尝试。 在筛选框中输入 property.TCPSynRetransmit,选择“应用”。

同步 (SYN) 数据包是为了建立 TCP 连接而发送的第一个数据包。 如果此数据包未返回响应,则重新尝试 SYN。 可以使用该筛选器来查看任何重新传输的 SYN 数据包。 然后,可以检查这些 SYN 数据包是否对应于任何与连接器相关的流量。

检查连接器流量是否使用出站代理

如果将应用程序代理连接器通信流配置为通过代理服务器传输,请查找与你的代理的失败 https 连接。

使用“消息分析器”筛选器识别与你的代理的失败 HTTPS 连接尝试。 在“消息分析器”筛选器中输入 (https.Request or https.Response) and tcp.port==8080,并将 8080 替换为你的代理服务端口。 选择“应用”可查看筛选结果。

上面的筛选器只显示传入/传出代理端口的 HTTP 请求和响应。 假设想要查找显示与代理服务器之间的通信的 CONNECT 请求。 成功后,会获得 HTTP OK (200) 响应。

如果看到其他响应代码(如 407 或 502),表示代理要求身份验证或者出于其他某种原因而不允许该流量。 在这种情况下,请咨询代理服务器支持团队。

后续步骤