VirtualBoxで仮想化を使用した経験

レベル:初心者

VirtualBoxで仮想化を使用した経験


はじめに


数年前、私は男性化に対処し始め、旅行メモのようなものを手に入れました。それを今ここに作成して投稿しています。 ここでは啓示はありません。この記事は初心者の管理者向けです。 ここで解決している問題は、LinuxおよびFreeBSDで既存の非仮想サーバーを仮想化することです。




VirtualBoxを選択した理由


その理由は次のとおりです。完全な VirtualBoxユーザーガイドは、製造元のWebサイトで入手できます。

今選択しない理由

仮想マシンを操作するためのOSの準備


VirtualBoxはほとんどすべてのOSにインストールできますが、安定した動作とそのすべての機能(ゲストシステムコンソールへのRDP接続など)はLinuxでのみ利用できるため、Debian Linuxが選択されました。 VirtualBox自体は特別なOS構成を必要としません。ゲストシステムのクリーンインストールのために、ゲストディスクイメージとインストールディスクイメージを保存するための個別のセクションを選択するだけです。

ただし、Webインターフェイス(phpvirtualbox)を介してVirtualBoxを管理するには、Webサーバー(Apache 2を選択)およびPHP 5が必要です。Debianでは、PHP 5およびApache 2のデフォルト構成はphpvirtualboxの要件を満たしているため、特別な方法で何かを構成する必要はありません。

仮想マシンのサーバー構成の説明:

phpvirtualboxをインストールする


Virtualboxには、PHPで実装され、virtualboxに統合されたvirtualbox Webサービスを使用する無料のWebベースのインターフェイスがあります。

phpvirtualboxをインストールします。

1. 開発者のサイトで 、最新バージョンを見てサーバーにダウンロードします。
virtbox# cd /var/www && wget phpvirtualbox.googlecode.com/files/phpvirtualbox-4.1-7.zip
2.開梱:
virtbox# unzip phpvirtualbox-4.1-7.zip
3.設定:
virtbox# cd phpvirtualbox-4.1-7.zip && cp config.php-example config.php && vim config.php
4. VirtualBoxの組み込みRDP-pluginを使用して、リモート接続用にVirtualBoxを実行しているサーバーのアドレスを登録します。
var $consoleHost = '10.0.0.7';

注意! 接続を成功させるには、サーバーで受信ポートが開かれている必要があります。デフォルトでは、ゲストシステムごとに1ポート、3389(TCP)から始まります。

5. virtualbox Webサービスを構成します。このために、次の内容のファイル/etc/vbox/vbox.cfgを作成します。
VBOXWEB_USER='vbox'
VBOXWEB_HOST=127.0.0.1
VBOXWEB_LOGFILE=/srv/log/vboxwebservice


6. virtualbox Webサービスを開始します。これの前に、ファイル/ srv / log / vboxwebserviceがvboxユーザーに対して読み書きされることを確認する必要があります。
/etc/init.d/vboxweb-service start.

phpvirtualboxがvirtbox.site/phpvirtualboxで利用可能になりました

仮想マシンの作成


Webベースのインターフェースを介して仮想マシンを作成することは非常に明白です; phpvirtualboxで[新規]をクリックし、ウィザードの指示に従う必要があります。 以下は、ゲストLinuxおよびFreeBSDの通常の操作に十分な、経験的に開発されたゲストシステム設定のリストです。
  1. システム
    1. 基本メモリ:512 MB
    2. プロセッサー(s):1
    3. PAE / NXを有効にする:いいえ-通常、32ビットシステムで4 GBを超えるメモリの使用をサポートするエミュレーションは必要ありません
    4. チップセット:PIIX3-マニュアルでは、エミュレートされたチップセットのタイプに対する速度の依存性については何も言及していないため、デフォルトで選択します
    5. 拡張機能
      1. IO APICを有効にする-複製されたAPICエミュレーションがないと、一部の複製されたサーバーは機能しません
      2. UTC時間のハードウェアクロック-原則として、ゲストシステムはUTCのシステム時間を想定し、このオプションはゲストOS時間をローカルタイムサーバーではなくUTCに送信します。
      3. 表示:2 MB-可能な最小値;この値が1 MBに設定されている場合、rdp接続は機能しません。 新しいマシンを作成するとき、phpvirtualboxが提供するデフォルト値のままにすることができます。
      4. ストレージ:ディスクイメージを作成する場所
  2. ネットワーク
    1. Debian:Virtio-ゲスト拡張機能の助けを借りたDebianは、仮想マシンで動作することを理解し、仮想ネットワークカードを使用することで、パフォーマンスが大幅に向上します。
    2. FreeBSD:Intep PRO / 1000 MTサーバーネットワークカード-FreeBSDにはネットワークカード用のゲストドライバーがないため、利用可能な最速のカードのエミュレーションを選択します。 FreeBSDでは、デバイスはem0と呼ばれます。
  3. シリアルポート:無効
  4. USB:無効
  5. 共有フォルダー:なし-ホストシステムファイルへのゲストアクセスを提供するVirtualBoxの機能は通常必要ありません。scpまたはsftpを使用する方が簡単です
