- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ubuntu/VirtualBox

はじめに Edit

ゲストOS側をブリッジ接続でなくNAT接続でも、ゲストOS側のwebサーバーやsshサーバーに接続したい件について。

想定環境 Edit

  • Oracle VM VirtualBox ver 3.2.4(with Portable-VirtualBox)
  • ホストOS Windows XP SP3
  • ゲストOS Ubuntu 8.04 LTS, NAT

目標 Edit

  • ゲストOSにwebサーバー入れる
  • ホストOSでポートフォワードの設定する
  • ホストOSからゲストOS内のwebサーバーにアクセスして見られるように

試しにゲストOSにwebサーバー(apache)を入れてみる Edit

apacheの詳しいインストール方法は Ubuntu/apache2のページ にありますが、
ここでは動作確認したいだけなので、簡単にtaskselで入れてみます。

sudo tasksel

ここで、"LAMP server" を選択し「了解」を選択。

あとは適当に聞かれますので、適当に設定。
MySQLのパスワードを聞かれますが、今は空白(パスワードなし)でもOK。
(もちろん、今回のようにNATで他の環境から接続されない環境の場合の話だけなので注意!
ああっと、MySQLもポートフォワードしてホストOS側でもそのポートを全世界に公開とかヘマしない限りの話ね!)

curlで今入れたwebサーバー(apache)にアクセスして確認します。
curlはwebブラウザで確認する代わりです。
(「curlねーぞ!」っていわれたら、sudo aptitude install curl してください)

$ curl http://localhost/
<html><body><h1>It works!</h1></body></html>

HTMLで”It works!”と返って来ているのでこれでOK!!
(どうしても「webブラウザで確認しなきゃいやだ!」て人は、 w3m http://localhost/ すればいいと思うよ!)

この段階では、まだホストOS(ここではWindows)のwebブラウザでは http://localhost/ にアクセスしても
”It works!”は見られないはずです。(もし見られた場合は、ホストOS側にもapache入れてる人かもしれないです)

ポートフォワードの設定例 Edit

公式のNAT時のポートフォワード設定のドキュメントを参考にしつつ設定します。
Chapter 6. Virtual networking

※VirtualBox 3.2くらいからネットで散見されるポートフォワードの方法が変わっているっぽいので注意です。
(今後も変わる可能性があるので、公式ドキュメント もチェック推奨です)

まずはコマンドプロンプトにて、VirtualBoxのインストールディレクトリに移動します。
ただし、Portable-VirtualBoxの場合は、"(Portable-VirtualBoxのインストールディレクトリ)/app32" となるはず。

そこで、VirtualBoxは起動しつつ(管理画面みたいなのがある状態)かつ、ゲストOSは終了しておいて、下記のようにコマンドを打ちます。

VBoxManage modifyvm "(仮想マシン名)" --natpf<数字> "(適当な設定名),(プロトコル名 TCPやUDP),,(ゲスト側ポート),,(ホスト側ポート)"

今回は以下の設定にしてみます。

  • 仮想マシン名: VirtualBoxの管理画面で表示される仮想マシン名です。
    こちらの環境の場合 "Ubuntu 8.04LTS" を指定していましたので、それを指定します。
  • <数字>: ポートフォワード設定の番号です。以前にポートフォワード設定したこと内場合は”1”でOKです。
    以前に設定したことがある場合は、”2”〜など空いている番号を指定すればよいのではないでしょうか?
    (どうも、番号がかぶってて設定してもエラーは出ず、設定上書きもされない様子です?)
  • 適当な設定名:今回はwebサーバーの設定なので適当に"guestweb"としてみます。
  • プロトコル名:今回はhttpなので TCP で
  • ゲスト側ポート: httpデフォルトの 80 で
  • ホスト側ポート: 50080を割り当て。ホストのこのポートにアクセスすると、ゲスト側ポートにつながるようになります。
    これは"Well Known Ports"を参考に、「動的なのとかプライベートなのは49152〜65535の範囲をつかう」とのことなのでその範囲で適当に選びました。

上記の設定での具体的なコマンドは、

VBoxManage modifyvm "Ubuntu 8.04LTS" --natpf1 "guestweb,tcp,,50080,,80"

設定を間違えてしまった場合はもう一度設定しても上書きされないようなので、一旦設定を消しましょう

注意:ホストOSがWindowsの場合、WindowsのFirewallが「ブロックする?」と聞いてきますが、
外部に公開するわけではない場合は、絶対にブロックしてください。

(今回はテストのwebサーバーとはいえ、ブロックしないと外部からアクセスできてしまいます。
よく勘違いされるのですが、WindowsのFirewallが「ブロックする?」と聞いてきた時にブロックする方を選んでも、
ローカルからはアクセスできますのでテストするには大丈夫)

以下で設定を確認できます。

VBoxManage.exe showvminfo "(仮想マシン名)"

上の設定例だと、

VBoxManage.exe showvminfo "Ubuntu 8.04LTS"

以下、出力例:

 :(略)
NIC 1 Rule(0):   name = guestweb, protocol = tcp, host ip = , host port = 50080,  guest ip = , guest port = 80
 :(略)

これで、ゲストOSとホストOSのwebサーバー用のポートフォワードの設定できたかと思います。

あとは、ホストOSのwebブラウザから http://localhost:50080/ を開いて確認しましょう。

It works!

が表示されたらOKです!ヽ( ´ー`)ノ

うまく行きましたか?

ポートフォワードの設定をやめるとき Edit

ポートフォワードの設定をやめるときや、設定を間違えてしまって消したい時は、

VBoxManage modifyvm "(仮想マシン名)" --natpf<数字> delete "(設定名)"

でOK。

上記の設定の場合の具体例は、

VBoxManage modifyvm "Ubuntu 8.04LTS" --natpf1 delete "guestweb"

ですね。

問題ごと Edit

VBoxManage modifyvmコマンドでERROR: failed to create the VirtualBox object!とか言われる ><;; Edit

VBoxManage modifyvmコマンドで以下のエラーが出る場合

ERROR: failed to create the VirtualBox object!
ERROR: code REGDB_E_CLASSNOTREG (0x80040154) - Class not registered (extended in
fo not available)
Most likely, the VirtualBox COM server is not running or failed to start.

などと出る場合。

解決策:VirtualBoxを起動しておいてください

VBoxManage modifyvmコマンドで ERROR: A session for the machine '(仮想マシン名)' is currently open とか言われる ><;; Edit

VBoxManage modifyvmコマンドで以下のエラーが出る場合

ERROR: A session for the machine '(仮想マシン名)' is currently open (or being closed)
Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component Machine, interface IMachine, callee IUnknown
Context: "OpenSession(a->session, machineuuid)" at line 314 of file VBoxManageMo
difyVM.cpp

解決策:VirtualBox上の仮想マシンを終了しておいてください(「仮想マシンの状態を保存」で終了していた場合も別のエラーでますので、ちゃんと終了する必要ある)

参考リンク Edit

※VirtualBox 3.2くらいからポートフォワードの方法が変わっているっぽいので注意です。


No comment. Comments/Ubuntu/VirtualBox/NAT接続でもポートフォワードでゲストOSに接続する方法?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-06-25 Fri 15:18:47 JST (3311d)