#VMWareをWindowsホストで動かすとき、DHCPの設定にハマったポイント
##普通はこれでいける
VMWare playerでWindowsホストのNAT+DHCPで稼働しているゲストOSのIPアドレスを固定したくなるとき。SSHやtelnetで接続する時めっちゃ面倒ですやん。DHCPだと。
ゲストOSのMACアドレスに対して払い出すIPアドレスを指定するわけだが、ここでハマった。
vmnetdhcp.confのVMnet8セクションへ以下のようにホスト情報を記述する、とある。今回、ゲストOSのMACアドレスはDE:AD:BE:EF:CA:FEとした。
#"あくまで例なので、ここのコードそのまま使うと地獄行く"
subnet <172.16.16.0> netmask 255.255.255.0 {
range <172.16.16.200> <172.16.16>.254;
#"略"
}
host <centos> {
hardware ethernet <DE:AD:BE:EF:CA:FE>;
fixed-address <172.16.16.100>;
option host-name <"centos">;
option domain-name-servers <172.16.16.2>;
option routers <172.16.16.2>;
}
これでゲストOSがDHCP取得設定になっていれば、任意のIPアドレスが払い出せる、と思ったが、書いた通りにIPアドレスが払い出されない。解せぬ。
##理由1 vmnetdhcp.confファイルの罠
dhcp設定ファイルを管理者以外で触るな
C:\ProgramData\VMware\vmnetdhcp.conf
ProgramDataという予約ボリュームってユーザごとにパラレル展開されてるんですかね?上書きしてもファイルを消してもVMwareをアンインストールしても復活するたいへん逞しいvmnetdhcp.confファイルに落涙。
管理者権限で設定ファイルを書き換えたら、必ずVMware DHCP Serviceを再起動すること。VWwareのゲストマシンが動作している最中でも問題ありません。
VMware DHCP Serviceのサービス起動に失敗する場合、次項のレジストリ設定と設定ファイルの内容で相違ある、または、設定ファイルの内容が正しくないのが原因としてあげられる。
VMware DHCP ServiceサービスのイベントログはWindowsログのアプリケーションで確認できる。
##理由2 レジストリ設定の罠
設定テキストファイルだけだと思った?残念
HKLM\SYSTEM\CurrentControlSet\services\VMnetDHCP\Parameters\VirtualEthernetSegments
VMnet1のホストオンリーネットワークとVMnet8のNAT、2つの仮想ネットワークI/Fの設定がここにも生きてる。ふざけんな。vmnetdhcp.confとは何だったのか。
ネットワーク1と8、それぞれにサブキーが生えているので、お望みのネットワークサブキーのうちHostIpAddressにネットワークのIPアドレスが保存されている。なお、vmnetdhcp.confの中身と相違があるとVMwareDHCPサービスが起動しない。
IPアドレスのオクテットが上位下位と反転しているので、そこだけ注意。ここを書き換えた場合もVMware DHCP Serviceサービスを再起動したほうが良さそう。
##理由3 インターフェイスドライバの罠
インターフェイスドライバのIPv4アドレスも指定した?
自分はハマらなかったが、案外ハマりそうなポイントではある。
#まとめ
- vmnetdhcp.confを書き換えるときは管理者権限で
- vmnetdhcp.confを書き換えたらVMware DHCP Serviceを再起動する
- VMware DHCP Serviceが起動しない場合はレジストリとvmnetdhcp.confに矛盾がある
- ゲストOSのDHCPクライアント処理を再実行すれば望んだIPアドレスが払い出しされる
のぞみ通りじゃなければ上記のプロセスを見直そう。