少し前ですが、メモリ価格暴騰の影響で既存Proxmox VEサーバのメモリ強化が行えず、(厳密には使用中のパーツですが)余らせていたパーツ+安価だった中古ミニPCのベアボーンキットを利用して3台目のProxmox VEサーバを作りました。
sylve.hatenablog.jp
その際にESXi on Proxmox VE(ハイパーバイザー上でハイパーバイザーを入れ子で動かす環境)で頭を抱える問題が発生したため、ナレッジついでにブログ記事として残します。
・・・まぁ、役立つことがあるのかと問われると微妙*1としか言えないのですが、ここは1つネタ切れブログの苦し紛れの記事と言うことでご容赦を・・・。
発生した問題について
発生した事象はESXiのWebUIに接続できないと言う、何気に致命的な問題です。
ESXiインストールは仮想ハードウェア設定で少し躓いて*2試行錯誤を重ねましたが無事に終わり、IPアドレスなどをコンソール画面(ダイレクトコンソールインターフェース)で設定するまでは上手く動作したものの、設定したIPアドレスを指定するとWebUIに接続できません。
完全に接続できないかと言うと、そういう訳でもなく・・・
- 自己証明書(俗称オレオレ証明書)の警告画面は表示される
- 警告を無視して先に進むと白い画面で表示が止まる
- ログイン画面の断片も表示されず、文字通りの白画面
- Chrome/Firefox/Edgeのいずれでも事象が発生する
- 何故かiPhone版Safariではログイン画面が表示された
- 別のPCで(複数ブラウザで)試みても白い画面で表示が止まる
少なくとも自己証明書の警告画面が表示されるので通信自体は仮想マシン上のESXiには到達しているでしょうし、iPhone版Safariでは何故か正しくログイン画面が表示されたので、少々不思議な事象です。
iPhone版Safariで表示されてPCの主要ブラウザではNG、白い画面は自己証明書警告画面後となるとSSL関連が怪しい気がしますが、確証を得るにはあの手この手で調べなければなりません。
・・・が、個人のお戯れプライベート環境でそこまでの苦労を重ねるのはやる気が出ないので、検索汚染が著しいインターネットで検索で調査を済ませることとします。
とりあえずESXi側のCSO(Checksum Offset)が悪さをしてる模様
検索汚染により役立たない情報の中から、人力フィルターで情報の取捨選択をすると、以下のような情報が見つかりました。
forum.proxmox.com
どうやらESXi側のCSOが悪さをしているようで、CSOの無効化で事象が改善されるとの情報があります。
さらに必要な手順もすべて提示してるため、暫定対処はコマンド一発・恒久対応もスタートアップシェルに記載するだけでOKのようです。
esxcli network nic cso set -e 0 -n vmnic0
https://forum.proxmox.com/threads/nested-esxi-8-0u2-on-pve-8-2-1.163139/#post-753228
To make it persistent on boot:
> vi /etc/rc.local.d/local.sh
> Code:
https://forum.proxmox.com/threads/nested-esxi-8-0u2-on-pve-8-2-1.163139/#post-753228
> localcli network nic cso set -e 0 -n vmnic0
ところで、このコマンドを入力するためにはESXiのShellコンソール画面に入る必要があります。
ワタクシ、ESXiのShellコンソールってWebUIからESXi ShellとSSH接続の有効化の上でTeraTermで接続していたため、現時点では詰んだ状態です・・・。
最終的な手順を整理した
そんなわけで、手順を整理しました。
大きな流れとしては、ダイレクトコンソールインターフェースでESXi Shellの有効化後、所定のキーを押下してESXi Shell画面の呼び出しと簡単な流れでした。
- (Proxmox VEで)ESXiをインストールした仮想マシンのコンソールを開く
- F2キーを押下して、ESXi側のダイレクトコンソールの設定を開く
- 認証画面が表示されるので、インストール直後だとrootユーザのパスワードを入力
- メニューからTroubleshooting Options -> Enable ESXi Shellの順にEnterキーを押下
- Enable ESXi ShellがDisable ESXi Shellと表示が変わったら、有効化完了
- Alt + F1キーを押下して、ESXi Shellを呼び出す
- ログインプロンプトが表示されているので、rootユーザでログインする
- もしログインプロンプトが表示されていない場合、ESXi Shellの有効化に失敗している
- 「 esxcli network nic cso set -e 0 -n vmnic0 」と入力してESXi側のCSOを無効化する
- WebUIを開き、ログイン画面が表示されることを確認する
- WebUIが表示されることを確認したら、恒久化設定を行う
- 「 vi /etc/rc.local.d/local.sh 」と入力する
- Tab補完が効くので、補完機能を存分に活用し、タイポを予防する
- 「 exit 0 」の1行上に「 localcli network nic cso set -e 0 -n vmnic0 」と書き込む
- ファイルを保存する
- 「 vi /etc/rc.local.d/local.sh 」と入力する
- 「 reboot 」と入力してESXiを再起動する
- 再起動後、WebUIに接続できることを確認する
手順としては最初からlocal.shに書いて再起動すればいいのですが、暫定対処で発生事象が改善するか確認した上でlocal.sh修正の流れにしています。
なおパッチ適用後にlocal.shの再書き換えが必要かの調査をしていませんが、WebUIに繋がらなくなったら適宜確認・修正って感じになりそうです。
根本原因は蟹(Realtek)が悪いっぽい
事象解決万歳!・・・と思ったものの、以前は上記対応をせずに上手くいったのに今回駄目だった理由が気になります。
そのため、大きな環境差異を洗い出すと・・・
- 正常時(以前環境)
- ASUS RNUC14RVHI300000I
- Intel Core 3 100U
- 2.5GbE
- 異常時(今回環境)
- ASUS Mini PC PN50-BBR026MD
- AMD Ryzen 5 4500U
- 1GbE
まぁベースとするベアボーンPCが根本的に異なると言うのがありますが、絶対的な違いとしては新しい世代のIntel CPUと少々古い世代のAMD CPUと言う差分があります。
その他、大きな違いとしてネットワーク(有線LAN)が2.5GbEと1GbEの違いがあります。
・・・少し(有線)ネットワーク周りが怪しそうなので、もう少し調査を進めましょう。
正常に動作した環境(RNUC14RVHI300000I)は、Webで調べるとIntel I226-Vが使われているようです。
今回事象が発生した環境(PN50-BBR026MD)は、Webを調べても細かい型番が確認できず、Proxmox VEのコンソールから確認するとr8169=Realtek RTL8169シリーズのいずれかが使われているようです。
・・・Realtek・・・あっ(察し)
レッテル貼りのような発言になってしまいますが、RealtekとLinuxはあまり・・・。問題なく動くことも多いとは思いますが、情報ソースが出てこないものの過去には海外コミュニティで「RealtekのドライバはF**k!」*3と言われるくらいには、まぁ色々と言われていました。
そんな浅はかな考えから、3台目Proxmox VEサーバ導入によりリソースの余裕が生まれた1台目Proxmox VEサーバ(上記の正常動作を確認したIntel NICの環境)で完全同一手順でESXik何強を整えると・・・。
・・・うん、Intel NIC積んだ環境だと、今回の追加設定せずとも普通にWebUI繋がるわ・・・。
そんなわけで、どうもRealtek NICだと悪さをする可能性が微レ存・・・と言ったところのようです。
ただし、おま環の可能性も大いにありますが、どうもNICベンダーによっては本事象(Nested環境でネットワークが通らない問題)が発生する可能性があるようです。
とりあえず残存ESXi環境はバッチリ
チョットしたトラブルはあったものの、問題が発生したProxmox VEサーバ上でESXiを利用する準備が整いました。
動作確認でESXi上の仮想マシンに評価版Windows Serverを導入し、設定を投入した上で物理NW->Proxmox VE->Nested ESXi->評価版Windows ServerへRDP接続できたので、従来通りに遊ぶことができそうです。
Nested環境なので変に凝ったことをすると変な不具合を呼びそうですが、今後ESXi周りの検証が必要になった場合のお戯れ環境として活用していくこととします。