このエントリーをはてなブックマークに追加


PostgreSQLでIPv6のリッスンを無効にしたい場合の対処

CentOS6にyumコマンドを利用してPostgreSQLをインストールしました。
早速、以下のようにpsqlコマンドでlocalhostと設定したら接続できません。

[sakura@centos6 ~]$ psql -h localhost 
psql: FATAL:  ホスト"::1"、ユーザ"sakura"、データベース"sakura、SSL無効用のエントリがpg_hba.confにありません。

以前、公開した以下のリンクの通り、pg_hba.confを修正済みです。

以下、調査した内容を記します。

関連記事

使用環境

  • OS
    CentOS 6
  • PostgreSQL
    PostgreSQL 8.4.13

netstatコマンドで5432ポートを確認してみると…

IPv4, IPv6のlocalhostをLISTENしているのが確認できました。

[root@centos6 ~]# netstat -ant | grep 5432
tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:5432                    :::*                        LISTEN      

psqlのエラー出力をみてみると…

ホストが "::1"となっています。
IPv6で接続しようとしているようです。

[sakura@centos6 app]$ psql -h localhost 
psql: FATAL:  ホスト"::1"、ユーザ"sakura"、データベース"sakura、SSL無効用のエントリがpg_hba.confにありません。

IPv6でも接続できるようにpg_hba.confを修正する

本資料では、IPv6を無効化する方法を記述することにしていますが、一応pg_hba.confを修正してIPv6で接続できるようにしてみました。
pg_hba.confのIPv6 local connectionを修正しPostgreSQLを再起動すれば接続できるようになりました。

  • pg_hba.confの抜粋(修正済)
    # IPv6 local connections:
    host    all         all         ::1/128               trust
    PostgreSQLをserviceコマンドを使用して再起動すると接続できるようになりました。
    [sakura@centos6 ~]$ psql -h localhost 
    psql (8.4.13)
    "help" でヘルプを表示します.
    
    sakura=#

postgresql.confを修正してIPv4のローカルホストのみListenするようにする

以下は、pg_hba.confの修正は行っていません。
postgresql.confのlisten_addressesのみ変更しました。

CentOS6にyumコマンドでインストールしたpotgresql.confのlisten_addressesの設定は以下のようにlocalhostになっていました。

# - Connection Settings -

listen_addresses = 'localhost'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)

これを以下のように変更し保存し、PostgreSQLを再起動します。

listen_addresses = '0.0.0.0'

また、pg_hba.confの設定は以前公開した「localhostを指定すると接続できない場合の対処方法」と同じにしてあります。

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust

psqlコマンドで接続してみます。

[sakura@centos6 ~]$ psql -h localhost 
psql (8.4.13)
"help" でヘルプを表示します.

sakura=# 

netstatコマンドでポート状態を確認してみます。

[root@centos6 ~]# netstat -ant | grep 5432
tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:5432              127.0.0.1:38286             ESTABLISHED 
tcp        0      0 127.0.0.1:38286             127.0.0.1:5432              ESTABLISHED 

0.0.0.0:*と上記のpsqlコマンドで接続した状態が確認できます。
例にlisten_addresses = '127.0.0.1' と設定した場合は以下のようになり接続ができました。

[root@centos6 ~]# netstat -ant | grep 5432
tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:38288             127.0.0.1:5432              TIME_WAIT   

以上、PostgreSQLをIPv4でlocalhostに接続する方法を記述しました。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00