書類
AnyConnect の MTU について

AnyConnect の MTU について

2024-11-13   概要 AnyConnect Secure Mobility Client における MTU の設定方法および動作概要を紹介します。本資料はこれまで ASA 9.1、AnyConnect 3.1 での動作検証に基づいた資料にとなっていましたが、現時点での最新バージョンである ASA 9.7(1

Related articles

無料VPNのおすすめ7選│高速で安全。制限なし!2024年 Opera VPNの使い方と安全性の評判【Androidアプリ】 VPN接続とは?いまさら聞けない基本を仕組みから接続方法まで解説 中国旅行者必見!VPN対応海外WiFiで制限サイトにアクセスする方法と注意点 Windows10でVPN設定[事前共有キー] 初期設定(ソフトウェアトークン) 【検証済】YoutubeプレミアムをアルゼンチンからVPNで月額154円にする方法 【図解】MPLS-VPNの概要 ~MP-BGPとVRFの動作,シーケンスやRDとRTの違い, 識別ラベルについて~

 

概要

AnyConnect Secure Mobility Client における MTU の設定方法および動作概要を紹介します。本資料はこれまで ASA 9.1、AnyConnect 3.1 での動作検証に基づいた資料にとなっていましたが、現時点での最新バージョンである ASA 9.7(1)、AnyConnect 4.4を使用して再検証を実施した結果も交えて、加筆・修正したものとなります。

正式にドキュメント化されていない箇所は、現行の実装を説明したものであり、今後も同一の動作となることを保証したものではない点についてご留意ください。

   

1.AnyConnect MTU の基本設定

1-1. DfltGrpPolicy およびカスタム Group Policy からの設定

Configuration > Remote Access VPN > Network (Client) Access > Group Policies から DfltGrpPolicy (System Default) を  Edit して、Advanced > AnyConnect Client にアクセスすると、MTU のデフォルト値として 1406 が指定されています。 設定可能な最大値も 1406 となります。 

カスタム Group Policy に、DfltGrpPolicy とは異なる MTU を指定する場合には、 DfltGrpPolicy (System Default) の代わりに、対象となる Group Policy で Edit をクリックして、Advanced > AnyConnect Client にアクセスします。初期状態は Inherit となり、DfltGrpPolicy の設定値が継承されています。独自の MTU を設定するには、Inherit のチェックを外して、所定の値を入力します。

 

1-2. Radius Attribute を使用した設定

WebVPN-SVC-DTLS-MTU (SVC-MTU) という Attribute を使用して、MTU を指定する方法があります。この Attribute から与えられる MTU は、1-1 で設定された Group Policy の MTU よりも優先されます。AAAサーバの設定方法によって特定のVPNユーザ、あるいはグループに対して、Group Policy の設定を優先適用できます。

Cisco Secure Access Control System (ACS) の設定例


Cisco Identity Services Engine ( ISE ) 設定 例

AnyConnect の MTU について

1-3. Local User Database のユーザ毎の設定

Configuration > Remote Access VPN > AAA/Local Users > Local Users から個別の User 毎に適用する MTU を設定することができます。対象となる User Account を選択して Edit して、VPN Policy > AnyConnect Client にアクセスして設定できます。

  

  

2 . AnyConnect MTU 動作 概要

2-1. オーバヘッドの計算

暗号 化 生じる パケット サイズ オーバ ヘッド is 異なり プロトコル ( DTLS / TLS ) 、 暗号 化 アルゴリズム 、 ハッシング 異なり 。 DTLS 基本 的 内訳 以下 、 オーバヘッド 最大 値 is なり 94 bytes 。

20 (IPヘッダ) + 8 (UDPヘッダ) + 13 (DTLSヘッダ) + 38 to 53 (MAC, AES padding etc) 

TLS MTU 算出 オーバヘッド 計算 起点 値 、 ASA MSS 値 参照 動作 、 算出 MTU 値 is なっ 、 DTLS 比べる やや 小さく 。

2 – 2 . バーチャル アダプタ 反映

VPN 接続が確立するタイミングで、MTU が計算されて、AnyConnect のバーチャルアダプタ(以下 VA) に適用されますが、DfltGrpPolicy や、カスタム Group Policy で設定した MTU 値が常にそのまま適用されるわけではない点に注意ください。 AnyConnect クライアントとのネゴシエートを通じて、NIC の MTU が加味されます。

  AnyConnect MTU < 物理 NIC の MTU – オーバヘッド
  である場合には”AnyConnect MTU” が VA に適用されます。

  AnyConnect MTU > 物理 NIC の MTU – オーバヘッド
  である場合には、”物理 NIC の MTU – オーバヘッド”の値が VA に適用されます。

debug webvpn anyconnect” の出力を確認することで、MTU の計算および適用結果を確認することができます。以下は、NIC の MTU が 1500(base-mtu)、AnyConncet MTU がデフォルトの 1406 で、VPN セッションが確立したときの出力例の抜粋です。

DTLS Block size = 16
mtu = 1500 ( base - mtu ) - 20 ( ip ) - 8 ( udp ) - 13 ( dtlshdr ) - 16 ( dtlsiv ) = 1443
mod-mtu = 1443(mtu) & 0xfff0(complement) = 1440
dtls-mtu = 1440(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1418
computed tls-mtu=1287 dtls-mtu=1418 conf-mtu=1406
DTLS enabled for intf=3 (outside2)
overide computed dtls - mtu = 1418 with conf - mtu = 1406
tls - mtu = 1287 dtls - mtu = 1406

この出力を 2-1 の計算式に当てはめると、AES のブロックサイズ が 16 で、 Padding が 3 となっています。結果としてオーバヘッドが 82 となり、1418 byte が算出されています。しかし、AnyConnect MTU で設定可能な最大値は 1406 になるので、1406 に上書きされて AnyConnect クライアントの VA に割り当てられます。

VA に割り当てられた MTU を AnyConnect クライアント端末(Windows 7) から確認した出力になります。Local Area Connection 8 が AnyConnect の VAです。

  

2-2. MTU Discovery Process

AnyConnect では、最適な MTU を自動検出する実装があります。DTLS セッション確立後に、AnyConnect クライアントは転送可能な最大サイズの DPD ping を ASA に対して送出します。応答が得られなかった場合には、MTU サイズを 32 bytes 減らして、再度 DPD ping を実行するという動作を繰り返し、最終的に ASA からの応答が得られた場合には、その時点のサイズを 最適な MTU として、VA に再適用します。

MTU Automatically Adjusted When Using DTLS
http://www.cisco.com/c/en/us/td/docs/security/vpn_client/anyconnect/anyconnect44/release/notes/b_Release_Notes_AnyConnect_4_4.html#ID-1454-00000577

本機能が動作するためには、DPD が有効になっている必要があります(DftlGrpPolicy ではデフォルトで有効になっています)。また、DTLS のみの実装となり、IKEv2 には実装されていません。上記 URL の ”MTU Adjustment on Group Policy May Be Required for IKEv2” に記載されているように、IKEv2 では、必要に応じて MTU を小さく調整することが推奨されています。

、 本 機能最大サイズの DPD ping が、通信経路上でフラグメントされずに、破棄されるネットワークのみで動作します。フラグメントされ、ASAに届いてしまうネットワークでは、ASA から応答が返ってくることとなり、調整は行われません。

3.主要事例

3 – 1 . 接続 約 1 分 後 Reconnect is 発生 発生

【概要】
AnyConnect に最初に接続確立してから約1分で Reconnect が発生する場合があります。Reconnect が発生するまでの間、AnyConnect のステータスは Connected となっていても、実通信が出来ない。

【原因】
VPN 通信 DTLS 使用 場合 、 セッション 確立 時 TLS DTLS 両方 MTU is 算出 算出 。 DTLS 有効 、 TLS Parent セッション 確立 、 DTLS コネクション 確立 想定 、 DTLS 算出 MTU is 適用 最初 AnyConnect VA 適用 。 DTLS 使用 通信 失敗 、 データ 通信 is バック TLS フォール バック 。 タイミング 、 TLS 計算 MTU 再 適用 発生 、 VA リセット 、 一時 的 Reconnect ステータス 。

【回避策】
1.経路上に DTLS の確立を阻害する(UDP 443 をブロックする)ファイアウォールが存在しないか確認して、UDP 443 の疎通性を確保してください。または、DTLS のデフォルトポートを ASA 上で変更することも出来ます。

2.DTLS を使用しない Group Policy を用意して、影響を受けるユーザを退避させたり、Local User データベースでユーザ認証を行っている場合には、User 毎に DTLS を無効にすることもできます。

3. 初回接続で MTU が計算された結果として、TSL と DTLS の MTU 値が同じとなる場合には、TLS へのフォールバックのタイミングで、VA に対して MTU の再適用は発生しないため、Reconnect は発生しません。つまり AnyConnect MTU の設定値を小さく設定して、DTLS、TLS の MTU 計算結果が  AnyConnect MTU の設定値に上書きされるようにすることも、有効な回避策となります。

Reconnect が発生するケース

DTLS Block size = 16
mtu = 1500 ( base - mtu ) - 20 ( ip ) - 8 ( udp ) - 13 ( dtlshdr ) - 16 ( dtlsiv ) = 1443
mod-mtu = 1443(mtu) & 0xfff0(complement) = 1440
dtls-mtu = 1440(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1418
computed tls-mtu=1287 dtls-mtu=1418 conf-mtu=1406
DTLS enabled for intf=3 (outside2)
overide computed dtls - mtu = 1418 with conf - mtu = 1406
tls - mtu = 1287 dtls - mtu = 1406

Reconnect 発生 ケース ( AnyConnect MTU = 1250 設定 )

DTLS Block size = 16
mtu = 1500 ( base - mtu ) - 20 ( ip ) - 8 ( udp ) - 13 ( dtlshdr ) - 16 ( dtlsiv ) = 1443
mod-mtu = 1443(mtu) & 0xfff0(complement) = 1440
dtls-mtu = 1440(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1418
computed tls-mtu=1287 dtls-mtu=1418 conf-mtu=1250
overide computed tls-mtu=1287 with conf-mtu=1250
DTLS enabled for intf=3 (outside2)
overide computed dtls-mtu=1418 with conf-mtu=1250
tls-mtu=1250 dtls-mtu=1250