You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从WSL连接Windows本地PostgreSQL服务器失败的问题排查

解决WSL中.NET应用连接Windows上PostgreSQL的问题

问题概述

在WSL环境运行.NET应用,试图连接Windows主机上的PostgreSQL服务时遇到两类错误:

  1. 使用127.0.0.1:5432连接时,提示密码验证失败(28P01),但相同凭据在Windows本地可正常连接
  2. 改用WSL自身的vEthernet IP连接时,出现连接超时

核心原因

  • WSL的127.0.0.1与Windows主机的127.0.0.1分属不同网络命名空间,直接用localhost连接会被PostgreSQL判定为外部非本地连接,匹配不到pg_hba.conf中针对本地的认证规则
  • 错误使用了WSL自身IP而非Windows主机的vEthernet(WSL)IP,同时Windows防火墙未开放PostgreSQL端口给WSL子网

分步解决方案

1. 获取Windows主机的WSL适配器IP

打开Windows命令提示符(CMD),执行:

ipconfig

找到vEthernet (WSL)适配器的IPv4地址(例如172.19.0.1),这是WSL访问Windows服务的正确地址。

2. 配置PostgreSQL允许WSL连接

修改postgresql.conf

找到PostgreSQL安装目录下的data/postgresql.conf,修改listen_addresses为:

listen_addresses = '*'

(或指定Windows的WSL适配器IP,安全性更高)

修改pg_hba.conf

先在WSL中查看自身子网段:

ip addr show eth0 | grep inet

输出类似inet 172.19.230.81/20 brd 172.19.239.255 scope global eth0,取子网段172.19.224.0/20(根据实际输出调整),然后在pg_hba.conf末尾添加:

host    all             all             172.19.224.0/20        md5

(测试阶段可临时用0.0.0.0/0,生产环境不建议)

修改后重启PostgreSQL服务:

net stop postgresql-x64-16 && net start postgresql-x64-16

(替换为你的PostgreSQL版本对应的服务名)

3. 配置Windows防火墙允许WSL访问PostgreSQL

  • 打开Windows Defender防火墙,进入高级设置
  • 新建入站规则,规则类型选端口,指定TCP端口5432
  • 选择允许连接,应用于域、专用、公网(可根据网络环境调整)
  • 命名规则(例如PostgreSQL-WSL)并保存

4. 修正.NET应用连接字符串

将连接字符串中的服务器地址改为步骤1获取的Windows WSL适配器IP,示例:

"ConnectionStrings": {
  "DefaultConnection": "Host=172.19.0.1;Port=5432;Database=<Database_Name>;Username=<Username>;Password=<Password>;"
}

额外排查点

  • 确认PostgreSQL用户密码正确,且该用户拥有目标数据库的访问权限
  • 检查WSL中是否有防火墙规则阻止出站连接(默认无此限制)
  • 若仍提示密码错误,可临时将pg_hba.conf中的规则改为trust测试(测试后务必改回md5,避免安全风险)

内容的提问来源于stack exchange,提问作者Areg_1405

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:39:59