VMware Fusion 5の仮想マシンでIPを固定する

ネットワークの基本的な知識がないので、いつもネット上の知識を鵜呑みにしてその場凌ぎで生きています…

現状

  • Macbookに入れたVMware Fusion 5の仮想マシン(CentOS6)を開発用サーバーにしている
  • 普段は家で開発してるけど、たまに外出先でもしたい
  • でも外だとIPが変わってしまって、sshのconfigやhostsの書き換えが面倒(やってられん)

※以下に記載のIPは全てワタシの環境です。適宜読み替え願います!

今までVMwareのネットワーク設定を「ブリッジされたネットワーキング(自動検出)」にしてました。これだと、家のルーターにMacbook(192.168.24.53)と仮想マシン(192.168.24.60)が同じようにぶら下がった状態です。この状態で、仮想マシンのIPを192.168.24.60に固定して開発するのも、自宅にいる分には何の問題もありません。

…が、外出すると家のルーターは存在しません。192.168.24.***アドレスシリーズではなくなります。hostsも書きなおさなくてはなりません。面倒でやってられない!

なので、その時々のネットワークにぶら下げる形ではなく、Macから直接アクセスできる形でIPを固定しようと思ったのが今回の敬意です。例のように、ネット上の知識の力です。

VMware Fusion のゲスト(仮想)マシンのIPアドレスの固定化

設定手順

  1. VMware Fusionでネットワーク設定を「Macを共有」に
  2. 仮想マシンに割り振るIPを固定化する
  3. 仮想マシン側のIPアドレス設定を固定

VMware Fusionでネットワーク設定を「Macを共有」に

VMware Fusionで対象の仮想マシンの設定画面から、ネットワークアダプタ設定を開いて「Macを共有」にチェック。その際、下にある「詳細オプション」に書いてあるMACアドレスをコピーする。後で必要になります。

仮想マシンに割り振るIPを固定化する

ネットワーク設定の変更を有効にするために仮想マシンのOSを再起動(※多分必要)します。Mac側のターミナルで「ifconfig」コマンドを実行すると、「vmnet8」という「Macを共有」用のゲートウェイが確認できると思います。そこで、vmnet8に仮想マシンのIPを固定化して払い出す設定をします。

vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf

恐らく下記のような記述があるはず。

subnet 192.168.123.0 netmask 255.255.255.0 {
    range 192.168.123.128 192.168.123.254;
    option broadcast-address 192.168.123.255;
    option domain-name-servers 192.168.123.2;
    option domain-name localdomain;
    default-lease-time 1800;                # default is 30 minutes
    max-lease-time 7200;                    # default is 2 hours
    option netbios-name-servers 192.168.123.2;
    option routers 192.168.123.2;
}

このファイルの末尾に下記のような記述を追加します。ホスト名(vmnet8-centos)は、わかりやすい名前をつけておけばOKのはず。hardware ethernetは最初にコピーしておいた仮想マシンのMacアドレス、fixed-addressが払い出したいIPアドレスとなります。このMacアドレスの仮想マシンには、このIPを払い出すよーっていうことですね。ここで注意なのは、上で「range」に記載の通り「192.168.123.128〜192.168.123.254」は動的な払い出しに使用されるので、「192.168.123.3〜127」の間で割り振るのが良いでしょう。

host vmnet8-centos {
    hardware ethernet 00:0C:29:FC:1D:CA;
    fixed-address 192.168.123.100;
}

VMware Fusionの設定変更のため、VMwareを再起動してから(※仮想マシンではなく!)、仮想マシンを起動してifconfigコマンドを実行します。eth0のIPアドレスが上で設定したもの(192.168.123.100)になっていれば、正しくIPアドレスが払い出されていることでしょう。

仮想マシン側のIPアドレス設定を固定

ここまででも、Macから192.168.123.100のサーバーなり何なりにアクセス出来るようになっているはずです。自分の場合は、IP設定がブリッジ接続だった時のままになっていたため、phpでDNS接続エラーが発生してしまいました。

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

IPADDR=192.168.123.100
NETMASK=255.255.255.0
GATEWAY=192.168.123.2

上記のようにIPADDRは今回設定したIPアドレス、GATEWAYはdhcpd.confに記載されていたdomain-name-serversのアドレスを指定しました。ここが古かったために、ドメイン解決できないといって怒られたんですね。あっ、設定を変更したら念のため(必須?)仮想マシンのOSを再起動しましょう。

まとめ

以上で設定は完了です。試しにMacのWi-Fiを無効にしてネットワークから切断しても、ちゃんと仮想マシンに繋がる!これでいつでも開発できます…うぅ。

上で設定した内容もざっくりは分かるんですが、知識がどれもこれも中途半端なのですね。ちゃんと勉強しなきゃと思いながら、なんやかんや今日に至ります。よくない。

Sparse Bundle Imageを仮想マシン置き場として運用する手順

Macを使っている人の中には、Boot CampやVMware Fusion、ParallelsでWindows環境を仮想化している人も多いと思います(あ、Boot Campは仮想ではないか)。

404 Blog Not Found:Mac – Sparse Bundle Image ノススメ

敬愛する小飼弾先生も、Sparse Bundle Imageでの仮想マシン運用をオススメしています。何と言っても一番のメリットは差分バックアップが容易になること。一般的な運用だと、ほんの僅かファイルが変更されただけでまるっとファイルが変わっちゃいますから。仮に仮想マシンのHDDに40GBを充てていたら、何か操作する度に40GBの差分です。数テラ時代になった昨今でも、無駄遣い甚だしい。

という訳で、Sparse Bundle Imageを作成して、そこに仮想マシンを置くまでの手順。ディスクユーティリティでSparse Bundle Imageを作成→そこに仮想マシンファイルを置くという流れです。

  1. ディスクユーティリティの「新規イメージ」ボタンをクリック
  2. 作成する新規イメージの情報を入力(下記は例です)
    • 名前:ファイル名になります(例:WindowsXp→WindowsXp.sparsebundle)
    • 場所:後で変更可能なのでどこでもOKです。「仮想マシン」ディレクトリとかでいいかと。
    • 名前:マウント時のボリューム名となります。(例:WindowsXpVolume)
    • サイズ:仮想マシンの容量に合わせて大きめに作っておけば大丈夫。後から変更可能。
    • フォーマット:Mac OS 拡張(ジャーナリング)
    • 暗号化:なし
    • パーティション:ハードディスク
    • イメージフォーマット:スパースバンドル・ディスクイメージ
  3. 作成ボタンをクリックすると、sparsebundleファイルが作成された上でディスクイメージがマウントされます
  4. デスクトップのディスクイメージをクリックして開いて下さい
  5. そこに、仮想マシンのファイル(Windows XP Home Edition.vmwarevm など)をコピーor移動します
  6. 仮想マシンを使用する時は、そのファイルを使用するだけです。

以上!簡単でしょ?実際にrsyncやTimeMachineでどれぐらい効果的になるのか、またパフォーマンスのコストがどれだけ変わるかは、後日テストします。

注意点としては、マシンを再起動した時にはディスクイメージがマウントされていない可能性があるので、その場合は「***.sparsebundle」ファイルをダブルクリックするなどしてマウントしてから仮想マシンを使用して下さい。

それではまた!