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
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などを利用して、サーバーを起動したマシンに接続するだけで使えます。
RDPを利用して複数のマシンに画面を配信
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