WSL2连接Windows11宿主系统中的数据库需要解决的端口问题

技术运维 120

WSL中的Ubuntu如果要访问宿主系统windows 11的Postgresql数据库需要将防火墙的入口规则打开,并且还需要正确配置postgresql配置文件中的listen_addresses端口。

否则会得到这样的错误提示:

[ECONNREFUSED] connect ECONNREFUSED 127.0.0.1:5432

Please try again

如果是MongoDB则需要修改文件X:\Program Files\MongoDB\Server\4.1\bin\mongod.cfg中的bindIp参数为0.0.0.0

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

TIP:数据库配置文件修改后一定要重启服务方可生效。

需要注意的是在WSL中数据库连接主机的IP不要用localhost/127.0.0.1,而是宿主系统通过ipconfig查询到的Ethernet adapter vEthernet (WSL) IP地址。

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::62d6:6508:7351:bd03%59
   IPv4 Address. . . . . . . . . . . : 172.24.80.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

可以在WSL系统中使用ip route查询

ip route
default via 172.24.80.1 dev eth0 proto kernel
172.24.80.0/20 dev eth0 proto kernel scope link src 172.24.82.254

cat /etc/resolv.conf

nameserver 172.24.80.1

用telnet命令检测WSL和宿主电脑端口的通信连接状态

在拿到正确的IP地址之后我们可以在wsl中使用telnet来检查IP和端口的连接情况,如果是connected to...表示无问题,否则一定要按照下面的方法来诊断排查

 telnet 172.24.80.1 5432
Trying 172.24.80.1...
Connected to 172.24.80.1.
Escape character is '^]'.

一 设置宿主防火墙规则

从系统搜索框中搜索“Windows Defender Firewall with Advanced Security”,选择左侧"Inbound Rules",然后选择右侧“New Rule

依次选择Port

选择TCP和端口

选择Allow the connection

这里根据实际情况来,至少要选择一个Public

最后输入规则名称完成添加。

配置授权IP访问范围

在列表中右键刚刚保存的规则,点击“Properties ”,找到“Scope”,在“Remote IP address”中添加两条规则

  1. from 172.0.0.1 to 172.254.254.254
  2. from 192.0.0.1 to 192.254.254.254

最后完成即可。

二 Postgresql配置

打开postgresql安装目录下的data目录, 打开postgresql.conf文件找到listen_addresses,如果后面的参数是localhost则修改为*

listen_addresses = '*'

修改pg_hba.conf文件,允许来自WSL2的连接

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             172.0.0.0/8             md5
host    all             all             192.0.0.0/8             md5

最后重启服务

net stop postgresql-x64-12
net start postgresql-x64-12

三 其它可能引发的问题

1. Windows 升级导致保留tcp端口问题

要查看动态端口设置是否不正确,可以运行:

netsh int ipv4 show dynamicport tcp

如果您看到Start Port: 1025,则动态端口范围配置错误。要修复它,您需要将其设置为更合理的范围 - 避免 <10k 端口。(这通常是开发人员放置自己的应用程序的地方)

将其设置为推荐范围:(如果您的问题与 ipv6 有关,则相应地调整命令)

netsh int ipv4 set dynamic tcp start=49152 num=16384

参考:https://stackoverflow.com/a/62359555/2441655

2. IP Helper服务引起的问题

在这里我看到了因为IP Helper服务引起的问题,解决方法很简单关闭服务即可。

3. 端口被WSL内部占用

在这里还出现了用wsl --shutdown {name}命令关闭WSL,重新启动服务成功的情况。

最后修改配置后不要忘记重启一下电脑。

Post Comment