Microsoft Azure の VPN 接続が不安定になる問題

現象
Microsoft Azure の仮想ネットワークから、サイト間 VPN 接続を構築している環境で、パケットが欠落する問題等により、オンプレミス側との通信に失敗することがあります。
原因
Windows の既定値として、イーサネットの MTU サイズが 1500 バイト長として設定されています。
これは、VPN 環境等で IPSec が暗号化のために拡張ヘッダーを付加するサイズを考慮していないため、元のパケットが分割されて VPN トンネルに送信されてしまいます。VPN デバイスの中には、分割されたパケットを正しく処理できないことがあるため、VPN デバイスに依存した、必要な MTU サイズを設定しなければなりません。
解決方法
これまでの弊社に寄せられた事例から、対策として実績がある MTU の設定値は 1350 です。
以下のコマンドを実行します。
netsh interface ipv4 set subinterface <インターフェース番号> mtu=1350 store=persistent
<インターフェース番号> は、"netsh interface ipv4 show int" コマンドにより判断することができます。
以下の場合は 17 を指定します。
C:\>netsh interface ipv4 show interface
Idx     Met         MTU          State                 Name
---  ----------  ----------  ------------  ---------------------------
  1          50  4294967295  connected     Loopback Pseudo-Interface 1
 17           5        1500  connected     Ethernet 4


回避策
仮想マシンへのネットワーク設定情報は、仮想マシンをサイズ変更したり、メンテナンス等によって、別のホストに移動した場合に、初期状態に戻ってしまいます。
その対策として、上記のコマンドラインをスタートアップ スクリプトで起動するような設定が有効です。

 MTU を設定するための以下の PowerShell スクリプトを StartUp.ps1 ファイルに保存します。
# StartUp.ps1
$a = netsh int ipv4 show int
$a
$maxNic = $a.count
#Loop through only data. Row 0= blank; 1=title;2=lines under title.
for ($i=3; $i -lt $maxNic-1; $i++) {
    $nic = ($a[$i].split(" ") | ?{!$_ -eq ""})
    if ([double]$nic[2] -gt 1350)  {
        if ([double]$nic[2] -le 2000) {
            # write-host "Found Idx:" ($nic[0]) -foreground Yellow 
            Netsh int ipv4 set subint $nic[0] mtu=1350 store=persistent
        }
    }
}
上記のスクリプトを、システムのスタートアップ時に実行するように、タスク スケジューラーにタスクとして登録します。
1. Server Manager の [Tools] メニューから "Task Scheduler" を選択して起動します。
2. "Create Task" をクリックして、新規のタスクを作成します。
  (1) [General] のタブにて、
      - Name : OnReboot. (名前は任意です) を設定します。
      - "Run whether user is logged on or not" のラジオボタンを ON にします。
      - "Run with highest privileges" のチェックボックスを ON にします。
  (2) [Triggers] のタブにて、[New] ボタンをクリックします。
  (3) 「New Trigger」のダイアログにて、
      - "Begin the task:" のドロップダウンメニューから "At startup" を選択します。
      - [OK] ボタンをクリックしてダイアログを終了します。
  (4) [Actions] のタブにて、[New] ボタンをクリックします。
  (5) 「New Action」のダイアログにて、
      - "Action" には "Start a program" を選択しておきます。
      - "Program/script:" には "PowerShell.exe" を指定します。
      - "Add arguments (optional)" には、スクリプトファイル StartUp.ps1 をフルパス名で入力します。
      - [OK] ボタンをクリックしてダイアログを終了します。
  (6) 「Create Task」のダイアログの [OK] ボタンをクリックします。
  (7) 管理者権限のユーザー名とパスワードを指定します。

注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2902923 - 最終更新日: 10/09/2014 00:37:00 - リビジョン: 3.0

Microsoft Azure Virtual Machine - Windows, Microsoft Azure cloud services

  • KB2902923
フィードバック