使用动态IP地址访问Azure SQL数据库

4

我有一个Azure SQL数据库,我的数据存储在其中。这些数据应该从系统(例如Dynamics或其他服务器)中检索。但是,这个系统没有固定的IP地址。我如何允许这些系统访问我的Azure SQL数据库?到目前为止,我只能成功地包含静态IP地址。


1
这个机器是否连接到您的网络,还是一个位于互联网上的第三方CRM系统? - Francesco Mantovani
@FrancescoMantovani 这是一个云端的微软动态客户关系管理系统。 - steffen
在您的私有云上?那么,您应该能够设置静态IP,对吧?或者在您的网络中为其提供名称服务器。 - Francesco Mantovani
@steffen 你考虑过从0.0.0.0-255.255.255.255创建防火墙规则吗?如果你还是无法解决问题,那就是最后的解决方案了。 - Leon Yue
1
嗨@steffen,正如我们所知,动态IP地址应该有范围,你能获取IP范围吗?然后将动态IP范围设置为防火墙规则。 - Leon Yue
显示剩余2条评论
2个回答

2
通常情况下,动态IP地址应该有一个范围。如果您能获取到范围IP地址并将动态IP范围设置为防火墙规则,则问题可以得到解决。
最后的解决方案是创建一个来自0.0.0.0-255.255.255.255的防火墙规则。出于安全原因,您可以通过用户权限控制数据库访问。

1

针对本文章发起者:如果您的 Microsoft Dynamics CRM 运行在 Azure 虚拟机上,并且您正在连接到一个 Azure SQL 数据库,则 Azure 的默认网络配置应该允许访问。(如果您连接到 Azure SQL 托管实例,则可能会有所不同。)在 Azure 门户中,如果您导航到托管 Azure SQL 数据库的逻辑 SQL 服务器并转到“网络”部分,则应该看到一个名为“AllowAllWindowsAzureIps”的默认防火墙规则,其启动 IP 是 0.0.0.0,结束 IP 是 0.0.0.0。这就是允许任何 Azure 到 Azure 访问的内容。

然而,如果您正在尝试使用一个动态IP地址的公共计算机进行连接,该计算机并非托管在Azure上,则会更加棘手。在我的情况下,我正在使用具有动态公共IP的Windows 10工作站进行连接。需要明确的是,这是针对Azure SQL数据库而不是Azure SQL托管实例。以下解决方案使用了Azure SQL数据库逻辑服务器的“私有端点”(或“私有链接”)。概述在此处。托管实例需要不同的解决方案。

简而言之,我通过以下步骤成功地使其工作:

  1. 我使用点对站(P2S)配置设置了Azure VPN网关。
  2. 在我的客户端计算机上,我创建了一个VPN配置来连接到Azure VPN网关。(我使用了原生的Windows 10 VPN客户端。但也有Mac和Linux客户端的选项。)
  3. 我为Azure SQL服务器创建了一个私有终结点。
  4. 我在Windows“hosts”文件中配置了Azure SQL服务器完全限定域名(FQDN)和分配给Azure SQL服务器私有终结点的私有IP地址。这是解析Azure SQL服务器FQDN的最简单方法。

在进行以上配置并通过Windows 10 VPN客户端连接后,我能够使用SSMS连接到Azure SQL DB,并使用标准SQL Server连接字符串使用C#/.Net应用程序连接。

以下总结了步骤,并引用了Microsoft文档和一些我自己的评论。详细信息非常冗长,重复所有Microsoft已经记录的内容没有意义。但是我认为这个摘要可能对一些人有帮助。我花了几个小时才使其正常工作。

以下步骤对于任何Windows服务器或工作站都应该几乎相同。Mac和Linux客户端计算机也可以使用此方法连接,但需要调整VPN详细信息。

微软有两篇文章介绍如何设置Azure VPN网关。第一篇使用Azure PowerShell

(1) https://learn.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-point-to-site-rm-ps

这是我所遵循的。第二篇描述了如何通过Azure门户进行操作:

(2) https://learn.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-point-to-site-resource-manager-portal

我参考了第二篇文章,以更好地理解和解决一些Azure PowerShell步骤中的问题。

