8

I have Postgres running on my windows machine and I need to connect to it from inside WSL2.

  • The postgres windows service is running
  • I can connect to it from the windows command line using psql
  • The IP of the WSL2 vm is 172.31.210.120, netmask 255.255.240.0 (determined using ipfconfig).
  • The IP of the windows host from inside the vm is 172.31.208.1 (determined using cat /etc/resolv.conf)
  • I can connect to a simple web server running on the host from the vm with curl http://172.31.208.1:8080. If I log the IP of the incoming requests, I get 172.31.210.120 so this verifies that both IPs are correct.
  • I added the following line to pg_hba.conf: host all all 172.31.210.120/20 scram-sha-256
  • I restarted the postgres windows service

If I try to connect to it from WSL using the following command:

$ psql --host=172.31.208.1 --port=5432 --user=postgres

I get this error:

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?

NOTE: I also tried to test the connection using telnet but it failed too.

The logs under c:\Program Files\PostgreSQL\13\data\log\ show no errors or any signs that there was a connection attempt.

What am I missing here?

Botond Balázs
  • 231
  • 2
  • 6

2 Answers2

5

Here is how I solved this in case somebody has the same problem:

I needed to add a Windows Firewall rule:

  • Open "Windows Defender Firewall with Advanced Security" (you can find it by searching in the Start Menu)
  • Click "New rule..."
  • Create a new TCP/IP rule
    • Protocol: TCP
    • Ports: 5432
    • Allow Connection
  • After adding it, click on the newly created rule and choose "Properties..." from the sidebar
  • On the Scope tab, specify the IP address of your WSL2 virtual machine (E.g. 172.31.208.0/24)

If you do everything else in my original question (get both IPs, add VM IP to pg_hba.conf), then connecting to the host IP from the WSL2 command line will work.

Botond Balázs
  • 231
  • 2
  • 6
0

Obviously I don't know the ins and outs of your network so they might be the same IP address, but if you run ipconfig in cmd and get your Windows machine's internal IP address from there? WSL should be able to communicate on that IP as if it were any other device on your network, so put that IP address into your psql config.

  • Thanks. I added `host all all 192.168.0.105/24 scram-sha-256` to `pg_hba.conf` and ran `psql --host=192.168.0.105 --port=5432 --user=postgres` in WSL2 bash but I got a timeout again. I verified that this IP is also correct using the http server I mentioned in my question. – Botond Balázs Nov 10 '20 at 11:15