允许通过 VPN 访问 MS SQL 数据库

允许通过 VPN 访问 MS SQL 数据库

我的设置涉及一个运行 Server 2012 的 Microsoft Azure VM 实例,该实例连接到另一个实例上的 Azure SQL 数据库 V12 服务器。

我在服务器上设置了 SSTP VPN,它可以正常工作。连接到它的客户端不使用服务器网关,因为它的目的是托管网络共享而不是代理流量。数据库服务器设置为拒绝除 VPN 服务器之外的任何连接。

我希望能够通过 VPN 访问数据库,但在将流量从 VPN 服务器路由到数据库时遇到了问题 — 具体来说,我希望能够通过 访问数据库192.168.26.1。我已打开端口 1433,并添加了 TCP 端口转发:

netsh add v4tov4 listenaddress=192.168.26.1 listenport=1433 connectaddress=<database hostname> connectport=1433

192.168.26.1当我尝试通过客户端计算机连接到数据库时, netstatVPN 服务器上显示:

> netstat -an | findstr 1433
  TCP    10.0.0.4:51056           <database ip>:1433      TIME_WAIT
  TCP    192.168.26.1:1433        0.0.0.0:0               LISTENING

类似地,netstat在客户端(Windows 10 机器)上显示了与的简短连接192.168.26.1:1433

由此,我相信与数据库的连接通过 VPN 进行,但是当尝试通过代理连接到数据库时192.168.26.1,SSMS 显示:

您的客户端 IP 地址无权访问服务器。登录 Azure 帐户并创建新的防火墙规则以启用访问。

按照说明操作后,Azure 会将我的客户端 IP 添加到允许的防火墙规则中。但是,连接不是应该通过 VPN 建立吗?netstat似乎是这样,那么为什么要求我添加我的客户端 IP?

对于我的 SQL 凭据,我将其用作192.168.26.1服务器名称和<username>@<database hostname>登录名。这可以通过 VPN 服务器上的远程桌面连接来实现。

这是怎么回事?

答案1

您的客户端 IP 地址无权访问服务器。登录 Azure 帐户并创建新的防火墙规则以启用访问。

您需要允许 VPN 服务器的公共 IP 地址访问 Azure SQL 数据库。允许私有 IP 地址不起作用。

根据netstat的输出,您的VPN服务器有2个NIC,您需要允许连接到Azure SQL数据库的公共地址。

答案2

在 V12 之前,Azure SQL 数据库使用网关计算机来代理客户端和数据库之间的连接。从 V12 开始,网关仅代理初始连接,然后在客户端和数据库之间建立对等连接。可以找到有关此重定向的更多信息这里

这种行为与端口转发连接不兼容,因为点对点连接将在代理之外建立并击中防火墙。幸运的是,它可以关闭,尽管依赖于 Powershell。

相关内容