動機
ここ数日研究でPostgreSQLと戯れる日々が続いていましたが,いよいよここにきて1台のマシンでPostgreSQLのサーバ/クライアントをする段階から複数のクライアントを持たせてテストする段階になったんで,他のホストから接続できる様に設定しなきゃいけない.
方法
まずポートの設定から始める.まあその辺はディストリビューションによって違うけど,クラスタはubuntuなんでiptablesでTCP/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を再起動でしあわせ.