コンソールから仮想マシンを作成するには、 マニュアルのセクション8.6を使用します

仮想マシン管理


ウェブベースの管理


Webインターフェースを介した仮想マシンの管理は簡単です。phpvirtualboxで目的のマシンを選択し、インターフェースで目的のアクションを選択するだけです。たとえば、Start、Stop(無条件シャットダウン、電源ボタンの押下に関する信号の送信、再起動、ゲストシステムの状態を保存し、その後状態をロールバックできます)また、ディスク上のメモリを保存し、その後ディスクからメモリをロードして作業を継続する可能性があるゲストシステムの一時停止。

マシンの右ボタンでゲストシステムをクリックすると、その設定、削除、ログの表示などの操作が可能になります。

また、ゲストシステムのコンソールに接続できることにも注目してください。これは、マウスとキーボードを実際のマシンに接続するのと似ています。 これを行うには、目的のゲストシステムを選択し、phpvirtualboxの[コンソール]タブを選択し、画面サイズを設定します(ゲストOSのテキストモードの場合、800x600で十分です)。[接続]をクリックし、リモート接続クライアント(ゲストシステムコンソールの内容を表示します)をクリックします。 ゲストシステムは、電源を入れた瞬間から管理できます。

コンソールを介した管理


VirtualBoxは、VBoxManageおよびVBoxHeadlessユーティリティを使用してゲストシステムを管理します。ゲストシステムの詳細については、 マニュアルに記載されています

VrtualBoxを実行するvboxユーザーからコマンドを実行する必要があります。別のユーザーまたはルートから起動すると、VirtualBoxはVboxユーザーのホームディレクトリに保存されている仮想マシン構成ファイルを見つけることができず、エラーが発生します。

vboxユーザーに切り替えるには、次のように言う必要があります。
su -s /bin/bash vbox

デフォルトでは、vboxユーザーはshell / bin / falseを持っているため、シェルを明示的に指定する必要があります。

以下は、ディスクイメージをオン、オフ、および操作するためのコマンドの例です。

1.ゲストシステムのグループの起動(サーバーの電源を入れて再起動すると自動的に実行できます):
for M in test1 test2 test3 ; do VBoxManage startvm $M --type=headless ; sleep 30 ; done

スリープ30を指定しない場合、起動時にサーバーのハードディスクからの読み取りが非常に集中するために一部のマシンが起動しない場合があり、一部のゲストシステムはハードディスクからの読み取りエラーがあると判断します。

2.ゲストシステムのグループをシャットダウンします(サーバーの電源を入れて再起動すると自動的に実行できます)。
for M in test1 test2 test3 ; do VBoxManage controlvm $M acpipowerbutton ; sleep 30 ; done

ほとんどすべてのマシンは、電源ボタンの押下を理解しており、正しく完了することができます。

3.ゲストシステム用の固定サイズディスクの作成:
VBoxManage createhd --variant Fixed --size 20000 --format vdi --filename test

4.ディスクイメージをVirtualBox形式から他の仮想マシンが理解できる形式に変換します。
VBoxManage internalcommands converttoraw test1.vdi test1.raw

RDPを介した接続


RDPを介して仮想マシンコンソールに接続できます。 Windowsでは、スタート->すべてのプログラム->アクセサリ->リモートデスクトップ接続を開き、アドレスvirtbox.testと、phpvirtualboxで表示できる特定のゲストシステムに関連付けられたポートを指定する必要があります。 使いやすくするために、接続パラメーターで1024x768の解像度を指定できます。接続ウィンドウは画面全体を占有せず、Alt + Tabなどのシステムキーボードショートカットをインターセプトします。

