允許通過 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
客戶端電腦連接到數據庫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 數據庫的公共地址。