普段はあまり気にしない箇所が障害の原因になっていたという話をご報告です。
対象はHyper-VのホストOSにありました。
MACアドレスの範囲が重複
ネットワークの調子がなんとなく悪いというトラブルが出ていました。リモートデスクトップが繋がったり繋がらなかったり、ただpingでIPv4の通信はそれでもちゃんと応答を返していたので、今一つ障害として認識するのが遅れていました。
そのうち、RDP接続も繋がったり繋がらなかったりの頻度が増えて、pingもRequest Time outを出すようになってきて、なんだろうと調べていったところ、今回の現象を発見したという流れです。
原因を簡単に言ってしまうと、複数稼働していたクライアントHyper-Vの仮想スイッチマネージャーの「グローバルネットワーク設定」に記載のMACアドレスの範囲が重複していた、という状況でした。
仮想スイッチマネージャーのグローバルネットワーク設定
Hyper-Vの該当箇所はここです。
Hyper-Vマネージャーの仮想スイッチマネージャー画面を開くと、左ペインの下部に「グローバルネットワーク設定」の箇所があり、その箇所をクリックすることで、Hyper-VゲストOSに割り当てられるMACアドレスの範囲を確認することが出来ます。
複数のHyper-V(1号機と2号機)でこのMACアドレスの範囲が重複しているために、ゲストOSでもMACアドレスが重複するという通常ではありえない状況に一部なっていることが分かりました。
調べる
調べてみたところ、同じ状況について解説されているページを発見。
参考:Hyper-V VM の MAC Address 重複対策
https://www.vwnet.jp/Windows/WS12R2/2016040801/AntiVMMACDuplicate.htm
複数台のHyper-VでMACアドレスが重複するケースを解説してくれています。
ポイントになるのは"Hyper-VをインストールしたときのIPv4アドレスがどうなっているか"が重要のようです。
このMACアドレスの範囲に使われている値は、Hyper-Vサービスのインストール時にホストOSのIPv4アドレスをベースに決定されているらしい。そのため、構築時に同じアドレスを使っていた場合にはMACアドレスの範囲も重複することがある、というニュアンスのことが記載されていました。(あとはIP設定がない状態でリンクローカルアドレスが構成されている、と言う場合もありそうです。)
確かに、Hyper-VのホストOSのIPv4アドレスは、構築時にはキッティング用のネットワークでDHCP環境でHyper-Vサービスのインストールを実施していたため、IPアドレスが(構築時だけ)同じIPが使われていた可能性はありそうでした。
MACアドレスの範囲を変更する作業
以下の手順でMACアドレスの範囲を変更しました。
■ゲストOSのIP設定DHCPに初期化
まずはゲストOSでスタティック設定したIP設定をDHCPに変更しました。(レジストリに旧NICのIP設定が残存するのを防止するため)
ゲストOSすべてでこれを実施しておきます。
■ゲストOSをすべてシャットダウンする
次いでゲストOSをすべてシャットダウンします。
NIC設定を変更するためにOSが起動していない状態にしないといけないのです。
■ゲストOSの仮想NIC削除
ゲストOSに設定してあるNICをHyper-Vマネージャーのゲスト設定画面から削除します。
消して作り直す、という狙いです。
■仮想スイッチマネージャーでMACアドレスの範囲を変更
Hyper-Vマネージャーの仮想スイッチマネージャー画面のグローバルネットワーク設定からMACアドレスの範囲を確認します。
重複した値を変更するのですが、前述の参考URL<https://www.vwnet.jp/Windows/WS12R2/2016040801/AntiVMMACDuplicate.htm>で提供いただいている.ps1スクリプトを実行するのが良さそうです。現在のIPv4アドレスからMACアドレスの範囲を生成してくれて、現在の設定に上書きしてくれるようです。
どちらで実施するかはお好みでよさそうです。
■ゲストOSの仮想NIC作成
再びゲストOSの設定画面を開いて、NICを改めて追加します。
ハードウェアの追加からネットワークアダプタを追加します。
追加されたNICは
このようにまだホストOSからMACアドレスが割り当てられていない状態です。
■スイッチのMACアドレステーブル更新
Hyper-VホストOSをシャットダウンし、LANケーブル繋げ直すようにしました。
単純にここまでの作業でMACアドレスは新しいものに更新されるはずですが、スイッチのMACアドレステーブルが起動時に更新されていたほうがいいかなと思ったためです。スイッチ再起動も良いかもしれません。より確実。
Hyper-VホストOSを起動して、作業を続けます。
■ゲストOSを起動してIP設定
ホストOSの起動が完了したところで、Hyper-VマネージャーからゲストOSを起動していきます。
ゲストOSのIP設定を開いてスタティックIPに設定します。
ここで以前のIP設定と同一のIPを設定して作業は完了です。
動作確認したこと
ここまでで復旧が完了したので、pingの疎通確認やRDP接続でリモートデスクトップの操作が安定するかどうかとか、ファイル共有にアクセス可能かどうか、SSH接続や管理ツールでのネットワーク接続はどうか、というネットワーク経由のアクセス確認をしました。
一通り、必要なネットワークアクセスは問題なく完了したため、MACアドレスが更新された状態でIPの再設定は完了したという判断をしました。
総括として、Hyper-VのMACアドレス生成の処理が分かっていないと今回のように、設定専用のネットワーク設定をつかったことでMACアドレスが重複することを新たに学びました。これ、構築環境では正常だったのに本番環境に持って行った途端に調子悪くなる症状だから、なかなか見つけづらいような気がします。