朝から昼寝

整理しておきたいIT関連の小ネタ

ESXiサーバのジャンボフレーム疎通確認(vmkping)

概要

VMware vSphere環境において、ESXiサーバの性能向上のためジャンボフレームを使用することがあります。NFSiSCSIを用いたストレージ通信や、VMotionの通信などです。
本記事は、ESXiサーバにおけるジャンボフレームの疎通確認方法をまとめたものです。
主な対象はESXi 6系、7系です。MTUの説明などは主にIPv4環境について記載しています(IPv6でなく)。

本記事の目的

  • ESXiサーバが任意の通信相手とジャンボフレーム疎通できているか確認する。
  • ジャンボフレーム疎通できない場合に、切り分けする。


目次

基本

ESXiサーバからのpingによる疎通確認(vmkping)

ESXiサーバにsshログイン後、CLIにて以下のコマンドを実行します。
# vmkping -I (送信元vmkernel) -d -s (送信サイズ) (送信先IPアドレス)

オプション 説明
-I (vmk名) 送信元vmkernelポート指定
-d DF bit(Don’t Fragmentフラグ)指定
-s (サイズ) 送信サイズ指定(単位:バイト)
ICMPヘッダを含まないICMPデータ部のサイズ
デフォルトは56バイト

疎通確認したい経路や送信先に対して適切にping送信できるようオプション指定します。
-Iオプションでは、ping送信元のインタフェースを指定します。vmkernelの名前(vmk0等)を指定可能です。ESXiサーバは複数のvmkernelで構成することが多いので、明示的に指定した方が分かりやすいです。
-dオプションは、ジャンボフレームの疎通確認時には必須のオプションです。このオプションの指定が漏れた場合、経路上でフラグメント(分割)が可能なDF bitオフのpingデータを送信することになるため、本当はMTU 1500の経路なのにping疎通が成功してしまうといった動作が生じ得ます。
-sオプションは、送信するpingデータの大きさを指定します。このオプションで指定したバイト数+28バイトが経路のMTU範囲内であれば、ping疎通が成功します。具体的には以下の通りです。

  • MTU 9000の経路における疎通確認時
    • -s 8972 を指定 (+28すると9000):ping成功する
    • -s 8973 を指定 (+28すると9001):ping失敗する
  • MTU 1500の経路における疎通確認時
    • -s 1472 を指定 (+28すると1500):ping成功する
    • -s 1473 を指定 (+28すると1501):ping失敗する

この+28の意味については、後述します。

VMware社のKBに詳細な説明があります。

また、ESXiサーバ上でvmkping --helpを実行することでvmkpingコマンドのヘルプを参照できます。

vmkpingが失敗する場合の切り分け

ジャンボフレームを指定したvmkpingが失敗する場合、以下のようにオプションを変更しながらvmkpingを再実行することにより、経路上のどの箇所でジャンボフレームの疎通ができなくなっているかを切り分けます。

  • -sで指定する値を小さくしていき、どの値までなら疎通可能かを確認する。
  • 送信先IPアドレスが別ネットワークである場合、まず同一ネットワーク内のIPアドレスでジャンボフレーム疎通なものがあればそれを送信先IPアドレスとして指定する。
  • 可能であれば、vmkpingを実行したホストとは別のホスト(ストレージ等)から同様にジャンボフレームの疎通確認を行う。

基本的には、送信元と送信先の間の経路にあるすべての機器や仮想スイッチが意図したサイズのジャンボフレームを許可するよう設定できている必要性があります。

詳細

vmkpingの-sオプションの値とMTUサイズの違い

vmkpingの-s オプションで指定する値は、「ICMPヘッダを含まないICMPデータ部のサイズ」です。
以下の説明にあるように28バイトを加えることで、IPレイヤまでのデータのサイズになります。

  • ICMPデータ部のサイズ(-sオプションで指定する値)
  • ICMPヘッダのサイズ(8バイト)
  • IPv4ヘッダのサイズ(20バイト)

上記の合計サイズが経路のMTU範囲内であれば疎通可となります。

ちなみ、上記の合計サイズに対してさらに、

も加えると、それがイーサネットフレームのサイズです。
(さらに余談ですがフレッツ網などPPPoEの場合は別ですがESXi環境とはほぼ関係無いので省略します)