仮想マシンを動作させるソフトウェアには「仮想マシンを複数のPCからアクセスするサーバとして扱う」用途のものと「仮想マシンをデスクトップアプリケーションの一つとして扱う」用途のものがあります。
「ホストするOSの上にサーバ用途の仮想マシンが存在するタイプ」と「サーバ用途の仮想マシンが直接ハードウェア上に存在できホストOSは不要なタイプ」があります。前者の例としてはLinuxやWindowsをホストOSとして必要とする無償の "VMware Server" があります。後者の例としては有償の "VMwarevShere(ESXi)" があります。
デスクトップアプリケーションとして仮想マシンを起動させるホストOSによって、使用できる仮想化ソフトウェアが異なります。
ここでは、ホストOS WindowsのデスクトップアプリケーションとしてゲストOS CentOSを扱うためのVirtualBox使用方法を記載します。
ダウンロードページにアクセスします。ホストOSはWindowsですので "for Windows hosts" のものをダウンロードしてインストールします。
「ファイル」→「環境設定」をクリックします。
仮想マシンの動作に必要なファイルの保存場所を変更したい場合は変更します。
マウスポインタが仮想マシンに対してアクティブになっている状態から、ホストOSに対してアクティブな状態に戻すためにはホストキーとして割り当てられたキーを押す必要があります。自分が押しやすいホストキーに変更しておくことをお勧めします。
プロキシサーバが必要な環境であれば設定しておきます。VirtualBoxのアップデート情報をダウンロードする際に使用される設定情報であり、ゲストOSの使用するネットワーク設定とは全く関係がないことに注意してください。
「新規」をクリックします。こちらのページにありますように、CentOSはRedHatディストリビューションと完全互換を目指しているLinuxのディストリビューションの一つであるため、「名前:CentOS」「タイプ:Linux」「バージョン:RedHat」と設定します。
残りの設定は以下のようにしておきます。
以上で、ゲストOSをインストールする仮想的なハードウェアの準備が整いました。
こちらのページからダウンロードできます。先程の仮想ハードウェア設定でRedHat(32bit)としたので32bitのものをダウンロードする必要があります。ここではCentOS-6のi386 (32bit) を採用しました。世界中のダウンロード用のサーバリストが表示されますが、地理的に近いものを選択します。イメージタイプのうち
をダウンロードしてください。README.txt に記載のあるように「CentOS-6.5-i386-bin-DVD2.iso」は不要です。
「起動」をクリックします。
初回起動時にはディスク選択を求められます。ドライブではなく先程ダウンロードしたISOイメージを選択してください。何かしらの操作ミスで選択し損ねた場合、右下のディスクアイコンを右クリックして選択してください。
初回起動時にはVirtualBoxの基本的な使用方法に関する注意書きが表示されますので、読んでおくようにしましょう。
「Install or upgrade an existing system」を選択
「OK」を選択
「Test」を選択
「OK」を選択
「OK」を選択
「Continue」を選択
Ejectされてしまったので、エラーが出てしまいます。右下のディスクアイコンを右クリックしてISOイメージを選択して「OK」を押してください。
「OK」を選択
キー配列について質問されます。ここでは "us" を選択しました。キー配列ナニソレ、という方は既定で選択されている "ja" を選択しておくのがよいです。
ハードディスクが壊れていると表示されますので、「Re-initialize all」を選択します。ゲストOS向けに割り当てられた仮想ハードウェアの範囲で初期化されるだけです。
タイムゾーンを選択します。
管理用rootユーザのパスワードを設定します。
初期設定のままでよいです。「OK」を選択
「Write changes to disk」を選択
「Reboot」を選択
再起動後、rootユーザについて、先程のパスワードでログインできます。
CentOSのネットワーク設定ファイルを開きます。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
設定について、
ONBOOT=no
となっていますので
ONBOOT=yes
に変更します。
保存してから
# service network restart
を実行してください。ネットワーク設定が有効になりますので、例えば
# curl http://www.yahoo.co.jp/
が通るようになります。プロキシ設定が必要な環境においては、「.bashrc」にプロキシ設定を記載して
# source ~/.bashrc
を実行しておく必要があります。外部インターネットに接続ができることが確認できたら、初回ですので
# yum update
を実行してパッケージを最新の状態にしておきましょう。
VirtualBoxマネージャの「設定」をクリック
ネットワークのアダプター1にNATが割り当てられていることが確認できます。先程curlコマンドで外部接続する際にはこのアダプタを経由していたのです。
というのがポイントです。割り当てNATにしておくと、VirtualBoxマネージャによって仮想的なルータがホストPCが所属するネットワーク内に仮想的に作成され、その仮想ルータ配下に作成されたサブネットワーク内にCentOSが存在する状態となります。
において
HWADDR=08:00:27:1A:EB:D9
となっていることからも分かるように、eth0というネットワークインターフェースはこのアダプタ1で作成された仮想ルータを経由して、ホストPCが所属するネットワークにNAT (Network Address Translation; ネットワークアドレス変換) して入り、更にホストPCが所属するネットワークのゲートウェイを経由して外部のインターネットにアクセスします。
上述のNATアダプタによって作成されている仮想サブネットワーク内のゲストOSにアクセスするため、仮想ルータに対してポートフォワーディング設定を行うことも可能です。つまり、ホストPCから仮想ルータに対してTCPアクセスがなされた際にゲストOSにアクセスが転送されるように設定することによって、ホストPCからゲストOSへのアクセスができる状況が実現できます。しかしながら、設定がやや煩雑であるため、もっとシンプルな解決策として、ホストオンリーアダプタの追加というものをここでは採用します。
NATアダプタの設定は、ゲストOS毎にありました。しかしながら、実は、VirtualBoxをインストールした時点でゲストOSによらない「VirtualBox Host-Only Network」というものが一つ作成されており、VirtualBoxマネージャの環境設定におけるネットワークで確認できます。
Windows側でipconfigによっても確認できます。
$ ipconfig
...(略
イーサネット アダプター VirtualBox Host-Only Network:
接続固有の DNS サフィックス . . . :
リンクローカル IPv6 アドレス. . . . : fe80::edf9:ce64:4d4b:7049%34
IPv4 アドレス . . . . . . . . . . : 192.168.56.1
サブネット マスク . . . . . . . . : 255.255.255.0
デフォルト ゲートウェイ . . . . . :
この仮想的なネットワーク内にはNATの場合と異なり仮想ルータが存在しません。ホストOSのみが所属しており、外部回線へのアクセスは不可能なネットワークです。ここにゲストOSを所属させるとホストPCと直接で有線接続された状況が実現でき、ゲストOSのネットワークインターフェース設定 eth1 を追加することで、ホストPCからゲストOSへのアクセスが可能になります。
まず、ゲストOSをシャットダウン (halt) し、「CentOS設定 → ネットワーク → アダプター2 → ネットワークを有効化 → 割り当て:ホストオンリーアダプタ」とすることで、ホストPCが所属する「VirtualBox Host-Only Network」仮想ネットワークに物理的にゲストOSを接続します。eth1の設定で必要になりますので、「高度」をクリックしてMACアドレスをメモしておきます。
次に、ゲストOSを起動し、「/etc/sysconfig/network-scripts/ifcfg-eth1」というファイルを新規作成し
DEVICE=eth1
HWADDR=xx:xx:xx:xx:xx:xx ←先程確認したアダプタ2のMACアドレス)
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=192.168.56.10 ←「VirtualBox Host-Only Network」で有効な範囲の固定したいIPアドレス
NETMASK=255.255.255.0 ←「VirtualBox Host-Only Network」のネットワーク設定を参照
NETWORK=192.168.56.0 ←「VirtualBox Host-Only Network」のネットワーク設定を参照
という内容で保存します。
# ifup eth1
を実行すると、先程物理的に接続したネットワークがゲストOSにとって有効なネットワークeth1として認識され、ifconfigコマンドを実行するとIPアドレスがeth1について固定で設定されていることが確認できます。この状態で、ホストPCで
$ ping 192.168.56.10
192.168.56.10 に ping を送信しています 32 バイトのデータ:
192.168.56.10 からの応答: バイト数 =32 時間 =11ms TTL=64
...
となり、アクセスできるようになっていることが確認されます。
192.168.56.10が「VirtualBox Host-Only Network」にルーティングされることは
$ netstat -rn ← 「-r ルーティング テーブルを表示します」「-n アドレスとポート番号を数値形式で表示します」
....
0.0.0.0 0.0.0.0 192.168.100.254 192.168.100.100 25 ← デフォルトゲートウェイ
....
192.168.56.0 255.255.255.0 リンク上 192.168.56.1 276 ← VirtualBox Host-Only Networkのルーティング設定
....
というルーティングテーブルによっても確認できます。実際
$ traceroute 192.168.56.10
と
$ traceroute 192.168.0.10
ではルーティングが異なることが確認できます。Unixコマンドが実行できないWindowsであれば "tracert 192.168.56.10" を実行してください。
再起動を繰り返していると、ある時「VirtualBox Host-Only Network」のIP設定が「192.168.56.1」ではなく「169.254.112.73」等になり、ホストPCからゲストOSへアクセスできなくなってしまうことがあります。そのような場合は「環境設定」→「ネットワーク」→「ホストオンリーネットワーク」から新規ネットワークを追加
新規作成されたネットワークの編集をクリック
ネットワーク設定を「192.168.56.1」「255.255.255.0」に設定
ipconfigで、新規ネットワークがWindowsPC側で認識されていることが確認されます。
CentOS側の「設定」→「ネットワーク」→「アダプタ2」→「名前」を先程作成したネットワークに変更してください。MACアドレス等は変更されないためeth1の設定変更は不要です。
VirtualBox で Debian9 を動作させる場合も、同様に NAT と HostOnlyAdapter を併用すると便利です。CentOS と同じアダプタを使い回して以下のように設定できます。CentOS に割り当てた固定 IP が 192.168.56.10
であったため Debian には 192.168.56.11
を割り当てています。
sudo vi /etc/network/interfaces
# NAT
allow-hotplug enp0s3
auto enp0s3
iface enp0s3 inet dhcp
# HOST ONLY
allow-hotplug enp0s8
auto enp0s8
iface enp0s8 inet static
address 192.168.56.11
network 192.168.56.0
netmask 255.255.255.0
broadcast 192.168.56.255
sudo systemctl restart networking.service