以前、
で解説を入れたのですが、Hyper-V1.0の仮想端末で使用されるMACアドレスの範囲はどこに記載されているか?というとレジストリになりますが、Hyper-V2.0では仮想ネットワークマネージャーから操作できるようになりました。
ではそもそもなぜこのような機能が増えたのかと考えると、これはHyper-Vサーバーを展開する際にSysperpを使用します。しかし、仮想端末で使用されるMACアドレスの範囲はレジストリに書かれていてSysprepでは変化しません。そこでこのまま展開すると、Hyper-V上の仮想端末のMACアドレスがバッティングする可能性があったので、MACアドレスの範囲を簡単に変更できた方がいいからだと思います。
HKLMSoftwareMicrosoftWindows NTCurrentVersionVirtualization
MinimumMacAddress
MaximumMacAddress
指定例:
MinimumMacAddress = 00-15-5d-ec-34-00
MaximumMacAddress = 00-15-5d-ec-34-FF
*上位MACアドレスの00-15-5dはマイクロソフトが保有しているアドレスになるので固定にする必要があります。
さて、最近気づいたことがあります。それはちょっとHyper-V1.0のときと挙動が異なることがあったので調べてみました。
Hyper-V 2.0 でSysperpをかけます
- 仮想端末が存在していて外部接続のNWが接続されている→MACアドレスの範囲は変化しない
- 仮想端末が存在していて内部接続のNWが接続されている→MACアドレスの範囲が変化していた
これはHyper-V1.0ではありえない動作なので本腰を入れて調査してみました。
そもそも、このMACアドレスの範囲は、Hyper-Vが起動して外部ネットワークが作成される段階で作成されます。生成アルゴリズムはどうなっているかというと、その時点のホストのIPアドレスが
192.168.10.200
だとしたら、第3、4オクテットが使われるのでこれらの値を16進数に変換すると0A、C8になります。上位MACアドレスは決まっているので結果的に
00-15-5d-0a-c8-00から00-15-5d-0a-c8-ffの範囲になります。
ここでHyper-V 2.0ではどのような挙動になるか確認です
Sysprep後に起動します。すでに記載したように
- 仮想端末が存在していて外部接続のNWが接続されている→MACアドレスの範囲は変化しない
これはHyper-V 1.0 と同様です
しかし
- 仮想端末が存在していて内部接続のNWが接続されている→MACアドレスの範囲が変化していた
なぜこのようになるのか?
実はHyper-V 2.0ではSysprepをかけると
HKLMSoftwareMicrosoftWindows NTCurrentVersionVirtualization
MinimumMacAddress
MaximumMacAddress
これらのレジストリも変化します。ではどの段階で新しい値が付与されるかというと、仮想ネットワークマネージャーを起動した時点で付与されるようです。
しかし、この動作の条件としては外部ネットワークが使用されていないが当てはまります
ただし、外部ネットワークが使用されていなくても同一の固定IPがすべてのHyper-V 2.0サーバーに設定されていて、そのままのアドレスで仮想ネットワークマネージャーを起動すると結果的にすべてのHyper-V 2.0サーバーのMACアドレスの範囲は同じになります。
このような挙動の変化が確認できました。
よって、Hyper-V2.0においてSYSPREPを使用した展開を行う場合は、外部ネットワークを使用しない状態での展開を行い、すべてのサーバーは異なるIPアドレスにしたのちに(DHCPクライアントにしておいてもいいですね)仮想ネットワークマネージャーを起動するとMACアドレスの範囲の重複は起こらないということになります。
まとめ
Hyper-V1.0の場合は、SYSPREPをかけてもMACアドレスの範囲は変化しない
Hyper-V2.0の場合は、SYSPREPをかけるとある条件下ではMACアドレスの範囲は変化する(条件:外部ネットワークを使用していない)