セキュリティ : Cisco ASA 5500-X シリーズ次世代型ファイアウォール

PIX/ASA 7.x と IOS: VPN フラグメンテーション

2016 年 10 月 28 日 - 機械翻訳について
その他のバージョン: PDFpdf | ライター翻訳版 (2008 年 2 月 27 日) | 英語版 (2015 年 11 月 12 日) | フィードバック


目次


概要

このドキュメントでは、パケットのフラグメンテーションに関連して発生する問題を軽減するのに必要な手順を、順を追って説明しています。 フラグメンテーションの問題の例としては、ネットワーク化されたリソースへの ping は成功していながら、電子メールやデータベースなどの特定のアプリケーションではその同じリソースに接続できない場合が挙げられます。

前提条件

要件

この設定を行う前に、次の要件が満たされていることを確認します。

  • VPN ピア間の接続

使用するコンポーネント

このドキュメントは、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。

ネットワーク図

このドキュメントでは、次のネットワーク構成を使用しています。

/image/gif/paws/82444/fragmentation-1.gif

関連製品

この設定は、次のバージョンのハードウェアとソフトウェアにも使用できます。

  • IOS ルータ

  • PIX/ASA セキュリティ デバイス

表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。

背景説明

IP では、最大 65,536 バイト長の IP パケットがサポートされていますが、大部分のデータリンク レイヤ プロトコルでサポートされているのは、最大伝送ユニット(maximum transmission unit; MTU)と呼ばれる、これより大幅に少ないバイト長です。 特定の種類のデータリンク レイヤ メディアを通過させるためには、サポートされる最大伝送ユニットに基づいて、IP パケットの分割(フラグメント)が必要になる場合があります。 宛先では、このフラグメントを元の完全な IP パケットに再構成する必要があります。

fragmentation-2.gif

2 つの VPN ピア間でのデータ保護のために VPN を使用すると、元のデータに追加オーバーヘッドが付加され、これにより必然的にフラグメンテーションが発生する可能性があります。 この表には、VPN 接続をサポートするために、保護されたデータへの付加が必要になる可能性のあるフィールドが掲載されています。 複数のプロトコルが必要になる可能性があり、これにより元のパケットのサイズが増加することに注意してください。 たとえば、GREトンネルを設定した 2 つの Ciscoルータ間の L2L DMVPN IPSec接続を、必要とすればこの追加オーバーヘッドを使用する場合: ESP、GRE および外 IP ヘッダー。 トラフィックがアドレス デバイスを通過する際に VPN ゲートウェイへの IP セキュリティ ソフトウェア クライアント接続が用意されている場合、Network Address Translation- Traversal(NAT-T)のためのこの追加オーバーヘッド、さらにはトンネル モード接続のための外側の IP ヘッダーが必要になります。

フラグメンテーションに関連した問題

発信元から宛先へパケットが送信されると、IP ヘッダーの制御フラグ フィールド内に値が入力され、この値が中継デバイスによるパケットのフラグメンテーションを左右します。 制御フラグは 3 ビット長ですが、フラグメンテーションで使用されるのは最初の 2 ビットだけです。 秒単位が 0 に設定 される場合、パケットはフラグメント化することができます; それが 1 に設定 される場合、パケットはフラグメント化することができません。 通常、この 2 番目のビットは don't fragment(DF)ビットと呼ばれます。 3 番目のビットでは、フラグメンテーションが発生した場合に、このフラグメンテーション化されたパケットが最後のフラグメントなのか(0 に設定)、あるいはパケットを構成するフラグメントがさらに存在するのか(1 に設定)が指定されます。

