ポートフォワーディングによるVirtualbox内のpostgresqlへの接続が失敗する


7

私はvagrantによって作成された仮想ボックス内にpostgresqlサーバーを持っています。

Vagrantファイルを使って、ボックス内の5432からホストシステムの15432へのポート転送も設定しました。

経由で接続する場合 psql

$ psql dbname username -h 127.0.0.1 -p 15432

psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

サーバーとクライアントの両方がUbuntu 12.04(postgresql-9.1、バージョン:9.1 + 129ubuntu1)を実行しています。

VM内部でポート5432に自己接続することで問題なく動作します。

自分自身を転送するポートが完全に間違っているようには見えません。なぜなら、私が別のポートに行こうとすると、「接続が拒否されました」というメッセージが表示されるからです。


1
ホストの 'ifconfig -a'は何を返しますか? '192.168.56.x'のようなVBox NAT用の2番目の(仮想)ネットワークアダプタが必要です。コマンド内の127.0.0.1をVBox NAT IPアドレスに置き換えた場合、正しく機能しますか? vbox NATに接続するときは、ゲートウェイルーターの公的に転送されたポートに接続するのと同じです。 NATネットワーク外のホストは、パブリックIPを使用して接続します。
Frank Thomas

1
@FrankThomas私は通常のeth0、lo、wlan0インターフェースしか持っていません。転送されたポートと127.0.0.1を介してSSHとHTTPに接続することはうまくいきます。
Alex

回答:


7

パブリックインターフェースを監視するようにPostgresを設定しましたか?デフォルトでは、ループバックアダプタでのみ待機します。

Postgresクックブックを使用している場合は、属性を設定する必要があります。

set['postgresql']['config']['listen_addresses'] = '*'

これはpostgresql.confのlisten_addressesパラメータに対応します。

そしておそらくPostgresがあなたの接続が入ってきていると考えるネットワークにpg_hbaを開いてください:

これもまた、Chef属性です。

set['postgresql']['pg_hba'] = [
    {:type => 'local', :db => 'all', :user => 'all', :addr => nil, :method => 'trust'},
    {:type => 'host', :db => 'all', :user => 'all', :addr => '127.0.0.1/32', :method => 'trust'},
    {:type => 'host', :db => 'all', :user => 'all', :addr => '10.0.0.0/16', :method => 'trust'}
]

大きな助け、特にシェフビット。
JL Peyret

あなたが得ることができるあなたのvmのホストIP(vagrant用語で)に基づいて、より具体的になることによってこれを少し引き締めることができます node [:network] [:default_gateway] 私の場合は、10.0.2.15です。これはifconfigにもあります。その後postgres.confは listen_addresses = 'localhost、10.0.2.15'
JL Peyret

そしてpg_hba.confは myuser 10.0.2.15/0のすべての信頼をホストする
JL Peyret

両方試してみた、問題はまだ解決しない。
art-solopov

ファイアウォールを無効にしましたか?
Bobby Durrett

2

SSHトンネリングを使用します。

ホスト上でこのコマンドを実行して、ホスト上のポート5454をVirtualBoxゲストマシン上のポート5432(PostgreSQLのデフォルトポート)にマッピングします。この例では、ホストのポート2222をゲストのSSHデフォルトポート(ポート22)にマッピングするようにポート転送がすでに設定されていると仮定しています。

ssh -p 2222 -f -L 5454:127.0.0.1:5432 dev@localhost -N
  • ホストポート:5454
  • ホストアドレス:127.0.0.1
  • ゲストポート:5432
  • ゲストアカウント:dev
  • ゲストサーバ:localhost

これを実行した後、 'localhost'とポート5454を使用してゲストのpostgresqlサーバーへの接続を設定できるはずです。例えば、

psql -h localhost -p 5454 -U postgres
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.