VMware Player の NAT ネットワークを極める

VMware Player では仮想ネットワークに「NAT」、「ホストオンリー」、「カスタム」、「LAN セグメント」などの種類を選ぶことができます。 ゲスト OS に検証用のサーバー OS を入れてセットアップする際に、更新モジュールをダウンロードする等の理由で外部と通信したいことは多いと思います。

外部接続を行うという点では「NAT」を選択するのがお手軽ですが、ゲスト OS がどのように外部へアクセスするのかが気になります。 ここでは NAT の設定に絞り、この時の挙動を詳しく知ることで様々な場面に適用するためのヒントをまとめます。 実際のところ、NAT ネットワークを押さえておけばいろいろな用途で使うことができます。 なお、この記事は Windows 版 VMware Player 6.0.1 を前提として書いています。

ネットワークの構成

下図は NAT 仮想ネットワークの構成イメージを図にしたものです。

VMware NAT network

仮想セグメントのネットワークアドレスは 192.168.203.0/24 となっていますが、これは VMware Player のインストール時に自動的に決まるもので、必ずしもこのアドレスになるとは限りません。 192.168.0.0/16 の中から割り当てられると思いますが (少なくとも私はそうでした)、あくまでも一例です。

割り当てられるのは /24 ネットマスクのアドレスで、第 4オクテットの .1 がホスト OS に、.2 が仮想ルータに割り当てられるようです。 ゲスト OS から見たときにホスト OS へはこの .1 のアドレスでアクセスします。 また、外部へアクセスする際は仮想ルータをデフォルトゲートウェイとして用います。 更に .254 で DHCP サーバーが動作 (※追記参照) しており、外部アクセスに必要な DHCP パラメータがゲスト OS に提供されます。 従って、ゲスト OS は DHCP クライアントの設定がされていれば何も考えずに外部と通信できます。

仮想ルータ

仮想ルータの動作についてもう少し見てみます。

  • 仮想ルータはゲスト OS のために NAT を行います。 ゲスト OS の通信は、外部から見るとゲスト OS の物理インターフェイスの IP アドレスで通信しているように見えます。
  • ゲスト OS 用の DNS サーバーがこの仮想ルータ上で動いています。
  • 仮想ルータ上の DNS サーバーは受け取った名前解決要求をホスト OS の設定に従って解決します。 ホスト OS のリゾルバを使って解決するという言い方でも良いと思います。 つまり、ゲスト OS としては仮想ルータを DNS サーバーとして使えば後はうまく動作するということです。
  • DHCP サーバーの設定はホスト OS の ProgramData\VMware\vmnetdhcp.conf に書かれています。

ホスト OS のインターフェイス

さて、ホスト OS からはネットワークアダプタとして VMnet1 と VMnet8 という名前のアダプタが見えます。 VMware Player をインストールすると、これらのネットワークアダプタには静的に IP アドレスが割り当てられます。 このうち VMnet8 が図中の赤の NIC に相当します。 このネットワークアダプタについて補足説明します。

ゲスト OS とホスト OS 間の通信はこのアダプタを介して行われます。 例えば Windows 環境であれば「start \\192.168.203.1」などのコマンドでゲスト OS からホスト OS の共有フォルダにアクセスできるということです。

また、このネットワークアダプタを無効にするとゲスト OS とホスト OS の間の通信はできなくなりますが、隣の仮想ルータは生きたままです。 つまり、ゲスト OS のネットワークアダプタ VMnet8 を無効にしてもゲスト OS は NAT で外部と通信できてしまうということなので、注意が必要です。

ちなみに VMnet1 は NAT 構成では使用しないので無効化して問題ありません。

ゲスト OS に固定 IP アドレスを割り当てたい時

ゲスト OS は普通にインストールをすると DHCP クライアントとなってしまいますが、固定アドレスを割り当てたいときもあると思います。 これを行う方法は 2つあります。

  1. 先の vmnetdhcp.conf の内容を確認し、DHCP の対象になっていないレンジから割り当てる。
  2. DHCP で割り当てるのはそのままにし、MAC アドレスを使って DHCP サーバーから割り当てる IP アドレスを固定する。

2 の方法については次節で説明します。

DHCP サーバーのカスタマイズ

ではゲスト OS に割り当てる IP アドレスを固定化するために DHCP サーバーの動作をカスタマイズしましょう。 やり方は以下の通りです。

  1. ゲスト OS 上でコマンド (ifconfig とか ipconfig とか) を使ってインターフェイスの MAC アドレスを確認します。 ここでは MAC アドレスが「00:0C:29:AA:BB:CC」だったものとします。
  2. vmnetdhcp.conf を編集します。 host VMnet8 のブロックの次に以下のように追加します。

    host CentOS {
      hardware ethernet 00:0C:29:AA:BB:CC;
      fixed-address 192.168.203.50;
    }
    
  3. ファイルを保存後、ホスト OS の「VMware DHCP Service」を再起動します。

これで私の環境ではゲスト OS に固定の IP アドレスを割り当てることができました。 好みの問題でしょうが、ゲスト OS の IP アドレスは DHCP を有効にしたままで vmnetdhcp.conf で管理した方が楽かも知れません。

なお、仮想ネットワークのネットワークアドレスを変更するには、このファイルの変更の他にレジストリの編集が必要なようです。 私はそこまで必要なかったので試していません。

まとめ

というわけで NAT 仮想ネットワークを使用してわかったことをまとめてみました。 このあたりが理解できると「ネットワーク接続 = NAT」の設定を利用しやすくなるのではないでしょうか。


追記 (2014/11/29)
初版では DHCP サーバーは仮想ルータ上で動くと書いていましたが、DHCP サーバーのアドレスは別であることに気付いたため内容を修正しました。