フラグメンテーションが必要な際に、問題を発生させる可能性がある 4 つの領域は次のとおりです。

  • フラグメンテーションと再構成を実行する 2 つのデバイスにより、CPU サイクル内の追加のオーバーヘッドとメモリが要求されます。

  • 宛先への経路でフラグメントの 1 つが廃棄された場合、パケットを再構成することができず、パケット全体をフラグメント化して再度送信する必要があります。 特に対象のトラフィックがレート制限されている状況では、これによって追加のスループット問題が発生し、許容される制限を超えたトラフィックが発信元から送信されます。

  • パケット フィルタリングとステートフル ファイアウォールでは、フラグメントの処理が困難になる可能性があります。 フラグメンテーションが発生すると、最初のフラグメントには外側の IP ヘッダー、TCP、UDP、ESP などの内側のヘッダー、およびペイロードの一部が含まれます。 元のパケットの後続フラグメントによって、外側の IP ヘッダーと連続するペイロードが構成されます。 このプロセスにおける問題はインテリジェント な フィルタリング デシジョンを作るためにある特定のファイアウォールが各パケットの内部ヘッダー 情報を見る必要があることです; その情報が抜けている場合、それらは最初のものを除いて不注意にすべてのフラグメントを、廃棄できます。

  • パケットの IP ヘッダー内の発信元では、3 番目の制御ビットを don't fragment に設定できます。これは、中継デバイスでパケットが受信されてフラグメンテーション処理を行う必要がある場合に、中継デバイスではこれをフラグメンテーション処理できないことを意味します。 この場合、中継デバイスによりパケットが廃棄されます。

主なタスク

フラグメンテーションの検出

デフォルトの最大伝送ユニット値が 1,500 バイトである大部分のネットワークでは、一般的に IP パケットに使用されるイーサネットが使用されます。 フラグメンテーションが発生しているかどうかを検出したり、フラグメンテーションが必要であっても実行できない状況(DF ビットが設定されている)を検出したりするには、まず VPN セッションを始動します。 次に、フラグメンテーションを検出するには、次の 4 つの手順のいずれかを使用できます。

  1. もう一方の端に配置されたデバイスに ping を実行します。 これは、ping によるトンネルの通過が許可されていることを前提にしています。 これが正常である場合、同じデバイスを渡るアプリケーションにアクセスすることを試みて下さい; たとえば、Microsoft E メールかリモート デスクトップ サーバがトンネルを渡ってあれば、開いた Outlook はおよび E メールをダウンロードすることを試みるかまたはリモート デスクトップにサーバに試みます。 これが実行できない場合で名前解決が適切な場合、フラグメンテーションが問題である可能性が非常に高いといえます。

  2. Windows デバイスからこれを使用して下さい: C:\ > PING - f-l packet_size_in_bytes destination_IP_address

    パケットがフラグメンテーション処理されないように指定するには、-f オプションを使用します。 パケットの長さを指定するには、-l オプションを使用します。 まず、1,500 のパケット サイズにこれを試してください。 たとえば、-f -l 1500 192.168.100 で ping を実行します。 フラグメンテーションが必要となるが、実行されたことができない場合これのようなメッセージを受け取ります: パケットはフラグメント化する DF セット必要があります

  3. On Cisco ルータで、debug ip icmp コマンドを実行して、extended ping コマンドを使用します。 ICMP を見れば: dst (x.x.x.x)、送信 される 到達不能必要とされるフラグメンテーションおよび DF x.x.x.x がデスティネーションデバイスの、および y.y.y.y はルータです y.y.y.y に設定 するのにフラグメンテーションが必要であるがこと、エコー要求の DF ビットを設定 したので中間デバイスは告げます、中間デバイスそれをネクスト ホップにそれを転送するためにフラグメント化できません。 この場合、実行可能になるまで、ping の最大伝送ユニットのサイズを段階的に小さくしていきます。

  4. Cisco セキュリティ アプライアンスでは、キャプチャ フィルタを使用します。

    • ciscoasa(config)#access-list outside_test permit tcp any host 172.22.1.1 eq 80

      発信元を any の状態のままにすると、管理者による任意の network address translation(NAT; ネットワーク アドレス変換)の監視が可能になります。

    • ciscoasa(config)#access-list outside_test permit tcp host 172.22.1.1 eq 80 any

      発信元と宛先の情報を入れ換えると、リターン トラフィックをキャプチャすることができます。

    • 外部で ciscoasa(config)# キャプチャ outside_interface access-list outside_test インターフェイス

      ユーザは、アプリケーション X を使用して新しいセッションを開始する必要があります。 ユーザが新しいアプリケーション X セッションを開始した後、ASA 管理者は show capture outside_interface コマンドを発行する必要があります。

