使用动态 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。托管实例需要不同的解决方案。
简而言之,我能够通过以下步骤完成这项工作:
- 我使用 Point-to-Site (P2S) 配置设置了 Azure VPN 网关。
- 在我的客户端计算机上,我创建了一个 VPN 配置来连接到 Azure VPN 网关。 (我使用了本地 Windows 10 VPN 客户端。但是也有 Mac 和 Linux 客户端的选项。)
- 我为 Azure SQL 服务器创建了一个专用终结点。
- 我使用 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 门户执行此操作:
我提到第二个是为了更好地理解和解决一些 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,无需额外的步骤。
我有一个 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。托管实例需要不同的解决方案。
简而言之,我能够通过以下步骤完成这项工作:
- 我使用 Point-to-Site (P2S) 配置设置了 Azure VPN 网关。
- 在我的客户端计算机上,我创建了一个 VPN 配置来连接到 Azure VPN 网关。 (我使用了本地 Windows 10 VPN 客户端。但是也有 Mac 和 Linux 客户端的选项。)
- 我为 Azure SQL 服务器创建了一个专用终结点。
- 我使用 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 门户执行此操作:
我提到第二个是为了更好地理解和解决一些 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,无需额外的步骤。