如何从 WSL2 内部连接到 Windows 主机上运行的 Postgres?

如何从 WSL2 内部连接到 Windows 主机上运行的 Postgres?

我的 Windows 机器上运行着 Postgres,我需要从 WSL2 内部连接到它。

  • postgres Windows 服务正在运行
  • 我可以使用以下方式从 Windows 命令行连接到它psql
  • WSL2 vm 的 IP 是172.31.210.120,网络掩码255.255.240.0(使用 确定ipfconfig)。
  • 虚拟机内部的 Windows 主机的 IP 是172.31.208.1(使用 确定cat /etc/resolv.conf
  • 我可以使用 连接到从虚拟机上运行在主机上的简单 Web 服务器curl http://172.31.208.1:8080。如果我记录传入请求的 IP,我会得到 ,172.31.210.120这样可以验证两个 IP 都是正确的。
  • 我添加了以下行pg_hba.confhost 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\没有显示任何错误或任何表明有连接尝试的迹象。

我在这里遗漏了什么?

答案1

如果有人遇到同样的问题,下面是我解决这个问题的方法:

我需要添加 Windows 防火墙规则:

  • 打开“高级安全 Windows Defender 防火墙”(您可以在开始菜单中搜索找到它)
  • 点击“新规则...”
  • 创建新的 TCP/IP 规则
    • 协议:TCP
    • 端口:5432
    • 允许连接
  • 添加后,单击新创建的规则并从侧栏中选择“属性...”
  • 在“范围”选项卡上,指定 WSL2 虚拟机的 IP 地址(例如 172.31.208.0/24)

如果您按照我原来的问题中的所有其他步骤进行操作(获取两个 IP,将 VM IP 添加到pg_hba.conf),那么从 WSL2 命令行连接到主机 IP 就可以了。

答案2

显然,我不知道你的网络的来龙去脉,所以它们可能是相同的 IP 地址,但如果你ipconfig在 cmd 中运行并从那里获取 Windows 机器的内部 IP 地址?WSL 应该能够像网络上的任何其他设备一样在该 IP 上进行通信,因此将 IP 地址输入到您的 psql 配置中。

相关内容