フラグメンテーションの問題に対するソリューション

フラグメンテーションの問題を解決するには、さまざまな方法があります。 このセクションではこれらの方法を説明しています。

方法 1: 静的な MTU設定

静的な最大伝送ユニットの設定によって、フラグメンテーションの問題を解決できます。

  1. ルータでの最大伝送ユニットの変更

    デバイスに手動で最大伝送ユニットを設定する場合、VPN ゲートウェイとして動作するデバイスが、トンネルを介して受信したパケットを保護したり送信したりする前に、受信したパケットをフラグメンテーション処理するように指示されることに注意します。 これは、ルータによってトラフィックが保護されてからフラグメンテーション処理が行われるよりも適切ですが、フラグメンテーション処理はデバイスによって行われます。

    警告 警告: あらゆるデバイス インターフェイスの MTU サイズを変更する場合、により中断 され、再製されるそのインターフェイスで終わるすべてのトンネルを引き起こします。

    Cisco ルータで ip mtu コマンドを使用して、VPN が終端されているインターフェイスの最大伝送ユニット サイズを調整します。

    router (config)# interface type [slot_#/]	port_#
     
    router (config-if)# ip mtu MTU_size_in_bytes
    
    
  2. ASA/PIX での最大伝送ユニットの変更

    ASA/PIX デバイスで、mtu コマンドを使用して、グローバル コンフィギュレーション モードで最大伝送ユニット サイズを調整します。 デフォルトでは、最大伝送ユニット サイズは 1500 に設定されています。 たとえば、Outside(VPN が終端されているところ)と名前が付けられたセキュリティ アプライアンス上にインターフェイスが配置されていて、(「フラグメンテーションの検出」セクションに掲載された方式を使用して)フラグメント サイズとして 1380 を使用すると決定した場合には、次のコマンドを使用します。

    security appliance (config)# mtu Outside 1380
    
    

方法 2: TCP Maximum Segment Size

TCP の最大セグメント サイズによって、フラグメンテーションの問題を解決できます。

この機能は TCP とだけ動作します; 他の IP プロトコルは IP フラグメンテーション問題を解決するのに別のソリューションを使用しなければなりません。 ルータで ip mtu を設定しても、TCP 3 ウェイ ハンドシェイクでの両エンド ホストの TCP MSS に関するネゴシエーション内容に影響はありません。

  1. ルータでの MSS の変更

    通常、TCP トラフィックは大規模なデータの転送に使用されるため、TCP トラフィックでフラグメンテーションが発生します。 TCP では TCP maximum segment size(MSS; 最大セグメント サイズ)と呼ばれる機能がサポートされており、2 台のデバイスによる TCP トラフィックの適切なサイズのネゴシエーションが可能です。 MSS 値は、各デバイスで静的に設定され、想定されるパケットに使用するバッファ サイズを表します。 2 つのデバイス 確立する TCP 接続が 3方向ハンドシェイク内のローカル MTU 値とローカル MSS 値を比較する時; あるものはどれでも下部のはリモートピアに送信 されます。 次に、交換された 2 つの値の小さい方の値が 2 つのピアによって使用されます。 この機能を設定するには、次を実行します。

    Cisco ルータでは、VPN が終端されているインターフェイスで tcp adjust-mss コマンドを使用します。

    router (config)# interface type [slot_#/] port_#
    
    router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
    
    
  2. ASA/PIX での MSS の変更

    最大の TCP セグメント サイズが設定した値を超えず、最大値が指定したサイズ未満ではないことを確認するには、グローバル コンフィギュレーション モードで sysopt connection コマンドを使用します。 デフォルト設定を復元するには、このコマンドの no 形式を使用します。 デフォルトの最大値は 1380 バイトです。 デフォルトでは最小値の機能は無効になっています(0 に設定)。

    デフォルトの最大 MSS 制限を変更するには、次を実行します。

    security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
    
    

    最大サイズを 1380 より大きく設定する場合、MTU(最大伝送ユニット)のサイズ(デフォルトでは 1500)によってはパケットがフラグメント化する可能性があります。 数多くのフラグメントによって、フラグ ガード機能の使用時にセキュリティ アプライアンスのパフォーマンスが影響される可能性があります。 最小サイズを設定すると、TCP サーバによる数多くの小規模な TCP データ パケットのクライアントへの送信や、サーバとネットワークのパフォーマンスへの影響が回避されます。

    最小の MSS 制限を変更するには、次を実行します。

    security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes

    security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes

    資料 PIX/ASA 7.X 問題MSS セクションを超過するパケットを許可するために MPF 設定を参照して下さい: 超過する MSS - HTTP クライアントは詳細についてはいくつかの Webサイトに超過された MSS パケットに別の方式を与えるために参照できません

