November 22, 2008

VirtualBoxのNAT接続でポートフォワード

以前に、VirtualBoxのネットワークについての記事を書いたが、
そのときに書き漏らしていた話題が、NATのポートフォワードだ。


NAT接続は、ホストOSがルータの役割を果たしているイメージなので、
通常は実ネットワーク上の別のマシンが、ゲストOSで実行しているサービスを受けることは出来ない。ゲストOSとホストOSでは、参加しているネットワークが違うものになっているからである。
これを可能にするには、仮想マシンのネットワーク接続方法をホストインターフェイスとのブリッジ接続に変えるのも手だが、通常のルータ設定のように、ポートフォワードを使う、という方法もある。

今回は、VirtualBoxのヘルプドキュメントと同じく、実ネットワークから、ゲストOSにSSH接続が行えるようにしよう。
下準備として、ゲストOSにSSHサーバを準備しておくこと。通常、SSHサーバが使用するポートは22番である。今回は特にこれを変更していない。
まず、コマンドプロンプトから、次の3つのコマンドを実行する(VirtualBoxのインストールフォルダにパスが通しておくこと)。
> VBoxManage setextradata 仮想マシン名 "VBoxInternal/Devices/pcnet/仮想NIC番号/LUN#0/Config/guestssh/Protocol" TCP
> VBoxManage setextradata 仮想マシン名 "VBoxInternal/Devices/pcnet/仮想NIC番号/LUN#0/Config/guestssh/GuestPort" 22
> VBoxManage setextradata 仮想マシン名 "VBoxInternal/Devices/pcnet/仮想NIC番号/LUN#0/Config/guestssh/HostPort" 2222
二行目のコマンドが、ポートフォワードしたいゲストOSで実行されているサービスのポート番号を指定し、三行目のコマンドが、それに対して割り当てるホストOSのポートである。
この例では、ゲストOSのSSHサーバ(ポート22)にホストのポート2222を割り当てている。
ここで、仮想マシン名は管理画面を立ち上げたときに、左側に表示されているゲストOSの名前を入力し、仮想NIC番号は、"仮想マシンのネットワークアダプタ番号-1"が入る。
例えば、アダプタ1が内部ネットワーク、アダプタ2がNAT、と設定している場合は、この数字は、2-1=1、となる。
NATのアダプタのタイプにも注意して欲しい。上の例では、NAT接続のタイプはPCnetを想定している。もし、タイプをIntel Pro/1000を設定している場合は、上の"pcnet"の部分を"e1000"に置き換えること。
また、"guestssh"の部分は只の設定名なので、他の文字列でも構わない。

ちなみに、上記のコマンドをわざわざ実行するのが面倒な場合は、VirutalBoxを終了してから、仮想マシンの設定ファイル(デフォルトでは、"C:\Documents and Settings\ユーザ名\.VirtualBox\Machines\仮想マシン名\仮想マシン名.xml" に保存されている)をエディタで開いて、
<ExtraData>
  ……
  <!-- preferences for portfowording of NAT -->
  <ExtraDataItem name="VBoxInternal/Devices/pcnet/1/LUN#0/Config/guestssh/Protocol" value="TCP"/>
  <ExtraDataItem name="VBoxInternal/Devices/pcnet/1/LUN#0/Config/guestssh/GuestPort" value="22"/>
  <ExtraDataItem name="VBoxInternal/Devices/pcnet/1/LUN#0/Config/guestssh/HostPort" value="2222"/>
  ……
</ExtraData>
とExtraDataタグの中身を自分で編集してもかまわない。恐らく、コマンドを実行するより、こっちの方が楽である。

設定が済んだら、ポートフォワーディングが有効になっているかどうか、確かめてみよう。
今回はSSHに関する設定を行ったので、ホストOSでputty等のSSHクライアントから、"localhost:2222"のセッションを開いてみる。これで、無事ゲストOSに接続できただろうか?

あとはファイアフォール等のネットワークの設定を行えば、ネットワーク上の他のマシンからもゲストOSにSSH接続が行えるようになる。

ちなみに、ホストOSからはゲストOSの操作をしないので、わざわざウィンドウで立ち上げたくない、という場合は、コマンドプロンプトから
> VBoxHeadless -s 仮想マシン名 -vrdp=off
で起動しても良いと思う。結局、コマンドプロンプトの画面が一つ占有されることにはなるのだが。

les_paul_sp
posted at 00:13

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