単一ホストで実行されている仮想マシンを分離するために複数のサブドメインを設定する最も簡単な方法

単一ホストで実行されている仮想マシンを分離するために複数のサブドメインを設定する最も簡単な方法

質問:

単一のCentosホストサーバーに複数の仮想化Centos、rhel、またはubuntuゲストシステムを設定する予定です(ほとんどのKVMを使用)。各ゲストVMはWebアプリケーションインスタンス+その他のサービス/プロトコルを実行します。各ゲストVMは、まるで別々のDNSボックスであるかのように、開いているポートのホストの外部からアクセスできる必要があります。

私は(明らかに)ネットワーク技術/構成に弱いので、この問題の最初の端に到達しようとしています。これに基づいて構築するために私が研究しなければならなかった主な方法は次のとおりです。必要に応じてネットワーク構成「疑似コード」。 :)

例:

私がドメイン名foo.comを所有しているとしましょう。

DNS guest.foo.comがインストールされている物理CentOSシステムがあります。

この物理ホストでは、3 つの仮想マシンを実行します。 1.guests.foo.com、2.guests.foo.com、および3.guests.foo.comを介してゲストVMにアクセスできるようにしたいです。ゲスト仮想マシンはcentos、rhel、ubuntuディストリビューションを実行します。

各仮想マシンは、httpトラフィックだけでなく、SSH接続およびgit:プロトコル操作を含むすべての(ローカルで開かれた)ポートに応答する必要があります。

どこから始めるべきで、最もエレガントな方法は何ですか?大まかに言えば、ホストとゲストがこれを行うために必要な最小設定は何ですか?

メモ:

詳細については、質問のテキストとコメントを更新します。

答え1

複数のシステムがIPアドレスの同じポートをサービスできるようにする唯一の方法は、アプリケーションプロトコルがサーバーが元の要求が転送されたホスト名を識別するのに役立つ追加情報を提供することです。それ以外の場合、すべてのサーバーがTCP / IP層から推論できるのは、すべてのDNS名に対して同じ宛先IPアドレスとポートです。

ほとんどのプロトコルは必要なものをサポートしていません。 HTTP/1.1Host:には、クライアントが探しているホスト名をサーバーに通知するヘッダーが含まれているため、HTTP は例外です。 HTTPではこれを呼び出します。名前ベースの仮想ホスティング。ただし、SSLはこれをやめるので、次のような新しい拡張があります。サーバー名の表示これはSSLのサポートも提供します。Host:今日、すべてのシステムはヘッダーを提供していますが、SNIはまだどこでも完全にサポートされていません。

このgitプロトコルはホスト名を提供しません。しかし、子は新しいものですスマートHTTPgit転送は、必要な操作を実行できるようにHTTPを介して実行するための良い方法です。

HTTPで何をしても、実際の設定方法は、名前ベースの仮想ホストを使用して要求を正しいコンピュータに送信するプライマリIPアドレスからプロキシサーバーを実行することです。

SSHの場合、実際に別のポートを使用する以外に選択肢はあまりありません。手動を除いて、プロキシサーバーのように動作する独自の「バウンスホスト」を作成できます。ユーザーはまずプライマリIPアドレスに接続します。これはssh、LAN IPアドレスを使用して他のホストにさらに接続できるミニシェルを提供します。 )。ただし、SFTPやその他の自動接続などの非対話型プロトコルを使用すると、スムーズに機能するのが困難になります。別のアプローチは、ユーザー名の情報を使用して自動的に接続するホストを決定するSSHサーバーを作成することです。たとえば、コマンドは単一のIPアドレスに接続でき、変更されたSSHサーバーはユーザー名を抽出して生成します。への新しい接続を作成する必要があるかもしれない既存のソフトウェアがあるかどうかわかりません。ssh [email protected]username@machine1


もちろん、IPv6を使用すると、各コンピュータに百万の独自のパブリックアドレスを提供できるため、これらのトリックは不要です。

関連情報