web-dev-qa-db-ja.com

Postgres接続アクセスがIPv6アドレスで拒否されました

WindowsにPostgreSQL 9.1 x64をインストールし、リスンアドレスを設定しましたが、pgAdminで接続すると、次のエラーが発生します。 PostgreSQLが通常のIPアドレスではなくIPv6アドレスを表示している理由がわかりません。

enter image description here

認証を機能させるために、エラーメッセージに基づいて、pg_hba.confを次のように更新しました。

Host all all fe80::c5d2:XXXX:XXXX:3bc0/12 trust

うまくいきましたが、醜く、具体的すぎます。 PostgreSQLのドキュメントに基づいて以下を試しましたが、どれも機能しませんでした。同じ「アクセス拒否」エラーが発生しました。

local all all trust
Host all all 0.0.0.0/12 trust

IPv6アドレス空間全体をカバーするこれを機能させましたが、より制限するためにIPv6範囲を指定するにはどうすればよいですか?

Host  mydb  myuser  ::/0   trust

質問

  • PgAdminが通常のIPではなくIPv6アドレスを取得するのはなぜですか?
  • ::/0に頼らずにIPv6で範囲を指定するにはどうすればよいですか?
9
Raffian

fe80:で始まるIPv6アドレスは、リンクローカルアドレスです。異なるサブネットまたはインターネット間でルーティングすることはできません。これらは、同じLANに接続されたマシン間の通信専用です。リンクローカル範囲はfe80::/10として定義されます。ローカルLANの全員を信頼するなら、あなたはそうすることができます

Host  all  all  fe80::/10  trust

ローカルLAN上の全員を信頼しない場合は、ユーザー名とパスワードによる保護を使用することをお勧めします。

Host  all  all  fe80::/10  md5

md5を指定すると、ユーザー名とパスワードによる保護が引き続き使用されますが、パスワードは読み取り可能な形式で送信されなくなります。ローカルLAN上の人を信頼していないので、おそらくスヌーピング可能なパスワードをネットワーク経由で送信すべきではありません。

17
Sander Steffann

PgAdminがその動作をする理由がよくわかりません。私の推奨事項は、彼らのサポートリストで質問し、そのツールの設計に関する情報と、これがバグか機能かを知ることです。 Windowsの名前解決にも関係している可能性があります。回避策として、ipv4アドレスまたは127.0.0.1への接続を指定できるようにする必要があります。

Pg_hba.confの質問に関しては、ipv4とipv6はファイル内の異なるスペースを取得するので、これを追加する必要があることは不思議ではありません。

接続できるようになった今、1つのオプションは、パスワード(ALTER USER "username" WITH PASSWORD 'password')。その後、pg_hba.confでipv6スペース全体をmd5に設定でき、それほど心配する必要はありません。また、Windowsドメインを使用している場合は、LDAP、SSPI、またはKerberos 5認証を使用して、ドメインメンバーのみにアクセスを許可できます。ただし、これはやや高度なトピックです。

2
Chris Travers

localhostに接続しているため、IPv6が使用されています。 localhostboth127.0.0.1および::1に解決されます。

オペレーティングシステムはIPv4よりもIPv6を優先するため、IPv6が使用されるのはそのためです(ただし、Linuxでは/etc/gai.confを使用して構成できます)。アドレス::1が送信元アドレスとして使用されることはなく、リンクローカルアドレス(2000::/3)を送信元アドレスとして残すグローバルアドレス(fe80::/10)もありません。 。

あなたがそれについて考えるとき、すべての完全に論理的で、正常な、予想される行動。

2
Jeremy Visser