キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
27995
閲覧回数
21
いいね!
2
コメント
Shinpei Kono
Cisco Employee
Cisco Employee

 

概要

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) の設定例



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. オーバヘッドの計算

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

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

TLS の MTU 算出ではオーバヘッドの計算の起点となる値として、ASA の MSS 値などを参照する動作になっていますので、算出される MTU 値は、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 が発生する

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

【原因】
VPN 通信に DTLS を使用する場合にも、セッション確立時には TLS と DTLS の両方の MTU が算出されています。DTLS が有効であれば、TLS による Parent セッションが確立すると、DTLS のコネクションも確立されることを想定して、DTLS で算出された MTU が最初に AnyConnect VA に適用されます。 しかし DTLS を使用した通信に失敗することで、データ通信が 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

 

コメント

この記事を読んだおかげでトラブルが解決しました。

とても助かりました。

ありがとうございます。!

Shinpei Kono
Cisco Employee
Cisco Employee

cja56910tf   さま


当記事のご活用とフィードバックありがとうございました。

今後も弊社製品に関して、コンテンツのご要望ありましたら以下からリクエストください。
[ご意見箱] コンテンツ リクエスト
https://supportforums.cisco.com/ja/document/12303581

今後ともよろしくお願い申し上げます。

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします