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

Reach Azure SQL database with dynamic IP addresses

我有一个 Azure SQL 数据库,我的数据驻留在其中。此数据应从系统(例如 Dynamics 或其他服务器)中检索。但是,该系统没有静态 IP 地址。如何授予这些系统访问我的 Azure SQL 数据库的权限?到目前为止,我只成功地包含了静态 IP 地址。

通常情况下,动态IP地址应该有范围。如果你能获取范围IP地址,然后将动态IP范围设置为防火墙规则,问题就可以解决。

最后,最后的解决方案是从0.0.0.0-255.255.255.255创建防火墙规则。出于安全考虑,您可以通过用户权限控制数据库访问。

对于 OP:如果您的 Microsoft Dynamics CRM 运行正在 Azure VM 中并且您正在连接到 Azure SQL 数据库,那么Azure 的默认网络配置应该允许访问。 (如果您连接到 Azure SQL 托管实例,这可能会有所不同。)在 Azure 门户中,如果您导航到托管 Azure SQL 数据库的逻辑 SQL 服务器并转到在“网络”部分,您应该会看到一个名为“AllowAllWindowsAzureIps”的默认防火墙规则,起始 IP 为 0.0.0.0,结束 IP 为 0.0.0.0。这应该允许任何 Azure-to-Azure 访问。

但是,如果您尝试从具有 动态 IP 地址 的 public 计算机连接,则 不是 托管在 Azure 上,这要棘手得多。就我而言,我连接的是一个 Windows 10 工作站,它具有动态 public IP。需要明确的是,这是针对 Azure SQL 数据库,而不是 Azure SQL 托管实例。下面的解决方案为 Azure SQL 数据库逻辑服务器使用“专用端点”(或“专用 Link”)。概述是 here。托管实例需要不同的解决方案。

简而言之,我能够通过以下步骤完成这项工作:

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

在配置以上内容并通过 Windows 10 VPN 客户端连接后,我能够使用标准 [=160] 使用 SSMS 和 C#/.Net 应用程序连接到 Azure SQL 数据库=] 服务器连接字符串。

下面通过参考 Microsoft 文档和我自己的一些评论总结了这些步骤。细节相当冗长,重复 Microsoft 记录的所有内容没有意义。但我认为这个总结可能对某些人有所帮助。我花了好几个小时才完成这项工作。

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

Microsoft 有两篇文章描述了如何设置 Azure VPN 网关。第一个利用 Azure PowerShell:

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

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

(2) https://docs.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。这些都要花钱!定价为 here。成本最低的 Basic SKU 成本约为每月 27 美元(目前),但仅通过 SSTP 支持 Windows VPN 客户端。对于 Mac 或 Linux 客户端,您至少需要 VpnGw1 SKU,大约每月 139 美元,并且您必须包括 IKEv2 and/or OpenVPN 协议。
  • 实际上 运行 执行 New-AzVirtualNetworkGateway 命令需要一段时间才能完成...在我的情况下,需要 35 分钟。
  • 出于某种原因,我必须 运行 分配 $VPNClientAddressPool 的命令两次才能正常工作。

Azure VPN网关创建完成后,需要切换到(3)https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-certificates-point-to-site中的详细说明,创建self-signed根证书安装在 VPN 网关上,以及本地计算机的客户端证书(由相同的根证书签名)。 (3)中的说明很长,但很好。

创建 self-signed 根证书和客户端证书后,您继续按照 (1) 中的说明将 self-signed 根证书上传到 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,因为这既快速又直接。 (这或多或少地遵循了微软从 here 开始的说明。)

  • 因为我有一个现有的 Azure SQL 数据库逻辑服务器,我只是导航到它的“网络”部分并单击“私人访问”选项卡,其中有一个“创建私人终结点”选项。
  • 这将引导您完成一个 6 步向导。在“虚拟网络”步骤 #3 中,选择您为 VPN 网关创建的“前端”子网很重要。
  • 在“DNS”步骤 #4 中,我为“与私有 DNS 区域集成”选择了“是”。
  • 创建专用端点后,您必须记下分配给端点的专用 IP 地址。如果您使用 (1) 中给出的 IP 网络和子网地址,这可能是 10.1.0.4.

对于名为 myazuresqlserver 的 Azure SQL 数据库逻辑服务器,私有 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 服务器名称和常规 SQL 服务器登录用户 ID 和密码通过 SSMS 进行连接。使用我的 .Net 应用程序,我还能够使用标准 SQL 客户端连接字符串和 myazuresqlserver.database.windows.net 服务器名称进行连接。

是的,如果可以更轻松地从具有动态 IP 地址的客户端计算机连接到 Azure SQL 数据库,那就太好了。如果还有其他更好的解决方案,我希望有人会 post 他们在这里!

最后一点:如果您想自动启动与 Azure VPN 网关的 VPN 连接(例如,在启动服务器时通过命令行脚本),这也不容易! rasdial.exe 命令不能开箱即用。但是说明 here 描述了如何做到这一点。请注意,一旦连接,rasdial.exe {yourVPNconnectioName} /disconnect 可以 通过命令行断开 VPN,无需额外的步骤。