VMware Fusion4以降 のポートフォワーディングまわり のまとめ
結構昔に書いたブログから自分の中で情報をアップデートできたので、まとめる。
説明内容にインフラ的に正しくない説明が混ざるかもしれないが、ご容赦をm( )m 説明は、ホスト:Mac、仮想マシン:Linux、の前提。
at your own risk でお願いします。
2014/04/18 間違いを修正しました。
例で設定する内容のイメージ
項目 | 設定値/状態 |
---|---|
MacのIPアドレス | 203.0.113.99 |
仮想マシンの名前 | sample |
仮想マシンのMACアドレス | 00:11:22:33:AA:BB |
仮想マシンのIPアドレス | 192.168.78.131 |
203.0.113.99:80 | 仮想マシンsample の80番ポートに転送 |
203.0.113.99:443 | 仮想マシンsample の443番ポートに転送 |
設定ファイル
以下のディレクトリに格納されている。
/Library/Preferences/VMware\ Fusion
ディレクトリ内の主なファイルを書き出すと、、、
/Library/Preferences/VMware\ Fusion/networking
: サブネットマスクなどの設定が書かれているファイル
/Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
: vmnet8で使うIPアドレスの帯域と、DHCP(IPアドレスの割当)を設定する。
/Library/Preferences/VMware\ Fusion/vmnet8/nat.conf
: vmnet8向けのNATの設定。ネットワークをNATで使用する場合、このファイルでポートフォワーディングの設定ができる。
DHCPの設定
使用するファイルは、dhcpd.conf
。
ポートフォワーディングをする場合、転送先のIPアドレスがころころ変わるとめんどくさいので、IPアドレスを割り当てて固定しておく。
仮にvmnet8のsubnetの設定が以下のように書かれていたとする。(ここの設定は変えだすと大変。)
subnet 192.168.78.0 netmask 255.255.255.0 { range 192.168.78.128 192.168.78.254; option broadcast-address 192.168.78.255; option domain-name-servers 192.168.78.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.78.2; option routers 192.168.78.2; }
仮想マシン側に割り当て可能なIPアドレスは、192.168.78.128 から 192.168.78.254 ということになる。
例えば、sample
という名前の仮想マシン(この名前はなんでも良い)にIPアドレスを192.168.78.131
で割り当てるとする。
まずは、sample
仮想マシン側のMACアドレスを把握する。
% ifconfig eth0 Link encap:Ethernet HWaddr 00:11:22:33:AA:BB inet addr:192.168.78.131 (後略)
上記のeth0
に表示されたHWaddr
の値00:11:22:33:AA:BB
が、それ。
eth0
を使っているかどうかは、仮想マシン内の設定に依存するので例として。
Macアドレスを把握できたら、あとは、dhcpd.conf
に設定を書く。最小限以下の内容が必要。
(デフォルトだと、dhcpd.conf
の内部にEnd of "DO NOT MODIFY SECTION"
みたく書かれているので、その行よりも下に)
host sample { hardware ethernet 00:11:22:33:AA:BB; fixed-address 192.168.78.131; }
この設定は、仮想マシン分、追加していくことが可能。
ポートフォワーディングの設定
使用するファイルは、nat.conf
。
例えば、80番ポート(httpのデフォルト)、443番ポート(httpsのデフォルト)を仮想マシンに転送するように設定する。
nat.conf
の[incomingtcp]
セクションに、以下のように追記する。
80 = 192.168.78.131:80 443 = 192.168.78.131:443
結果nat.conf
の[incomingtcp]
セクションは、以下の様に書かれている状態になる。
[incomingtcp] # Use these with care - anyone can enter into your VM through these... # The format and example are as follows: #<external port number> = <VM's IP address>:<VM's port number> #8080 = 172.16.3.128:80 80 = 192.168.78.131:80 443 = 192.168.78.131:443
この設定も仮想マシン分、設定を追加していくことが可能だが、転送する元(Mac側)のポートの重複は許可されない。
VMware Fusionのネットワーク設定の反映
sudo
にて、以下のコマンドを実行することで、VMware Fusionのネットワーク周りをコントロールできる。
/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli
必須の実行時オプションは以下のとおり。
--start
: ネットワークプログラムの起動(nat, dhcp含む)--stop
: ネットワークプログラムの停止(nat, dhcp含む)--status
: 起動状況の確認--configure
: ネットワークプログラムの設定の初期化
configureの挙動は、、、
vmnet8/nat.conf
: 既存の設定をバックアップし、初期化されるvmnet8/dhcpd.conf
: 既存の設定がある場合、何もしない。既存の設定がなければ、新しく設定される。networking
: 既存の設定がある場合、何もしない。既存の設定がなければ、新しく設定される。
なので、設定ファイルを更新した後は、、、
/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
してあげれば良い。
ちなみに、VMware Fusionのネットワークの設定は、VMware Fusion自体が起動中のみ有効で、起動時に設定を読み込むようになっている。
そのため、VMware Fusion自体(アプリケーション自体)を終了→起動してあげても、設定は反映される。
トラブルシューティング
nat.conf
にポートフォワーディングの設定を追加しても、うまく転送されない。- 仮想マシンから、ネットワークに接続できなくなる。
こんな症状の場合は、以下のケースで疑う。
まずは原因調査。vmnet-cli
の出力を確認する。
% sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start Enabled hostonly virtual adapter on vmnet1 Started DHCP service on vmnet1 Failed to start NAT service on vmnet8 Enabled hostonly virtual adapter on vmnet8 Started DHCP service on vmnet8 Failed to start some/all services
ここでは、NATが失敗している場合の話に限定して進めていく。他の失敗は、ぐぐって。
追加でさらに、VMware Fusionが起動されている状態で、VMware Fusionのnatd
を実行してみる。 (sudo
で。)
/Applications/VMware\ Fusion.app/Contents/Library/vmnet-natd -s 7 -m /Library/Preferences/VMware\ Fusion/vmnet8/nat.mac -c /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf
Could not ...
みたいに出ている場合、
書式がおかしいみたいに出ている場合 - 本当に書式がおかしい。 - nat.confの書き方を確認、修正する。
すでにポートが使用中の場合
MacがデフォルトでApacheを立ち上げてしまっていて、そのポートに干渉するパターンが多い気がしている。
対応としては、apacheの設定ファイルを書き換え、apacheを再起動する。
/etc/apache2/httpd.conf
上記のファイルを修正する。
(前略) # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80
Listenに指定されたポート番号を変えてあげる。MacのSitesフォルダへアクセスするURLが変わることに注意。
例えば、、、
Listen 8080
そして、Apacheを再起動する。(sudo
で)
/usr/sbin/apachectl restart
再度、vmnet-cli --start
してみて、うまく行けばOK。いかなかったら、、、他に立ち上がっているウェブサーバーをチェックしてみる。
追記:VMware Fusionのアップデート後
VMware Fusionがソフトウェアアップデートされた場合、nat.conf
がリセットされている可能性がある。
正確には、ソフトウェアアップデート後、ネットワーク関連の設定ファイルを見てみると、
networking
は、そのまま。dhcpd.conf
は、バックアップが作成されている。(リセットされる可能性もあるのかもしれない。)nat.conf
は、バックアップが作成され、設定がリセットされている。
ちなみにこの挙動は、VMware Fusion のソフトウェアップデートがメジャーアップデートかマイナーアップデートかには依存しない(気がする)。
ソフトウェアップデート後は、以下の対応を。
- 設定ファイルを確認。(
networking
、dhcpd.conf
、nat.conf
) - 変更されているファイルを設定し直す。(
networking
、dhcpd.conf
、nat.conf
) - VMware Fusion のネットワークをリスタートする。(
vmnet-cli --stop
&vmnet-cli --start
)
付録
subnetを変更する場合
以下のMac側のファイルが修正対象
/Library/Preferences/VMware Fusion/networking /Library/Preferences/VMware Fusion/vmnet8/nat.conf
さらに、仮想マシン側の以下のファイル(例)も修正する必要がある。
/etc/resolv.conf /etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0