重要な注意:複数のユーザーを1つのゲストシステムに同時に接続することができます。 同時に、誰もが同じものを見、誰かが実行したすべてのアクションは、接続されている他のアクションに表示されます。 この設定を有効にするには、phpvirtualboxの仮想マシン設定の[リモート表示]タブの[表示]セクションで、[複数の接続を許可する]チェックボックスをオンにします。

ゲストシステムのスナップショットの作成


スナップショットにより、ゲストシステムの状態を保存し、オンデマンドでこの状態に戻すことができます。 これは実際にはどういう意味ですか?
ゲストシステムの画像を作成するとき、占有するディスク領域は実際には増加せず、ゲストマシンのディスクの既存の画像と比較して変更されたデータのみが追加の領域を占有します。 たとえば、/ etc / rc.confファイルが変更された場合、変更されたコピーは個別に書き込まれます。

phpvirtualboxを使用してスナップショットを作成するには、次のものが必要です。phpvirtualboxを使用してスナップショットを復元するには、次のものが必要です。

ダンプ作成


Debian Linux


クローン作成とリカバリの手順は、Debian Linuxがインストールされているtest1サーバーの例に示されています(Lenny 5から始まるすべてのバージョン)。 /, /var, /usr 3つのファイルシステムを持つ3つのパーティションがあるとします。

まず、ダンプをインストールする必要があります。
aptitude install dump

さらに、Debianでクローンサーバーのダンプを作成するには、スーパーユーザー(root)から、またはsudoを使用して次のコマンドを与える必要があります(ダンプがダンプしないことを確認する方法、自分で考えてください):
dump 0af test1.root /
dump 0af test1.var /var
dump 0af test1.usr /usr


ここに:
0 -- 0
a -- ,
L -- , , , , . Linux .
f -- .

結果のファイルは、VirtualBoxを使用してサーバーに転送する必要があります。

Freebsd


クローン作成とリカバリの手順は、FreeBSDがインストールされているtest1サーバーの例に示されています(6から始まるすべてのバージョン)。 /, /var, /usr 3つのファイルシステムを持つ3つのパーティションがあるとします。

FreeBSDでクローンサーバーのダンプを作成するには、スーパーユーザー(root)から、またはsudoを使用して(再び、ダンプのダンプについて思い出します)次のコマンドを与える必要があります。
dump 0aLf test1.root /
dump 0aLf test1.var /var
dump 0aLf test1.usr /usr


ここに:
0 -- 0
a -- ,
f -- .

Anaglogino、受信したファイルはVirtualBoxを使用してサーバーに転送する必要があります。

ダンプ展開


Debian Linux


1.仮想マシンを作成し、ディスクと起動可能なLiveCD Debianをそれに接続する必要があります。

2.次に、結果のセクションをマウントし、その上にダンプを作成して、展開する必要があります。
cd /mnt1 && restore -rf /mnt/test1.root && cd usr && restore -rf /mnt/test1.usr &&
cd ../var && restore -rf /mnt/test1.var


3.ブートローダーをインストールします。
grub-install /dev/sda1

4. /etc/fstab UUIDを修正します

5.パーティションのUUIDが/boot/grub/grub.cfg正しく指定されていることを確認します。
search --no-floppy --fs-uuid --set df7f92ba-2877-4b39-8805-966cf9ab52f3
linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=df7f92ba-2877-4b39-8805-966cf9ab52f3 ro quiet


6. /var/spool/cron/crontabs, /etc/crontab 、不要なものを無効にします。

7.復元するサーバーでコンソールがオンになっている場合は、 /etc/inittabから次のような行を削除します。
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 、およびfrom /etc/default/grub like this:
GRUB_TERMINAL=console (コメントアウトするだけ)。

Freebsd


作成されたダンプは、ゲストシステムに割り当てられたディスクイメージに展開する必要があります。 現在、FreeBSDで使用されるUFSファイルシステムのサポートは限られているため、ダンプを展開するFreeBSD仮想マシンが作成され、ダンプを保存するセクションがそれに接続され、クローンサーバーからのダンプがscpを使用して送信されます。 次に、ゲストシステムに割り当てられたディスクイメージがこのマシンに接続され、FreeBSDファイルシステムがこのイメージ上に作成され、結果のダンプが展開されます。

