Sql-Server

允許通過 VPN 訪問 MS SQL 數據庫

  • November 22, 2016

我的設置涉及執行 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客戶端電腦連接到數據庫netstat時,VPN 伺服器上顯示:

> 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 伺服器上的遠端桌面連接。

這是怎麼回事?

在 V12 之前,Azure SQL 數據庫使用網關機器來代理客戶端和數據庫之間的連接。從 V12 開始,網關只代理初始連接,然後在客戶端和數據庫之間建立點對點連接。可以在此處找到有關此重定向的更多資訊。

這種行為不適用於埠轉發連接,因為點對點連接將在代理之外建立並擊中防火牆。值得慶幸的是,它可以關閉,儘管依賴於 Powershell。

您的客戶端 IP 地址無權訪問伺服器。登錄到 Azure 帳戶並創建新的防火牆規則以啟用訪問。

您需要允許 VPN 伺服器的公共 IP 地址訪問 Azure SQL 數據庫。允許私有 IP 地址將不起作用。

根據 netstat 的輸出,您的 VPN 伺服器有 2 個 NIC,您需要允許連接到 Azure SQL 數據庫的公共地址。

引用自:https://serverfault.com/questions/814875