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