VMware Player 1.0.3 で確認しています。
VMware をインストールすると、最大 9 つの virtual network(VMnet0 ~ VMnet8)が利用できるようになります。デフォルトの設定では、VMnet0、VMnet1、VMnet8 がそれぞれ次のような構成のネットワークとして設定されています。
例えば、デフォルトで VMnet0 は物理的な NIC と接続するための virtual bridge(仮想ブリッジ)として使えるようになっているので、virtual machine(ゲスト OS)の virtual network adapter(仮想ネットワークアダプタ)を VMnet0 に接続するように設定すれば、物理的な NIC が繋がっている外のネットワークに接続することができます。
[virtual machine]
virtual network adapter ---> VMnet0 (bridge) ---> [physical NIC] ---> external network
virtual network (VMnet*) の数は上記のように 9 個までと制限されていますが、ひとつの virtual network に対して複数の virtual machine(正確には virtual network adapter)を接続することができるので、ほとんど問題にはなりません(Windows ホストでは接続数に制限なし、Linux ホストでは 32 個の virutal network adapter をひとつの virtual network に接続可能)。
virtual network adapter -------+
|
virtual network adapter ---- VMnet0 (bridge) ---> [Physical NIC]
|
virtual network adapter -------+
VMnet0 ~ VMnet8 という名前は、正確には virtual network を示しているのだと思いますが、VMware のマニュアルでは、virtual switch と呼んでいたりします。よく考えてみると、
「ネットワークに接続する」=「そのネットワークに繋がっているスイッチに接続する」
とみなしても大差はないので、VMnet0 ~ VMnet8 のことを virtual network ではなく、virutal switch と呼んでも問題ないのでしょう。 VMnet0 ~ VMnet8 までの 9 個の仮想的なスイッチングハブがあるんだと考えると分かりやすいです。 ホスト OS と、ゲスト OS は必ず VMnet* を介して通信します。
[Host OS] [Guest OS]
virtual network adapter ----> VMnet1 <---- virtual network adapter
Windows に VMware Player をインストールすると、virtual network に接続するための virtual network adapter(仮想の NIC)が追加されます。デフォルトでは、次の 2 つの仮想ネットワークアダプタが追加されます。
※ bridged network (VMnet0) は、ホスト OS 側の物理的 NIC に直接接続されているような状態になるため、ホスト OS 側に VMnet0 用の virtual network adapter は追加されません。
※ VMnet1、VMnet8 という仮想スイッチングハブに接続された 2 つのネットワークカード (VMware Network Adapter) があると考えると分かりやすいです。
host-only network も NAT network も通常は private IP アドレスを使用するネットワークであるため、上記の virtual network adapter には 192.168.***.***
という IP アドレスが割り当てられているはずです。VMnet1 と VMnet8 は仮想といえども別のネットワークなので、それぞれ別のネットワークアドレスが割り振られます(例えば、192.168.100.1
と 192.168.200.1
)。
これらの IP アドレスは固定で指定することも、VMware 内部の DHCP サーバによって割り当てることもできます。ここで割り当てた IP アドレスが、ゲスト OS 側から見えるホスト OS の IP アドレスとなります。
virtual machine 側では、virtual network (VMnet0-8) に接続するための virtual network adapter を最大 3 つまで使用することができます。ホスト OS 側の virtual network adapter と同様に、これらはそれぞれ別の virtual network (virtual switch) に接続することができます。
3 つの virtual network adapter を、どの virtual network (virtual switch) に接続するかは、virtucal machine の設定ファイル (.vmx) で指定します。
ethernet0.present = "true"
ethernet0.connectionType = "custom"
ethernet0.vnet = "vmnet5"
ethernet1.present = "true"
ethernet1.connectionType = "custom"
ethernet1.vnet = "vmnet2"
connectionType を bridged, hostonly, nat のようにネットワーク構成で指定する場合は、以下のように connectionType に設定します。このとき、vnet の指定は必要ありません。
ethernet0.present= "true"
ethernet0.connectionType = "bridged"
ethernet0.present= "true"
ethernet0.connectionType = "hostonly"
ethernet0.present= "true"
ethernet0.connectionType ="nat"
virtual switch を bridged network として構成した場合、物理的 NIC に接続された virtual bridge として振る舞うようになります。デフォルトでは VMnet0 が bridged network として構成されています。
virtual machine 側の virtual network adapter を、この virtual bridge に接続する場合、ホスト OS が使っている物理的 NIC を利用して virtual network adapter に新しい IP アドレスを割り当てます。つまり、物理的 NIC が接続しているネットワークの IP アドレスがもう 1 つ必要になります。
[virtual machine]
vitual network adapter (xxx.yyy.zzz.128)
|
|
virtual bridge ---- physical NIC ---- external network
(VMnet0) (xxx.yyy.zzz.0)
イメージとしては、virtual machine が直接、物理的 NIC を利用して外部のネットワークに接続しているようなものです。NAT network や host-only network の場合とは違い、private ネットワークは構成されません。 つまり、以下のように、ゲスト OS が物理的 NIC を使用していると考えることができます。
[virtual machine]
physical NIC (xxx.yyy.zzz.128) ---- external network
(xxx.yyy.zzz.0)
bridged network では、virtual machine とホスト OS に対して、物理的 NIC が接続しているネットワークの IP アドレスをそれぞれ個別に割り当てるため、外のマシンからは単純に複数のマシンが稼動しているかのように見えます(1 つの物理 NIC が複数の IP アドレスを持つ)。そのため、vitual machine 上で Web サーバなどを立ち上げれば、外のマシンからアクセスすることができます。
複数の vitual machine をひとつの virtual bridge (VMnet0) に繋ぐことも可能です。ただし、その数だけ IP アドレスが必要になることに注意が必要です。
ホストに複数の物理的 NIC が接続されている場合は、その数だけ virtual bridge を追加することができます(VMnet0 ~ 8 のいずれかをその NIC 用の virtual bridge とする)。
VMware のアドレス変換機能 (NAT) を用いて、virtual machine 側の virtual network adapter に割り当てた private IP アドレスと、物理的 NIC に割り当てた IP アドレスによる通信を仲介します。 デフォルトでは VMnet8 が NAT network として構成されています。
ホスト OS が使っている物理的 NIC の IP アドレスと MAC アドレスを共有して外部ネットワークに接続することができるため、新しい IP アドレスを追加できない場合に便利です。ただし、NAT ネットワークには通常 private IP アドレスが割り当てられるため、外部のネットワークから virtual machine にアクセスすることはできません(外部に公開する Web サーバなどは構築できません)。
[virtual machine]
virtual network adapter (192.168.0.128)
|
|
virtual switch ---- VMware NAT device ---- external network
(VMnet8) (xxx.yyy.zzz.0)
ホスト OS 側にも、NAT ネットワーク (VMnet8) に接続するための virtual network adapter が追加され、ホスト OS と virtual machine の間で private IP アドレスを用いて通信することができます。
[virtual machine]
virtual network adapter (192.168.0.128)
|
|
virtual switch
(VMnet8)
|
|
virtual network adapter (192.168.0.1)
[host OS]
NAT 接続では、単純にネットワーク間のアドレス変換、パケットの仲介をするだけなので、物理的 NIC の存在は意識されません。これは、物理的 NIC がどのような種類のネットワークに接続されていても、IP アドレスさえ割り当てられていれば virtual machine がそのネットワークへ接続できることを意味しています。例えば、Ethernet 以外の次のようなネットワークにも接続することが可能です。
ホスト OS と virtual machine の間を繋ぐためのプライベートネットワークです。 基本的には物理的 NIC や、外部のネットワークとは隔離されたものなので、ローカル環境からのみアクセス可能なセキュアなサーバを構築することができます。テスト用の virtual machine を動作させる場合は、このモードで動作させるのが安全です。
[virtual machine]
virtual network adapter (192.168.34.128)
|
|
virtual switch
(VMnet1)
|
|
virtual network adapter (192.168.34.1)
[host OS]
基本的に、private ネットワークに配置された virtual machine は外部のネットワークにアクセスできませんが、ホスト OS 側でルーティングソフトウェアや、Proxy ソフトウェアを動作させることで、外部のネットワークに接続することが可能です。例えば、Windows の「インターネット共有」の機能を使えば、host-only network からインターネットへ接続することができます。このような構成を利用することで、NAT network の場合と同様に、Ethernet 以外のネットワーク(ダイアルアップ等)にも接続することができます。
NAT network、host-only network に接続する virtual network adapter の private IP アドレスは、VMware の提供する DHCP サーバ機能によって自動的に割り振ることができます。この場合、virtual switch (VMnet1, VMnet8) にそれぞれ DHCP サーバ機能が組み込まれているかのように振る舞います。
[virtual machine]
virtual network adapter (192.168.0.128)
|
|
virtual switch ---- VMware DHCP server
(VMnet8) (for 192.168.0.0 network)
DHCP サーバの IP アドレス割り当て範囲などは、VMware のネットワーク設定ツールで変更できます(Windows の場合は vmnetcfg.exe の DHCP タブで設定)。
VMware のマニュアル に NAT ネットワーク上の DHCP について分かりやすい説明があるので抜粋しておきます。
ネットワークの構成作業を簡易化するために、VMware Server のインストール時にDHCP サーバが自動的にインストールされます。このため、NAT デバイスを使ってネットワーク上で稼働する仮想マシンは、DHCP リクエストを送信してIP アドレスをダイナミックに取得することができます。NAT ネットワーク上のDHCP サーバ(ホストオンリーネットワーク構成でも使用されます)は、
<net>.128 ~ <net>.254
の範囲でIP アドレスをダイナミックに割り当てます。ここで<net>
は、NAT ネットワークに割り当てあられたネットワーク番号のことです。VMware Server は NAT ネットワークには常にクラス C アドレスを使用します。<net>.3 ~ <net>.127
の IP アドレスは、静的 IP アドレスに使用することができます。IP アドレス<net>.1
はホストアダプタに、<net>.2
はNAT デバイスに割り当てられています。
簡単にまとめると、
(Host OS: Windows Vista、Guest OS: CentOS 5.1 で確認しています)
インターネットに接続された NIC があることを前提とします。 VMnet8 用の仮想アダプタ(Local Area Connection 4 など)には、192.168.11.1 などの固定 IP アドレスが割り当てられます(デフォルト)。 VMware の vmnetcfg.exe の Host Virtual Network Mapping タブで、以下のようになっているか確認してください。
VMnet8 ==> Local Area Connection 4 # NAT network
仮想マシンの構成ファイル (CentOS_5.1.vmx) を編集して、NAT 接続 (VMnet8) できるようにします。
ethernet0.present = TRUE
ethernet0.connectionType = "custom"
ethernet0.vnet = "VMnet8"
Linux の eth0 の IP アドレスを DHCP で割り当てます(GATEWAY の設定はなくてもよいっぽい)。
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=yes
IPV6INIT=no
PEERDNS=yes
物理的 NIC が 1 つしか存在しない場合、デフォルトでは VMnet0 の virtual bridge はその NIC に接続されます。複数の NIC が存在する場合は、いずれかの NIC が接続されます。
Windows の場合、仮想ネットワークエディタ (Vertual Network Editor) vmnetcfg.exe を使って virtual bridge をどの物理的 NIC に接続するかを明示的に指定することができます。
デフォルトでは、「自動ブリッジ」ページの、「VMnet0 へブリッジできる物理ネットワークアダプタを自動的に選択する。」 にチェックが入っているので、VMnet0 の virtual bridge は、自動的にいずれかの物理的 NIC に接続されます。
物理的 NIC が複数存在し、VMnet0 の virtual bridge を特定の NIC に接続したい場合は、「ホスト仮想ネットワークの割り当て」ページを開き、VMnet0 のプルダウンメニューから接続したい物理的 NIC を選択します。
※ この図は、左側の VMnet0~9 のどのネットワーク(仮想スイッチ)に、Host OS のどの NIC(物理 NIC、仮想 NIC 含む)を接続するかの対応表だと考えればよいです。 ここでの設定は、あくまで Host OS 側の設定です。Guest OS 側の VMnet と仮想 NIC の接続の設定は、構成ファイル (.vmx) で行います。
※ ちなみに、ここで表示される「ホストと共有プライベートネットワーク」を選択すると、いずれかの NIC が自動的に選択されます。つまり、「自動ブリッジ」ページのチェックボックスにチェックを入れるのと同じことです。
VMware 構成ファイル (.vmx) の以下のコメントアウト行の # を外して有効にする。
# If you wish to use multi-core CPU on guest OS, uncomment a below line.
# numvcpus = "2"
Guest OS (Linux) 側の仮想アダプタの 1 枚目を Bridge 接続用に設定するとうまくいくことがあります。
# Bridge 接続用
ethernet0.present = "true"
ethernet0.connectionType = "custom"
ethernet0.vnet = "VMnet0"
# NAT 接続用
ethernet1.present = "true"
ethernet1.connectionType = "custom"
ethernet1.vnet = "VMnet8
(Host OS: Windows Vista、Guest OS: CentOS 5.1 で確認)
(Host OS: Windows Vista、VMware 2.5.2 で確認)
症状:
VMnet0 へブリッジできる物理ネットワークアダプタを自動的に選択する。(Automatically choose an available physical network adapter to bridge to VMnet0)
原因は、vmnetcfg.exe を Administrator 権限で実行していないから。 Vista の場合は以下のように設定しておかないとダメらしい。まぎらわしっ!!
参考:
ifcfg-eth0 ファイルなどに、おまじないコードみたいなのを書けば直るらしい。 確かに直った。
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
check_link_down () {
return 1;
}