仮想サーバの通信トラブルについて

VDIではないのですが、同じ仮想の環境という事でたまにはサーバのお話を。

ESX6up2の環境でWindowsFTPサーバを立てているのですが、このサーバが月に数回の頻度でLinuxのFATサーバからのFTPがAuthが通って伝送が始まったところで中断してしまいjobがコケる症状が発生しました。パケットキャプチャも仕掛けましたが原因がわからず、また他のプロジェクトの対応で手が離せなかったので2-3か月経過してしまっていたところで調査を開始しました。

ネットワーク周りですが、これまでの経験からFTPがそもそも繋がらないことがあるというのはFTPのACTIVE/PASVモードの影響で見たことがありましたが、キャプチャ結果から伝送中に、という事は今までありませんでしたし経路上でセッションコントロールしているものはなかったのでネットワークの可能性は95%以上ないとみなし切り捨てました。

その上で『仮想だから』という観点で調べる事にし、結果的に以下のURLにあるLROに疑いを向けたところドンピシャだったという話です。

www.cisco.com

(引用、緑字)ESXi で LRO の設定を無効にする

ESXi リリース 4.1 または 5.0 では、ファイル転送プロトコル(SFTP)やファイル転送プロトコルFTP)を使用した転送などの大きなファイルの転送で問題が見つかっています。 これらの問題を解決するには、Large Receive Offload(LRO)オプションを無効にします。 ホストの [Configuration] タブ > [Advanced Settings] > [Net] に移動します。

このページには、複数の LRO 設定があります。 仮想マシンVM)がクローンされていて静的な MAC アドレスを使用している場合は、ネットワークに重複する MAC アドレスがないことを確認します。 詳細については、『LRO の無効化』と『Unified Communications VMware の要件』を参照してください。

気が付いたかと思いますが、問題のあったFTPサーバはESX6の上で稼働しています。
ESX6なので関係ないと思いたいと思いつつ、あえてVMwareのサポセンに本障害とこのLROの項目の関連性を問い合わせを行いました。なんと性格が悪いのでしょう!サポセンの方もゲンナリしたと思います。

まず、サポセンからはvNICがE1000系かVMXNET3かを聞かれました。
Windows 2012 virtual machines using E1000/E1000e driver experience loss of network connectivity (2109922)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2109922

以前も書いた通り、E1000はVMXNET3の3割の速度しか出ないので使ってない事を回答し、Ciscoのサイトでは『ESX4系、5.0ではLRO無効化』について記載があったため
 Net.LRODefBackoffPeriod 設定値: 8 (default)
 Net.LRODefMaxLength     設定値: 65535 (default & MAX値)
 Net.LRODefThreshold     設定値: 4000
 Net.LRODefUseRatioDenom 設定値: 3
上記について関連性があるかサポセンに確認を依頼しました。

サポセンから次の回答として『ESXi 6.0 + vmxnet3 をご利用で LRO が有効の場合、環境によってはネットワーク遅延が発生する恐れがあります。対処は3パターン』とのこと。

◆方法A) 仮想マシン(Windows) でRSC無効

Windowsコマンドプロンプト(管理者権限で実行)にて下記を実施

 netsh int tcp set global rsc=disabled

◆方法B)ESXiホストでLRO無効

ESXiにコンソールかSSHログインして下記を実施
 esxcli system settings advanced set -o /Net/Vmxnet3SwLRO -i 0
 esxcli system settings advanced set -o /Net/Vmxnet3HwLRO -i 0

◆方法C) vSphere Web Client あるいは vSphere ClientでLRO無効

http://pubs.vmware.com/vsphere-60/topic/com.vmware.vsphere.networking.do
c/GUID-DAE02196-FAA5-48F6-A5FF-8E5068A6370A.html

Web Client の場合、 ESXiを選択して  [管理] タブ>[設定] > [システム] >
 [システムの詳細設定]
Net.Vmxnet3SwLRO と Net.Vmxnet3SwLRO のパラメータを0に変更する。

vSphere Clientの場合、 ESXiを選択して構成タブ->詳細設定->
左側"net" を選択して Vmxnet3SwLRO と Vmxnet3SwLRO を0に変更する。

実際症状が治まっていますので効果はあるようです。