我的 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.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\
没有显示任何错误或任何表明有连接尝试的迹象。
我在这里遗漏了什么?
答案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 配置中。