VPNがどのように機能するかにより、リモート(例:ほとんどがJDBCを使用する家庭)から接続するときの背景として、常に異なるIPアドレスを取得し、pg_hba.confにIPがリストされていないため接続できません。したがって、私はホスト名で試しましたが、それも機能しません。
IPアドレスではなくホスト名でPostgreSQLへのアクセスを許可するにはどうすればよいですか?
編集:
私はコメントよりもここに置くのが適切だと思われる次のものを見つけました:
https://www.postgresql.org/message-id/[email protected]
ホスト名が指定されている場合(IPアドレス範囲または特殊なキーワードでないものはすべてホスト名として扱われます)、その名前はクライアントのIPアドレスの逆名前解決の結果と比較されます(たとえば、逆DNS DNSが使用されている場合、ルックアップ)。ホスト名の比較では、大文字と小文字は区別されません。一致する場合、ホスト名に対して前方名前解決(DNSの前方参照など)が実行され、解決されるアドレスのいずれかがクライアントのIPアドレスと等しいかどうかが確認されます。両方向が一致する場合、エントリは一致すると見なされます。 (pg_hba.confで使用されるホスト名は、クライアントのIPアドレスのアドレスから名前への解決で返されるものでなければなりません。そうでない場合、行は一致しません。一部のホスト名データベースでは、IPアドレスを複数のホスト名に関連付けることができますが、オペレーティングシステムは、IPアドレスの解決を要求されたときに1つのホスト名のみを返します。
したがって、ホスト名を使用したpingは機能しますが、DNSの逆引きは機能しません。そのため、上記のテキストによると、接続が失敗する理由を説明しています。したがって、VPNが機能する方法は、nslookup
が実際に名前を見つけることができないため、これを非難することです。
私の問題の考えられる説明:
https://www.postgresql.org/message-id/[email protected]
ホスト名が指定されている場合(IPアドレス範囲または特殊なキーワードでないものはすべてホスト名として扱われます)、その名前はクライアントのIPアドレスの逆名前解決の結果と比較されます(たとえば、逆DNS DNSが使用されている場合、ルックアップ)。ホスト名の比較では、大文字と小文字は区別されません。一致する場合、ホスト名に対して前方名前解決(DNSの前方参照など)が実行され、解決されるアドレスのいずれかがクライアントのIPアドレスと等しいかどうかが確認されます。両方向が一致する場合、エントリは一致すると見なされます。 (pg_hba.confで使用されるホスト名は、クライアントのIPアドレスのアドレスから名前への解決で返されるものでなければなりません。そうでない場合、行は一致しません。一部のホスト名データベースでは、IPアドレスを複数のホスト名に関連付けることができますが、オペレーティングシステムは、IPアドレスの解決を要求されたときに1つのホスト名のみを返します。
アドレス
このレコードが一致するクライアントマシンアドレスを指定します。このフィールドには、ホスト名、IPアドレス範囲、または...
(強調鉱山)
したがって、ホスト名をpg_hba.conf
に入れることがサポートされています。
最初の接続要求の間、Postgresは(TCPプロトコルの一部として)IPアドレスのみを認識し、IPアドレスをホスト名に解決するためにルックアップを実行する必要があります。これは、クライアントがおよびPostgresサーバーは同じネットワークにあり、同じDNSサーバーを使用しています。
私の仮定は、あなたのVPNソリューションがそのホスト名ルックアップを適切に機能させていないことです。
常に同じ範囲からIPアドレスを取得する場合は、単一のアドレス(またはホスト名)ではなくpg_hba.conf
にその範囲を構成できます。