当我仔细阅读并按照(1)中的说明操作时,效果非常好。以下是一些观察结果。

  • 除非您非常熟悉IP网络、CIDR表示法和子网,否则最好使用或紧密遵循(1)中给定的IP地址范围和子网配置。在VPN网关配置中需要一个“网关”子网和一个所谓的“前端”子网。
  • 实际创建VPN网关(使用New-AzVirtualNetworkGateway PowerShell命令)时,必须选择一个GatewaySku。这些需要花费一些钱!定价请参见此处。最低成本的Basic SKU每月约为27美元(目前),但只支持Windows VPN客户端通过SSTP进行连接。对于Mac或Linux客户端,您至少需要VpnGw1 SKU,约为139美元/月,并且必须包括IKEv2和/或OpenVPN协议。
  • 实际运行New-AzVirtualNetworkGateway命令需要一段时间才能完成...在我的情况下,需要35分钟。
  • 由于某种原因,我必须运行分配$VPNClientAddressPool的命令两次才能使其工作。

创建Azure VPN网关后,您需要转到(3)https://learn.microsoft.com/zh-cn/azure/vpn-gateway/vpn-gateway-certificates-point-to-site中的详细说明,创建一个自签名根证书以安装在VPN网关上,并为您的本地计算机创建一个客户端证书(由同一根证书签名)。(3)中的说明很长,但相当不错。

创建自签名根和客户端证书后,您可以继续执行(1)中的说明,将自签名根证书上传到Azure VPN网关(使用Add-AzVpnClientRootCertificate命令)。同样,由于某些原因,我必须运行两次才能使其正常工作。

完成上述步骤后,您需要运行PowerShell命令:

$profile=New-AzVpnClientConfiguration -ResourceGroupName $RG -Name $GWName -AuthenticationMethod "EapTls"
$profile.VPNProfileSASUrl

使用由VPNProfileSASUrl显示的URL下载VPN配置文件。对于Windows,安装VPN客户端配置后,您应该能够打开VPN客户端并成功连接到Azure VPN网关。

接下来,为了创建我的Azure SQL数据库逻辑服务器的私有端点,我使用了Azure门户而不是Azure PowerShell,因为这更快速且直接。(这或多或少遵循Microsoft从此处开始的说明。)

  • 由于我已经有了一个现有的Azure SQL数据库逻辑服务器,因此我只需导航到其“网络”部分,然后单击“私有访问”选项卡,该选项卡具有“创建私有端点”的选项。
  • 这将带您通过6步向导。在第3步“虚拟网络”上,选择为VPN网关创建的“前端”子网非常重要。
  • 在第4步“DNS”中,我选择“Yes”以“与私有DNS区集成”。
  • 创建私有端点后,必须注意所分配给端点的专用IP地址。如果使用(1)中提供的IP网络和子网地址,则可能是 10.1.0.4

对于名为 myazuresqlserver 的Azure SQL数据库逻辑服务器,Private Link FQDN将是 myazuresqlserver.privatelink.database.windows.net 。但您实际需要的是正常的FQDN,它将是 myazuresqlserver.database.windows.net

如上所述,为避免额外的DNS服务器配置步骤,我只需添加一个条目到我的Windows hosts 文件中:

10.1.0.4 myazuresqlserver.database.windows.net

完成这些步骤后,我就能够使用myazuresqlserver.database.windows.net SQL Server名称和常规的SQL Server登录用户ID和密码通过SSMS连接了。对于我的.Net应用程序,我也能够使用标准的SQL客户端连接字符串和myazuresqlserver.database.windows.net服务器名称进行连接。

是的,如果从具有动态IP地址的客户端计算机连接到Azure SQL DB更加容易,那将会很好。如果有其他更好的解决方案,希望有人能在这里发布!

最后注意:如果您想要在启动服务器时通过命令行脚本自动启动到Azure VPN网关的VPN连接,那也不容易!rasdial.exe命令不能直接使用。但是这里的说明描述了如何完成此操作。请注意,一旦连接成功,rasdial.exe {yourVPNconnectioName} /disconnect可以通过命令行断开VPN连接,无需额外步骤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接