Virtual Boxを使う

ふとしたきっかけから使うようになった、Virtual Boxについていろいろ書いています。 ユーザーマニュアルを見ると、コマンドラインから、いろいろいじれるみたいなので楽しそう。

VirtualBoxの実行環境は、Deiban GNU/Linuxです。

VirtualBox 4.0以前はプロプライエタリライセンスのVirtualBoxとプロプライエタリの部分を除いてGPL v2で提供されていたVirtualBox OSE(Open Source Edition)にわかれていましたが、VirtualBox4.0以降からはGPL v2にライセンスが変更され一本化されました。 プロプライエタリライセンスで提供されていた追加機能部分はプラグインの形で提供されるようになりました。

ですのでaptでVirtualBoxをインストールすればvirtualbox.orgと同じものが使えます。

 $ sudo aptitude install virtualbox

追加機能が必要な場合は https://www.virtualbox.org/ からVirtualBox Extension Packをダウンロードして、ツールバーの[ファイル]→[環境設定]→[拡張機能]からインストールします。

ユーザーグループ

VirtualBoxを利用するユーザーは自動的にvboxusersグループに追加されるので基本的には作業の必要はありませんが、後から追加するにはusermodなどを利用して追加します。

# usermod -G vboxusers (ユーザー名)

「USBサブシステムのアクセスに失敗しました」と出る場合はvboxusersグループに入っていないことが原因ですので、idコマンドで入っているか確認してください。

$ id

カーネルモジュールのインストール

カーネルモジュールはdkmsによって自動的にビルドされインストールされます。 明示的に作り直す場合は以下のようにします。

# /etc/init.d/vboxdrv setup

Guest Additions ISOイメージ

Guest Additions ISOイメージは配布に制限があるのでnon-freeリポジトリから提供されています。 /etc/apt/sources.listにnon-freeセクションがあるか確認します。なければ追加しておいてください。

deb http://ftp.jp.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ wheezy main contrib non-free

virtualbox-guest-additions-isoパッケージをインストールします。

$ sudo aptitude install virtualbox-guest-additions-iso

Debian/UbuntuゲストOSへGuest Additionsのインストール


VirtualBoxをバックグラウンドで動かす

ユーザーマニュアル(PDF)の「7.4.1 VBoxHeadless, the VRDP-only server」に書いてあることを試しました。

vboxheadlessを利用すると仮想マシンをデーモンとして起動でき、必要なときにVirtualBox内蔵のRDPを利用して接続し利用できます。

バックグラウンドで起動するにはVBoxHeadlessコマンドを使います。

$ VBoxHeadless -s "仮想マシン名" &

RDPを利用しているので、RDPで接続するクライアント、Windowsのリモートデスクトップクライアント、Linuxではコマンドのrdesktopやxfreerdp、GUIフロントエンドのgrdesktop、krdc、tsclientなどを利用して、サーバーを起動したマシンに接続するだけで使えます。

VirtualBox内蔵のRDPサーバーは画面を複数のマシンに配信することができます。 マルチユーザーの接続ではありません。配信される画面は同じ画面です。

GUIでは仮想マシン設定画面の[ディスプレイ]→[リモートディスプレイ]タブ画面の「複数の接続を許可」を有効にするか、 コマンドではvbomanageを使ってマルチコネクションを有効にします。

$ VBoxManage modifyvm "仮想マシン名" -vrdpmulticon on

ポートフォワードを使ってホストOSからゲストOSにアクセスする

VirtualBoxのネットワークはNATで接続されているので、そのままではホストOSからゲストOSにアクセスはできません。

以前はネットワークの設定をNATからブリッジに変更し、ゲストOSをホストOSのネットワークに参加させてから接続という手段を取っていましたが、4.0からゲストOSのポートをホストOS側にポートフォワーディングする機能が実装されました。

この機能を利用すると、ホストOS側に割り当てたポートからゲストOSのポートへアクセスできるので、とても便利になり、特に仮想マシンをバックグラウンドで起動していると余計なリソースを消費せずゲストOSとやりとりできるので、とても便利です。

今回はその設定をしたのでメモします。

GUIから設定

仮想マシンの設定から[ネットワーク]を開き、[高度]をクリックします。

[ポートフォワーディング]ボタンが表示されるので押すとポートフォワーディングルール・ウィンドウが開きます。

適当に名前をつけ、ホストポート(ホストOS側のポート)、ゲストポート(ゲストOS側のポート)を設定します。 IPアドレスは空欄にする自動的に設定されます。

VBoxManageを利用して設定

こんな感じで追加します。

$ VBoxManage modifyvm (マシン名) --natpf<1-N> [<rulename>],tcp|udp,[<hostip>],<hostport>,[<guestip>],<guestport>]

たとえばゲストOSのSSHをホストOSの2222にポートフォワードさせるなら以下のようにします。

$ VBoxManage modifyvm (マシン名) --natpf1 ssh,tcp,,2222,,22

登録したルールを削除するにはこのようにします。

$ VBoxManage modifyvm (マシン名) --natpf1 delete ssh

IPアドレスを空欄にしているとゲストOSのフォワーディング先はlocalhost(127.0.0.1)に設定されるので、接続するときはローカルホストにつなぎます。

たとえばホストOSからゲストOSにSSHで接続する場合はこのようにします。

$ ssh -p (ホストOSに割り当てたポート) (ゲストOSのユーザー名)@localhost