方法 3: パスMTU ディスカバリ(PMTUD)

PMTUD によって、フラグメンテーションの問題を解決できます。

TCP MSS の主な問題は、フラグメンテーションの発生を回避するために、ルータ上に設定する値を管理者が認識する必要がある点です。 ユーザとリモート VPN の場所の間に複数のパスが存在する場合はこれが問題となる可能性があり、最初のクエリーを実行すると、1 番小さな最大伝送ユニットではなく、2 番目または 3 番目に小さな最大伝送ユニットが最初のクエリー内部のルーティング決定に基づいていることがわかります。 PMTUD を使用すると、フラグメンテーションを回避する IP パケットの最大伝送ユニット値を設定できます。 ICMP メッセージがルータによってブロックされる場合、パス MTU が破損しており、DF ビットが設定されているパケットが廃棄されます。 DF ビットをクリアして、パケットのフラグメント化と送信を許可するには、set ip df コマンドを使用します。 フラグメンテーションによってネットワーク上でのパケット転送の速度が低下する可能性がありますが、DF ビットがクリアされるパケットの数を制限するためにアクセス リストを使用できます。

  1. 次の 3 つの問題が原因で、PMTUD が機能しないことがあります。

    • 中継ルータではパケットの廃棄は可能であるが、ICMP メッセージを返さない。 これはインターネット上ではあまり一般的ではありませんが、ルータが ICMP 到達不能メッセージを返さないように設定されているネットワーク内部では一般的である場合があります。

    • 中継ルータでは ICMP 到達不能メッセージを返すことができるが、リターン フローではこのメッセージがファイアウォールによってブロックされる。 これは、より頻繁に発生します。

    • ICMP 到達不能メッセージは発信元に戻るが、発信元ではフラグメンテーション メッセージが無視される。 これは 3 つの問題の中では最も一般的ではありません。

    1 番目の問題が発生する場合、発信元によって配置された IP ヘッダー内の DF ビットをクリアするか、手動で TCP MSS サイズを調整することができます。 DF ビットをクリアするために、中間ルータは 1 から 0 に値を変更しなければなりません。普通これがパケットの前のネットワークのルータによって残すネットワークをされる。 IOS ベースのルータ上でこれを実行する簡単なコード設定を次に示します。

    Router (config) # access-list ACL_# permit tcp any any
    Router (config) # route-map route_map_name permit seq#
    
    Router (config-route-map) # match ip address ACL_#
    
    Router (config-route-map) # set ip df 0
    
    Router (config-route-map) # exit
    Router (config) # interface type [slot#/]port #
    
    Router (config-if) # ip policy router-map route_map_name
    
    
  2. PMTUD トンネルと GRE トンネル

    • デフォルトでは、ルータはルータ自体が生成する GRE トンネル パケットに対して PMTUD を実行しません。 GRE トンネル インターフェイスに対する PMTUD を有効にして、トンネルを通過するトラフィックの発信元と宛先のデバイスの MTU 調整プロセスにルータを参加させるには、次の設定を使用します。

      • Router (config) # interface tunnel tunnel_#

      • Router (config-if) # tunnel path-mtu-discovery

        tunnel path-mtu-discovery コマンドを使用すると、ルータの GRE トンネル インターフェイスで PMTUD が有効になります。 オプションの age-timer パラメータでは、(GRE ヘッダーの 24 バイトを差し引いた)検出された最大 MTU サイズのリセットをトンネル インターフェイスが開始するまでの分数を指定します。 タイマーに infinite を指定すると、タイマーは使用されません。 min-mtu パラメータでは、最大伝送ユニット値を構成する最小バイト数が指定されます。

  3. PIX/ASA 7.x:Don't Fragment(DF)または大規模なファイルやパケットの処理のクリア

    この最大伝送ユニット サイズのエラー メッセージが表示されるため、インターネット、大規模なファイル、またはアプリケーションにトンネルを経由して適切にアクセスすることができない場合があります。

    PMTU-D packet 1440 bytes greater than effective mtu 1434,
     dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
    

    この問題を解決するには、デバイスの外部インターフェイスから DF ビットを確実にクリアします。 グローバル コンフィギュレーション モードで crypto ipsec df-bit コマンドを使用して、IP セキュリティ パケットの DF ビット ポリシーを設定します。

    pix(config)# crypto ipsec df-bit clear-df outside
    

    IP セキュリティ トンネル機能を使用した DF ビットによって、カプセル化されたヘッダーからの Don't Fragment (DF) ビットをセキュリティ アプライアンスでクリア、設定、またはコピーできるかどうかを指定することができます。 IP ヘッダー内部の DF ビットによって、デバイスによるパケットのフラグメント化が許可されるかどうかが判断されます。

    カプセル化されたヘッダー内で DF ビットを指定するようにセキュリティ アプライアンスを設定するには、グローバル コンフィギュレーション モードで crypto ipsec df-bit コマンドを使用します。

    トンネル モード IP セキュリティ トラフィックをカプセル化する際に、DF ビットの clear-df 設定を使用します。 この設定を使用すると、使用可能な最大伝送ユニットのサイズを超えるパケットをデバイスで送信できます。 この設定は、使用可能な最大伝送ユニットのサイズが不明な場合にも適しています。

