ローカルマシンからプライベートネットワーク上の DB に接続するにはどうすればよいですか?

ローカルマシンからプライベートネットワーク上の DB に接続するにはどうすればよいですか?

現在、プライベート ネットワーク内で Alpine Linux を実行している Docker イメージがあります。その Docker イメージへのルート アクセス権を持っています。

同じプライベートネットワーク上にデータベースインスタンスがあります。同じネットワーク上のシステムのみがデータベースにアクセスできます(例:前述のdockerイメージ)

現在、DB内部のデバッグを行うには、DockerイメージにSSHで接続し、そのDockerイメージ内からコマンドラインツールを実行する必要があります。これはかなり複雑です。

代わりに、ローカル PC 内の開発ツールを使用して、そのデータベースに接続する方法はありますか? この用語がポート転送なのかプロキシなのかわかりません。

答え1

次のように接続すると仮定します:

ssh user@docker

必要なもの-L

ssh -L port1:server:port2 user@docker

server:port2、Dockerコンテナから見たデータベースのアドレスとポートです(このアドレスはそこには)。

ローカルはsshTCP ポートでローカルにリッスンしますport1。ポートは選択してください。

ここで、ローカル コンピュータからlocalhost:port1(または127.0.0.1:port1) に接続すると、接続はserver:port2から到達しますdockerserverマシンは、それが から来ていることを認識しますdocker。これは、「ローカル ポート転送」と呼ばれます。

この方法では、ローカル ツールがリモート データベースにアクセスできます。ツールは に接続する必要がありますlocalhost:port1

ノート:

  • これはTCPでのみ機能します。UDPではない
  • ローカル ネットワーク内の他のマシンは、ローカル コンピュータをリレーとして使用してデータベースにアクセスできなくなります。おそらくこれが望ましい方法です。そうでない場合は、次の質問を確認してください。SSH を使用して、ローカル ネットワーク上のトンネル化されたリソースを提供できますか?
  • ssh -N …トンネルを確立するために使用するリモートコマンドを実行せずに
  • これを自動化するために使用しますautossh
  • 1024 未満の番号のポートは特権ポートです。通常のユーザーはこのようなポートにバインドできません。port1それに応じて選択してください。
  • SSH サーバー (あなたの場合) の設定を使用AllowTcpForwardingして、ポート転送を禁止できます。デフォルトでは許可されているので、おそらくそのままで動作するでしょう。sshd_configdocker

関連情報