ESXiでネットワークカードのファームウェアを更新する

この記事で実現すること
ESXiにおいてネットワークカードの主要ITベンダーであるintelおよびMellanox(NVidia)のファームウェアをアップデートします。sshでESXiホストに接続したままアップデート可能です(作業中は何度かのシステムリスタートが必要になります)。
ネットワークカード自体の脆弱性
(2023-3-5更新)
2023-2-14にintelのサイトで700シリーズおよびE810シリーズでCVE-2022-36382の脆弱性について発表がありました。
境界外への書き込みでサービス拒否に繋がるとの事(Base Score: 6.0 MEDIUM)です。
その数日後の23-2-17に700シリーズでは新しいv9.2、およびE180シリーズではv4.2のファームウェアが発表されています。
Intel® Ethernet Controllers and Adapters Advisory
https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00754.html
Intel 700 nvmupdate v9.2
https://www.intel.co.jp/content/www/jp/ja/download/18638/non-volatile-memory-nvm-update-utility-for-intel-ethernet-adapters-700-series-vmware-esx.html?wapkw=nvm%E3%80%80update
Intel E810 nvmupdate v4.2
https://www.intel.com/content/www/us/en/download/19624/non-volatile-memory-nvm-update-utility-for-intel-ethernet-network-adapter-e810-series.html
NATIONAL VULNERABILITY DATABASE
https://nvd.nist.gov/vuln/detail/CVE-2022-36382
脆弱性対策情報データベースである、JVN iPdeiaでの検索では、2020年以降、Intel(R) Ethernet I210 Controller、Intel(R) Ethernet 700 Series Controller 、Intel(R) Ethernet Network Controller E810において脆弱性が発見されています。
- JVN iPdeia (”Intel Ethernet Controller”で検索)
Mellanox(NVIDIA)のネットワークカードについては脆弱性は見つかっていないようです。
ネットワークカード(NIC)の保守期限
ESXiでのドライバはintelやMellanoxを使っている限りは最適なドライバがパッチ公開のタイミングで提供されます。但し、チップを動作させるネットワークカード上のファームウェアは別途NICの提供ベンダーからのパッチを適用する必要があります。
ESXiのハードウェア互換リストでは古いネットワークカードでも対応している場合があります。しかし、ベンダー側でサポート終了(EOSL)となっている製品もあり注意が必要です。ビジネス用途でなければ使えるうちは使うといった対応が取れますが、万が一ファームウェアで脆弱性などが指摘された場合は、そのNICの利用を取りやめる必要が出てきます。
intelのサポート終了NIC
以下のリンクではintelの製造終了のNIC一覧情報があります。さらに5年経過でサポート終了という事です。X520やX540なども製造終了しており、5年間の保証ポリシーの対象となっています。
- intel
しかし、X520とX540の新しいファームウェアのダウンロードについては見つかりませんでした。私の見落としでなければ、最新版のファームウェアの提示が無いというのはこれから新規導入する場合、リスクが大きく感じます。
Melanoxのサポート終了NIC
Mellanoxにおいても”Products End-of-Life Policy”というものがあり、販売終了から5年経過し、End of Supportとなるようです。
以前にはEOSの製品一覧が記載されているExcelファイルが置いてあったんですが、最近は無くなってしまいました。
最近は$40で購入できるMCX311A-XCATなどは2020年3月31日に販売終了となっています。
Mellanoxの場合はVMwareの互換リストから外れているConnect X-3についてもWebにはファームウェアの情報が掲載されているので、いつでも最新のファームウェアに更新できます。
intelのNICファームウェア更新
intelの純正のNICであればそのカード名称でintelのサイトを検索しファームウェアを更新します。また、3rdベンダーがintelチップを採用し製造したNICだとintelのチップの名称でファームウェアをダウンロードする必要があります。「ESXI7.0をRyzen7 5700Gで構築」では、私は3rdベンダーが製造したintel X710を搭載したNICを購入したと書きましたが、このようなケースではintelが提供するファームウェアを適用可能なのか、それとも3rdベンダーが提供するファームウェアがあるのか事前に確認する必要があります。X710のSFP+を4Portというのは低消費電力・低発熱で魅力的ですが、前述した脆弱性について既に確認していたため、ファームウェアのアップデートに言及できるベンダーのものを選定しました。販売者の中には「できるはずだがお勧めしない」という回答もありました。3rdベンダーの場合は、ファームウェアアップデートの設定ファイルの書き換えが必要な場合もあります(私の購入したNICはこの修正が不要でした)。
導入はシンプルでnvmupdateというファームウェア更新ツールとセットになったNICのファームウェアをintelのサイトからダウンロードし、ESXiにSSHで接続し実行するだけです。留意点としては、誤った種類のファームウェア適用によりNICが使えなくなってしまった場合は自己責任であり、リスクはあります。
導入手順を説明します。intelのサイトで”nvm update”を検索します。するとX550シリーズ、700シリーズ、E810シリーズとnvmupdateについて表示されるのでお使いのチップに相当するモジュールをダウンロードしてください。intel純正のカードであればカード名で検索も可能です。
- X550シリーズ
- 700シリーズ
- E810シリーズ
それぞれのダウンロードページには、クイック使用ガイドというものがありますのでそこに詳細な手順が記されています。
700シリーズのファームウェア適用の実例です。まずNICのFirmwareを確認します。対象のNIC(vmnicx)を指定し内容を確認します。esxcli network nic get -n [物理NICのID]
1 | [root@esxi2:~] esxcli network nic get -n vmnic0 |
続いてダウンロードしたファイル(700シリーズは2023年3月5日時点では最新がv9.2です)をscpかストアブラウザを使ってESXi上にアップロードします。その後展開し実行します。
特に注意点はありませんが、私は実行にあたりメンテナンスモードにして(VMを停止)から開始しました(アップデート中に、仮想マシンが止まるようなことはありませんが)。
1 | [root@esxi2:] tar -xvf 700Series_NVMUpdatePackage_v9_20_ESX.tar.gz |
以下ではNICを全て対象、NVMイメージのバックアップは有りということで実行したログになります。
1 | Intel(R) Ethernet NVM Update Tool |
最後にリブートが必要とのことでリブートしています。
ホストが再起動後、ファームウェアが適用されているか再び確認します。
1 | [root@esxi2:~] esxcli network nic get -n vmnic0 |
Firmware Version: 9.20
ということで、無事更新されました。
intelの手順書では、NOTEとして、以下の説明があります。
On 700 Series and 500 Series devices, updating to the most current NVM (with the NVM Update Package) and driver does not update the Option ROM. Intel recommends an Option ROM update after the NVM and driver are updated. Refer to the User Guide for Intel® Ethernet Adapters page for the most current Option ROM update process version.
これはネットワークブート時のUEFI Network Driver Option ROMをLinuxまたはUEFIシェルを使ってUEFIネットワークドライバを更新するものです。今回はこの作業については割愛します。
MellanoxのNICファームウェア更新
Mellanoxの場合は、NVIDIAのサイトに”How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0.”というマニュアルがありますので、そこで手順を確認します。
How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0.
https://docs.nvidia.com/networking/pages/releaseview.action?pageId=15049813
NVIDIA Firmware Toolをダウンロードし、ESXiにインストールします。その後別途ファームウェアをダウンロードしてファームウェアのアップグレードを行います。昔はflintでしたが、上記手順によれば今はmlxfwmanagerというのが使われるようです。Windowsではそのサブセットのmlxupが一般的です。
- ツールを2つダウンロードするために、ダウンロードページにアクセスします。
http://www.mellanox.com/page/management_tools
- ここの例ではESXi7.0向けのVersion4.18.1を使い進めます。
- “7 Native”、”x64”を選択し、”Mellanox-NATIVE-NMST_4.18.1.14-1OEM.700.1.0.15843807_19206114-package.zip”をダウンロードし展開します。
- ZIPの中にはさらにZIPファイルがあり、”MEL_bootbank_nmst_4.18.1.14-1OEM.700.1.0.15843807.vib”というESXiのモジュールファイルを見つけます。
- 続いて、”Mellanox-MFT-Tools_4.18.1.14-1OEM.700.1.0.15843807_19206112-package.zip”をダウンロードし展開します。
- こちらもZIPの中にさらにZIPファイルがあり、”mft”というフォルダの中に”MEL_bootbank_mft_4.18.1.14-0.vib”のモジュールファイルを見つけます。別にOEMというフォルダがあり、NVIDIAの手順書でもファイル名からもOEMを選ぶべきのように見えますが、OEMのフォルダのものは必要なモジュールが見つかりません。
- scpかストアブラウザを使いこの2つのファイルをESXiにアップロードします。2つのモジュールは1つづつインストール、リブートが必要になりますので、/tmpにコピーする場合は最初のリブートで/tmpがクリアされるのでお気をつけください。
- ESXiにSSHで接続し、最初のモジュール(NMST)をインストールします。
esxcli software vib install -v /tmp/MEL_bootbank_nmst_4.18.1.14-1OEM.700.1.0.15843807.vib -f
1 | [root@localhost:/tmp] esxcli software vib install -v /tmp/MEL_bootbank_nmst_4.18.1.14-1OEM.700.1.0.15843807.vib -f |
- ここで一旦リブートします。
- SSHで接続後、2つ目のモジュール(MFT-Tools)をインストールします。
esxcli software vib install -v /tmp/MEL_bootbank_mft_4.18.1.14-0.vib -f
1 | [root@localhost:/tmp] esxcli software vib install -v /tmp/MEL_bootbank_mft_4.18.1.14-0.vib -f |
- 再びリブートします。
- ESXiにインストールされているモジュールを確認します。
esxcli software vib list
先頭に以下のモジュールがあるはずです。PartnerSupportedとなっており、セキュアブートのESXiでも問題ありません。
1 | Name Version Vendor Acceptance Level Install Date |
- SSHで接続後、ツールの動作確認をします。ここではConnectX3がある環境です。
cd /opt/mellanox/bin
,./mst start
,./mst status
,./mst status -vv
1 | [root@localhost:/opt/mellanox/bin] ./mst start |
- ファームウェアアップデートに使うmlxfwmanagerの動作確認をします。
./mlxfwmanager --query
1 | [root@localhost:/opt/mellanox/bin] ./mlxfwmanager --query |
今回のケースでは、ebayにて$50で購入可能な、ConnectX-3(MCX311A-XCAT)を対象としています。
- NVIDIAのサイトからファームウェアをダウンロードします。
https://network.nvidia.com/support/firmware/firmware-downloads/ - 該当するEthernetファームウェアを選択し、ZIPファイルをダウンロードし展開します。*.binというファイルが抽出されます。

- scpまたはストアブラウザでbinファイルをESXiの/tmpにアップロードします。
- ファームウェアのアップデートを行います
./mlxfwmanager -u -i /tmp/ファームウェア.bin
。ファームウェアの実行直前に確認が求められるので、”y”を入力します。
1 | [root@localhost:/opt/mellanox/bin] ./mlxfwmanager -u -i /tmp/fw-ConnectX3-rel-2_42_5000-MCX311A-XCA_Ax-FlexBoot-3.4.752.bin |
- リブートします。
- 再び、
./mlxfwmanager --query
を実行し、ファームウェアがアップデートされたか確認します。
1 | [root@localhost:/opt/mellanox/bin] ./mlxfwmanager --query |
まとめ
intelでは新しいファームウェアについて推奨と書かれる場合があり判断が難しいケースがありますが、脆弱性や製品の組み合わせなど問題が顕在化する環境に当てはまる場合のみ、新しいファームウェアを適用すべきでしょうか。ファームウェアとドライバーとの整合性もあるのでリリースノートを参照されることをお勧めします。