さらに、tmpパーティションは/ mntにマウントされ、ゲストOSのディスクイメージは2つのスライスとしてマークされ、最初のスライスはmnt1にマウントされ、2番目はマウントされずにスワップに割り当てられます。 その後、次のようにダンプを展開できます。

cd /mnt1 && restore -rf /mnt/test1.root && cd usr && restore -rf /mnt/test1.usr &&
cd ../var && restore -rf /mnt/test1.var


ここで、&&は、前のコマンドが正常に完了した場合にのみ次のコマンドが実行されるようにするために必要です。したがって、たとえば、varディレクトリが作成されず、それへの移行が行われず、ダンプが間違った方向にデプロイされる場合、状況が排除されます ダンプは、現在のディレクトリに対して相対的に展開されます。

クローンサーバーのゲストOSの構成に必要な変更


ロードする前に、仮想マシンで動作するようにゲストOSを再構成する必要があります。 通常、必要なアクションの数は最小限であり、次のように要約されます。

1. mnt1ディレクトリ(上記を参照)にあるため、ブートローダー設定ファイルを削除します。 これは、デフォルトのコンソールとしてCOMポートを使用しないようにするために何らかの実動サーバーを仮想化する場合に特に当てはまります。これにより、ブートローダーがフリーズします。
rm /mnt1/boot.config
rm /mnt1/boot/device.hints

2. /mnt1/etc/fstabの内容を次のものに置き換えます。
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 2 2

ゲストOSのディスクイメージは2つのスライスに分割され、最初のスライスはデータストレージ用に、2番目のスライスはスワップ用に用意されていると想定しています。

3.必要に応じて、エミュレートされたネットワークカードで動作するカーネルモジュールをロードする必要があることをクローンシステムに伝えます。このため、 /boot/loader.conf if_em_load="YES"ファイルに/boot/loader.conf if_em_load="YES"/boot/loader.conf if_em_load="YES"する必要があります。

4. /etc/rc.confで、ネットワークアダプターの現在の設定の行をコメントアウトし、次の形式の新しい行を追加する必要がある、割り当てられたIPアドレスのクローンシステムを示します。

ifconfig_em0="inet 10.0.0.8/24"

6.クローンサーバーに外部から見えるIPアドレスが割り当てられている場合、その設定を削除する必要があります。この設定は、他のサーバーとの相互作用の原因となります。 注意! クローンサーバーには現在のすべての設定が含まれているため、設定が削除されないと、クローンサーバーが戦闘システムの動作に干渉する可能性が理論的にあります。 FreeBSDベースのサーバーで確認する主な場所は、 /var/cron/tabs/です。

7.ダンプの展開に使用するFreeBSDをオフにし、サーバークローンを使用してゲストシステムをロードします。 ブートの問題が発生した場合、システム上のカーネルが変更された構成で再構築された可能性があります。これは、ブートローダーにデフォルトのカーネルをロードするよう指示することで修正できます。
unload
load boot/kernel.GENERIC/kernel
boot


これらのコマンドを戻すには、ゲストシステムの電源を入れ、RDPを介して接続し、Enterキーを押してブートローダーのオプションを指定できる画面にメッセージが表示されるのを待つ必要があります。

8.クローンサーバーにRDP経由でログインして、sshアクセス用のユーザーを追加します。
pw user add username -g wheel && passwd username

ここで、 -g wheelオプションは、FreeBSDのメンバーがsudoおよびsuを実行する権利を持っているwheelグループにユーザーを追加します。

仮想ネットワーク


VirtualBox内では、完全に分離された仮想ネットワークを作成できます。 これはどのような機会を提供しますか?

クローンサーバーを再構成する必要性を最小限に抑える
サーバー間の相互作用をテストするためのテスト環境を作成する

仮想ネットワークを作成する


仮想ネットワークを作成するには、phpvirtualboxでゲストシステムのプロパティに移動し、[ネットワーク]セクションに移動して、[接続先]フィールドで[内部ネットワーク]オプションを選択し、[名前]ドロップダウンリストで必要な仮想ネットワークを選択します。 どのような困難が生じる可能性がありますか?

新しい仮想ネットワークを作成する必要がありますが、インターフェイスにはそのようなオプションはありません。 次の2つの解決策があります。

