複数のLinuxシステムコンテナ間のSSH透過ルーティング

複数のLinuxシステムコンテナ間のSSH透過ルーティング

複数のコンテナを実行するシステムがあります。各コンテナは特別に構築されたLinuxシステムであり、各コンテナにはSSHサーバーが有効になっています。ホストへの新しいSSH接続を管理し、その接続を標準に従って特定のコンテナに透過的にルーティングするエンティティを作成したいです(魔女もSSH受信機能を持っています)。たとえば、ProxyCommandを使用してコンテナへの接続を透過的にルーティングできることを知っています。私の問題は、異なる条件に基づいて接続を別のコンテナに「動的に」再ルーティングしたいということです。たとえば、ホストがコンテナ A への接続を検出してバイナリのダウンロードを開始すると、SSH 接続を透過的にコンテナ B に再ルーティングし、そこからダウンロードを開始します。 。私はシステムユーザーがシステムを使用しているときに自分がコンテナにあり、接続が異なるコンテナ間でルーティングされることに気づかないようにこれを実行したいと思います。

理解に役立つ完全な例は次のとおりです。クライアントはSSHに接続します。この接続は、コンテナAとBが実行されているホストに対して行われます。ホストには、デフォルトで(またはいくつかの条件に応じて)着信SSH接続をコンテナAにリダイレクトするプロセスがあります。ホストはパケットをスニッフィングし、クライアントが渡したコマンドを調べて、コンテナAでクライアントが実行した操作を継続的に分析します。ホストが特定のコマンド(「wget」など)を検出すると、ホストはSSH接続をコンテナAからコンテナBに透過的に再ルーティングし、クライアントはコンテナが変更されたことを認識せず、コンテナからBのダウンロードを開始します。

基本操作

私はDockerを使用しており、接続を交換するコンテナは常に同じ環境(同じOSとバージョン)を持っています。

編集する:

次の例に示すように、他の状況に適用できるように接続を再ルーティングしてこれを行う方法を望みます。コンテナAを持つホストXがあります。クライアントがホストXに接続すると、SSH接続は受信SSHと同じネットワーク上のホストYに再ルーティングされます。以前と同様に、ホスト X は条件に応じてユーザーに透過的に SSH をホスト Y からコンテナ A に再ルーティングします。

ルーティング、iptables、またはその他の接続リダイレクト方法を使用してこれを達成するにはどうすればよいですか?

編集2:

基本的に、明白な再接続なしでSSHをあるシステムから別のシステムに再ルーティングする方法が必要です。最も簡単な場合は、クライアントからの接続を処理する1つのマシン(A)です。インターネット上のクライアントはこのコンピュータ(A)に接続し、ProxyCommandを使用して接続をコンピュータ(B)にリダイレクトします。簡単にするために、5分後にマシン(A)でスクリプトを実行して魔法を動作させるタイマーがあるとします。私が望むのは、このSSH接続をコンピュータ(B)からコンピュータ(C)にルーティングする方法です。難しい部分は、ユーザー(クライアント)がBからCへのこの変更に気付かないことを望むことです。クライアントがルーティングされた接続とそれを使用するときに元々接続していたコンピュータの変更に気づかないことを願っています。したがって、この「幻想」に対してクライアントへの元の接続を維持しながら、接続をマシン(A)のBからCにルーティングし、クライアントがマシン(C)の代わりに次のコマンドを実行する方法があるかどうかを想像します。 )はマシン(B)が実行されているときにコマンドを実行します。

答え1

いいえ。

これを強固な方法で達成することは不可能です。もちろん、スクリプトでシェルをラップして何かをハッキングすることはできますが、マイナーな用途には、実行中の作業がすぐに明らかになり、破損する可能性があります。その上、誰かがこれを望む妥当な理由はありません。最終的に達成したいことが何であれ、より良い方法があります。

これが指定されていない最終目標に合う場合は、CRIUを使用してリアルタイム移行を実行できます。 https://linuxcontainers.org/lxd/introduction/

関連情報