フラグメンテーションの問題が引き続き発生し、パケットが廃棄される場合、オプションとして、ip mtu tunnel interface コマンドを使用して手動で最大伝送ユニットのサイズを調整できます。 この場合は、ルータによってパケットが保護される前にフラグメント化されます。 このコマンドは、PMTUD や TCP MSS と組み合せても使用可能です。

確認

現在、この設定に使用できる確認手順はありません。

Output Interpreter Tool(OIT)(登録ユーザ専用)では、特定の show コマンドがサポートされています。 OIT を使用して、show コマンド出力の解析を表示できます。

トラブルシューティング

VPN 暗号化エラー

IP セキュリティ トンネルがルータと PIX 間に確立されたと仮定します。 パケットが廃棄されたことを示す暗号化エラー メッセージが表示される場合、次の手順を実行して問題を解決します。

  1. クライアントからサーバ側にスニファ トレースを実行して、どちらが使用に最適な最大伝送ユニットであるのかを判断します。

    ping テストも使用できます。

    ping  -l   1400  192.168.1.1 -f
    

    192.168.1.1 はリモート マシンの IP アドレスです。

  2. 応答が発生するまで、1400 の値を 20 ずつ下げていきます。

    大部分のインスタンスで機能する、効果的な値は 1300 です。

  3. 適切な最大セグメント サイズが判明したら、使用するデバイス用に適当に調整します。

    PIX ファイアウォール上で、次のコマンドを発行します。

    sysopt connection tcpmss 1300 
    

    ルータ側:

    ip tcp adjust-mss 1300
    

RDP と Citrix の問題

問題:

VPN ネットワーク間で ping を実行できますが、Remote Desktop Protocol(RDP)と Citrix の接続がトンネルを介して確立できません。

解決策:

問題は、PIX/ASA の背後にある PC 上の最大伝送ユニットのサイズである可能性があります。 クライアント マシンの最大伝送ユニット サイズを 1300 に設定して、VPN トンネルを介した Citrix 接続の確立を試してみます。


関連情報


Document ID: 82444