YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

localhost外のホストから接続する

動機

ここ数日研究でPostgreSQLと戯れる日々が続いていましたが,いよいよここにきて1台のマシンでPostgreSQLのサーバ/クライアントをする段階から複数のクライアントを持たせてテストする段階になったんで,他のホストから接続できる様に設定しなきゃいけない.

方法

まずポートの設定から始める.まあその辺はディストリビューションによって違うけど,クラスタubuntuなんでiptablesTCP/IPの5432番ポートの接続を許可すればOK.こんな感じ.

### trusthost -> Global IP , Private IP -> trusthost
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s
$trusthost -d $my_internet_ip --dport 5432 -j ACCEPT
iptables -A OUTPUT -p tcp -s $my_internal_ip --sport 5432 -d
$trusthost -j ACCEPT

でもって次にpostgresql.confの設定.

# emacs /etc/postgresql/8.1/main/postgresql.conf
listen_addresses = '*'

listen_addressesはデフォルトだとlocalhostなんで,これを設定してやらないといくらポートの開放をしても

psql: could not connect to server: Connection timed out
        Is the server running on host "***.***.***.***" and accepting
        TCP/IP connections on port 5432?

みたいなエラーが出てきます.最後にpg_hba.confの設定.

# emacs /etc/postgresql/8.1/main/pg_hba.conf
host    all    all    0.0.0.0    0.0.0.0    trust

こうすると全部のホストからのアクセスを許可となります.これはゆるゆるですんで実際は

host    dbname    username    xxx.xxx.xxx.xxx    255.255.255.0    md5

のような形になさることをおすすめいたします.アドレスの部分はきちんと設定しないと

LOG:  invalid IP address "trust" in file
"/etc/postgresql/8.1/main/pg_hba.conf" line 79: Name or service not
known
FATAL:  missing or erroneous pg_hba.conf file
HINT:  See server log for details.

みたいなエラーがでますんで要注意です.以上の設定が終わったらPostgreSQLを再起動します.

# /etc/init.d/postgresql-8.1 restart

これで他のホストからアクセス可能になりました.めでたし.

まとめ

ポート開放,postgresql.confのlisten_addressesの設定,pg_hba.confでhost関連の行追加,PostgreSQLを再起動でしあわせ.