Linux
如何從 WSL2 內部連接到 Windows 主機上執行的 Postgres?
我的 Windows 機器上執行了 Postgres,我需要從 WSL2 內部連接到它。
- postgres windows 服務正在執行
- 我可以使用從 Windows 命令行連接到它
psql
- WSL2 vm 的 IP 是
172.31.210.120
, 網路遮罩255.255.240.0
(使用 確定ipfconfig
)。- vm內部的windows主機的IP是
172.31.208.1
(使用確定cat /etc/resolv.conf
)- 我可以使用
curl http://172.31.208.1:8080
. 如果我記錄傳入請求的 IP,我會得到172.31.210.120
這樣的資訊,這會驗證兩個 IP 是否正確。- 我將以下行添加到
pg_hba.conf
:host all all 172.31.210.120/20 scram-sha-256
- 我重新啟動了 postgres windows 服務
如果我嘗試使用以下命令從 WSL 連接到它:
$ psql --host=172.31.208.1 --port=5432 --user=postgres
我收到此錯誤:
psql: error: could not connect to server: could not connect to server: Connection timed out Is the server running on host "172.31.208.1" and accepting TCP/IP connections on port 5432?
注意:我也嘗試使用測試連接,
telnet
但它也失敗了。下面的日誌
c:\Program Files\PostgreSQL\13\data\log\
沒有顯示任何錯誤或任何跡象表明存在連接嘗試。我在這裡想念什麼?
如果有人遇到同樣的問題,我是這樣解決的:
我需要添加一個 Windows 防火牆規則:
打開“具有高級安全性的 Windows Defender 防火牆”(您可以通過在開始菜單中搜尋找到它)
點擊“新規則…”
創建新的 TCP/IP 規則
- 協議:TCP
- 埠:5432
- 允許連接
添加後,點擊新創建的規則並從側邊欄中選擇“屬性…”
在 Scope 選項卡上,指定 WSL2 虛擬機的 IP 地址(例如 172.31.208.0/24)
如果您在我最初的問題中執行其他所有操作(獲取兩個 IP,將 VM IP 添加到
pg_hba.conf
),那麼從 WSL2 命令行連接到主機 IP 將起作用。