WSL2からWindows10のPostgreSQLにアクセス

Djangoの開発環境を構築中です。DBはWindows10にPostgreSQL、DjangoはWSL2のUbuntuで開発しようとしてちょっとはまりました。

だいぶ前に入れていたPostgreSQL 11にUbuntuから接続しようとしたら、以下のようなエラーが出て接続できませんでした。

psql: error: could not connect to server: Connection refused
    Is the server running on host "172.27.32.1" and accepting
    TCP/IP connections on port 5432?

「172.27.32.1」は /etc/resolv.conf の nameserver のアドレスです。

Defender の「受信側の規則」で5532ポートは許可しています。Ubuntuで「iptable –list」を確認しても制限はありませんでした。

さっぱりわからずお手上げ状態だったので、PostgreSQLを13にバージョンアップしてみたらあっさりつながりました。なんで?

ま、とにかくつながったので、pg_hba.conf の設定をしようと思ったのですが、WSL2のネットワークアドレスは起動するたびに変わるので、どうしたものかと悩みました。

Ubuntu 側からホストOS側へ接続するときは、WSL2(Hyper-V)のDNSで「$HOSTNAME.local」という名前でホストOSにアクセスできるので解決しましたが、Ubuntu のアドレスを pg_hba.conf で許可しなければならないのをどうしようかと。いろいろ調べましたが、固定IPにはできなさそうでした。

@ITの「Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能」という記事に、以下の記載を見つけました。

複数の仮想マシンが個別の仮想スイッチを使う可能性があるため、Windows 10のHyper-Vでは、IPv4アドレスとして「172.16.0.0~172.31.255.255」までのプライベートアドレスを使い、これを複数に分割して利用している。

(「Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能」より)

ということで、割り当てられる可能性のあるIPアドレスを以下のように pg_hba.conf に追加しました。

# vEthernet(WSL)
host	all		all		172.16.0.0/12		scram-sha-256

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です