从Azure Web应用程序(通过Azure S2S VPN)查询本地SQL Server失败

时间:2019-02-04 21:34:14

标签: sql-server azure azure-web-sites azure-virtual-network azure-vpn

我们的基础架构团队已在these steps之后进行了工作,以配置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应用程序的调试控制台,并使用默认端口(80)在SQL Server上执行tcpping,它将成功返回。但是tcpping到1433端口超时。

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

enter image description here

我发现与我们的特定设置相关的唯一解决方案基本上归结为“ use Azure Hybrid Connections instead”,这不是我们的首选。

1 个答案:

答案 0 :(得分:1)

在获得Microsoft支持之后,进行了以下更改,并且VNet集成现在可以正常工作。对于其中的一些细节,我深表歉意,但是我们的基础架构团队做了大部分的故障排除。希望其中一些项目可以帮助其他人找到设置解决方案的方向:

  • 最初,连接是通过公共Internet建立的,而不是通过VNET Integration和VPN建立的。我们发现由于使用了隧道类型,VNET集成失败。 Azure App Service要求隧道类型为SSTP。更改并同步网络后,我们便可以通过其专用IP $("#pdfBtn").on('click', function(){ var doc = new jsPDF(); doc.text(5, 5, 'Specific text for page 1'); addBody(); doc.addPage(); doc.text(5, 5, 'Specific text for page 2'); addBody(); doc.addPage(); doc.text(5, 10, 'Specific text for page 3'); addBody(); function addBody() { doc.text(5, 10, 'This is reusable text'); doc.text(5, 15, 'More reusable text'); } }); 来使用SQL Server。
  • 我们注意到它必须允许本地网络上的点到站点地址池。解决方法是,我们决定使用新的VNET集成(预览)。我们创建了一个空子网,并且能够使用此新功能。
  • 我们注意到,然后App Service没有使用自定义DNS。为解决此问题,我们在虚拟网络上以及Web应用程序的“应用程序设置”(“ WEBSITE_DNS_SERVER”)中添加了DNS。