[名前]ドロップダウンリストに新しい仮想ネットワークの名前を直接書き込もうとします。 ただし、この場合はエラーが発生する場合があります。
次に、CLIを使用してゲストネットワークアダプターを仮想ネットワークにバインドする必要があります。

sudo su -s /bin/bash vbox
VBoxManage modifyvm test1 --nic1 intnet


ここに
nic1はゲストネットワークアダプターで、1はそのシリアル番号です。 ゲストシステムのアダプターの数は制限されていません
intnet-仮想ネットワーク。名前は何でもかまいません。 VirtualBoxの特徴は、仮想ネットワークを特別に作成する必要がなく、同じ仮想ネットワーク上で複数のゲストシステムを指定するだけで、(エミュレートされた)物理レベルで自動的に接続されることです。これは、複数の実コンピューターを同じスイッチ(スイッチ)に接続するのに似ています。

詳細については、ユーザーマニュアルのセクション8.7.2ネットワーク設定を参照してください。

外部からアクセスできない仮想マシンを管理する


RDPアクセス


RDPサーバーは物理サーバーで実行されるため、任意の仮想マシンに接続するために、この記事のWebインターフェイスを介した管理のセクションに正しく記述されています。

ポート転送


NAT(VirtualBoxによって自動的に実装されます)を介して接続するゲストシステムに仮想ネットワークカードを作成し、ゲストシステムの任意のポートをVirtualBoxサーバーポートに転送(マッピング)することができます。 phpvirtualboxを介してこれを行うには、以下が必要です。

1.ゲストシステムのプロパティに移動し、[ネットワーク]セクションに移動して、[接続先]フィールドで[NAT]オプションを選択します

2.同じセクションの「詳細」セクションに隠れているオプションを展開し、ポート転送ボタンをクリックします

3.開いた[ポート転送ルール]ウィンドウで、次のパラメーターを指定します。

4.目的のプロトコル。[プロトコル]フィールドで[TCP]という名前をクリックします。

5. [ホストポート]フィールドでVirtualBoxサーバーの空きポートを指定します

6. [ゲストポート]フィールドにゲストシステムポートを指定します。

他に何も指定する必要はありません。 設定を適用すると、対応するVirtualBoxサーバーポートを介してゲストポートがすぐに(再起動せずに)使用可能になります。 例として、ゲストシステムのsshポート(22 TCP)を2200 VirtualBoxポートに転送する場合、次のパラメーターを指定する必要があります。

Name ssh ( )
Protocol TCP
Host IP
Host Port 2200
Guest Port 22
Guest IP

表示されるポートの数に制限はなく、必要な数だけ表示できます。

仮想ルーター


外部アドレスなしでVirtualBoxに相互作用するゲストシステムのグループを作成する場合、ルーターの役割を果たす別のゲストシステムをインストールするのが理にかなっています。 どのような目標が達成されていますか?

サーバーによって複製されたネットワークアダプターの構成は、変更しないでおくことができます。 同時に、仮想ルーターは、他のゲストシステムが実際の外観を作成し、実際のホスト名とIPアドレスを使用します。
VirtualBox NATオプションが使用されている場合にのみ機能する、上記の外部アドレスもポート転送機能もないゲストシステムの場合、sshを介した直接アクセスが可能になります。

仮想ルーターを作成するには、次の手順を実行します。

その後、外部アドレスなしで仮想ルーターからゲストシステムにポートを転送できます。 iptablesを使用するLinuxの場合、仮想ルーターのTCPプロトコルのポート2200から内部システム192.168.0.2の外部アドレスなしでゲストシステムのポート22に着信接続を転送するには、次のルールで十分です。
iptables -t nat -A ROUTING -p tcp -i eth0 --dport 2200 -j DNAT --to-destination 192.168.0.2:22

仮想ルーターは正しく構成されており、アドレス192.168.0.2のゲストシステムが配置されている仮想サブネットで動作するように構成されたネットワークアダプターがあると想定されます

SSHアクセス


上記の例によれば、sshクライアントで仮想ルーターのアドレスとポート2200を指定することにより、外部アドレスなしでsshを介してゲストシステムにログインできます。同様に、scpを介してログインしてゲストシステムにファイルを転送できます。

Source: https://habr.com/ru/post/J142963/


All Articles