首页 > 解决方案 > 从 Azure Web 应用(通过 Azure S2S VPN)查询本地 SQL Server 失败

问题描述

我们的基础架构团队一直在努力在我们的 Azure 订阅和我们的本地防火墙之间配置一个站点到站点的 Azure VPN 连接,基本上遵循这些步骤。为了测试这一点,我们创建了一个简单的 Azure Web 应用程序,该应用程序对位于防火墙后面的本地 SQL Server 进行查询。

这个网络应用程序在本地运行没有问题。此外,当编译为控制台应用程序并在 Azure 虚拟机上运行时,相同的代码和连接字符串也可以正常工作。但是当部署到 Azure 中的 Web 应用程序时,与 SQL Server 的连接失败:

[Win32Exception (0x80004005): 等待操作超时]

[SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:0 - 等待操作超时。)]

Azure VM 和 Web 应用程序都配置为指向 Azure VNet。似乎有什么东西阻止了 Web 应用程序在其默认端口 (1433) 上与 SQL Server 通信。如果我打开 Web 应用程序的调试控制台并tcpping使用默认端口 (80) 在 SQL Server 上执行操作,它会成功返回。但是tcpping到端口 1433 超时。

Azure 网络安全组似乎没有阻止该端口:

在此处输入图像描述

我发现与我们的特定设置相关的唯一解决方案基本上可以归结为“改用 Azure 混合连接”,这不是我们的首选。

标签: sql-serverazureazure-web-app-serviceazure-virtual-networkazure-vpn

解决方案


在 Microsoft 的支持下,进行了以下更改,现在 VNet 集成正在运行。对于其中一些缺乏细节,我深表歉意,但我们的基础架构团队完成了大部分故障排除。希望其中一些项目能帮助其他人为他们的设置指明解决方案的方向:

  • 最初,连接是通过公共互联网而不是 VNET 集成和 VPN 建立的。我们发现由于使用了隧道类型,VNET 集成失败。Azure 应用服务要求隧道类型为 SSTP。一旦我们更改它并同步网络,我们就可以tcpping通过其私有 IP 访问 SQL Server。
  • 我们注意到它必须在本地网络上允许点对点地址池。作为一种解决方法,我们决定使用新的 VNET 集成(预览版)。我们创建了一个空子网并且能够使用这个新功能。
  • 我们注意到应用服务没有使用自定义 DNS。为了解决这个问题,我们在虚拟网络以及 Web 应用的应用设置(“WEBSITE_DNS_SERVER”)中添加了 DNS。

推荐阅读