PostgreSQL リモート接続のデバッグ

PostgreSQL リモート接続のデバッグ

オンラインソースから PostgreSQL データベースに接続する際に問題が発生しています。

PostgreSQLは正常にセットアップされているようです。デフォルトのポート5432で実行されており、postgresql.confには次の行があります。

listen_addresses = '*'

pg_hba.confには次の内容があります

host    dbname    usname    all    md5

pgadminで次の資格情報を使用して、別のマシンからPostgreSQLデータベースに接続できます。

Name              local
Host              192.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

これらを使用すると完璧に接続でき、問題なく動作するようです。

次に、ADSLルーターのポート192.xx.xx.xx:5432を転送し、パブリックIPアドレス197.xx.xx.xx(インターネットIPから見える)を使用して確認しました。 http://www.canyouseeme.org/ ポートが正常に転送されたことがわかります。

SELinux を無効にし、ファイアウォールも一時的に無効にしました。

しかし、接続しようとすると

Name              online
Host              197.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

サーバーがリッスンしていないというエラーメッセージが表示される

could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "197.xx.xx.xx" and accepting TCP/IP connections on port 5432?

これはなぜでしょうか? ポート転送を介して接続を受け入れるようにするには、追加の手順を追加する必要がありますか?

答え1

allhostの行の CIDR フィールドでは無効ですpg_hba.conf

デフォルト ファイル自体のコメントからpg_hba.conf:

# ホスト データベース ユーザー CIDR アドレス メソッド [オプション]

そして

CIDR-ADDRESS は、レコードが一致するホストのセットを指定します。これは、IP アドレスと、マスク内の有効ビット数を指定する整数 (0 ~ 32 (IPv4) または 128 (IPv6)) である CIDR マスクで構成されます。または、IP アドレスとネットマスクを別々の列に記述して、ホストのセットを指定することもできます。

代わりにこれを試してください:

host    dbname    usname      197.xx.xx.xx/32  md5

これにより、リモートホスト 197.xx.xx.xx からのみ usname から dbname への接続が許可されます。

197.xx.xx /24 サブネット全体を許可する場合は、次を使用します。

host    dbname    usname      197.xx.xx.0/24  md5

関連情報