IP : 総称ルーティング カプセル化(GRE)

GRE トンネルを使用しているときにインターネットをブラウズできない理由

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


目次


概要

トラフィックが Generic Routing Encapsulation(GRE; 総称ルーティング カプセル化)トンネルを経由する場合に、Ping コマンドや Telnet は正しく使用できるのに、インターネットのページのダウンロードや File Transfer Protocol(FTP; ファイル転送プロトコル)を使用したファイル転送が行えないことがあります。 この文書では、この問題に共通する原因と、いくつかの回避策について説明します。

前提条件

要件

この文書は、GRE の基本的な理解を必要とします。 GRE について詳細を学ぶためにこれらの文書を参照して下さい:

使用するコンポーネント

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

このドキュメントで使用されているコマンドの詳細を調べるには、Command Lookup Tool登録ユーザ専用)を使用してください。

表記法

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

パケットのフラグメント化と ICMP メッセージ

この資料はこのネットワークダイアグラムを一例として使用します:

/image/gif/paws/13725/56a.gif

上記の図では、クライアントからインターネット上のページへのアクセスが要求されると、Web サーバとの間に TCP セッションが確立されます。 このプロセスの間、クライアントと Web サーバ間ではそれぞれの Maximum Segment Size(MSS; 最大セグメント サイズ)が通知されます。これにより、TCP セグメントを受け入れられる最大サイズが互いに提示されます。 この MSS オプションを受け取ると、各デバイスでは送信できるセグメントのサイズが計算されます。 このサイズは Send Max Segment Size(SMSS; 最大送信セグメント サイズ)と呼ばれ、この 2 つの MSS の小さい方のサイズになります。 TCP の最大セグメント サイズについては、「RFC 879 」を参照してください。leavingcisco.com

説明の都合上、上記の例にある Web サーバは、1500 バイトの長さでパケットを送信できると決定したとします。 したがって、サーバはクライアントに対して 1500 バイトのパケットを送信します。そのパケットの IP ヘッダーには、「フラグメントなし」(DF)のビットが設定されています。 パケットが R2 に到着すると、このルータではパケットをトンネル パケットにカプセル化しようとします。 GRE のトンネル インターフェイスの場合、IP の Maximum Transmission Unit(MTU; 最大伝送ユニット)は、実際の発信インターフェイスの IP MTU より 24 バイト小さくなります。 イーサネットの発信インターフェイスの場合では、トンネル インターフェイスでの IP MTU は、1500 - 24、つまり 1476 バイトになります。

R2 では、1500 バイトの IP パケットを 1476 バイトの IP MTU インターフェイスに送信しようとします。 これは不可能であるため、R2 ではそのパケットをフラグメント化する必要があり、1476 バイトのパケット 1 つ(データと IP ヘッダー)と、44 バイトのパケット 1 つ(24 バイトのデータと、新しい IP ヘッダー分の 20 バイト)が生成されます。 R2、そして GRE では、両方のパケットをカプセル化し、1500 バイトと 68 バイトのパケットが個別に受け取られるようにします。 そして、これらのパケットが実際の発信インターフェイスから発信されます。このインターフェイスは 1500 バイトの IP MTU を備えています。

しかし、R2 で受信されたパケットには DF ビットが設定されていたことを思い出してください。 したがって、R2 ではそのパケットをフラグメント化できないため、Web サーバに対してより小さなパケットを送るように指示する必要があります。 それはインターネット制御メッセージ プロトコル (ICMP)型 3 コード 4 パケット(到達不能 宛先の送信によってこれをします; 設定 するのに必要とされるフラグメンテーションおよび DF)。 この ICMP メッセージには、Web サーバで使用される正確な MTU が含まれています。Web サーバはこのメッセージを受け取り、これに応じて正しいパケット サイズに調整する必要があります。

debug コマンドを使用する前に、『debug コマンドの重要な情報』を参照してください。

debug ip icmp コマンドを有効に することによる R2 によって送信 される ICMP メッセージを表示できます:

ICMP: dst (10.10.10.10) frag. needed and DF set unreachable sent to 10.1.3.4

ブロックされた ICMP メッセージ

ICMP メッセージが Web サーバへの経路上でブロックされると、問題が発生します。 これが起こるとき、ICMPパケットは決してそれによりクライアント および サーバ間の通過からデータを防ぐ Webサーバに、到着しません。

解決策

この 4 つのソリューションの 1 つは問題を解決する必要があります:

  • 経路上のどこで ICMP メッセージがブロックされたかを突き止め、それが容認できるかどうかを判断します。

  • より小さいために SMSS を強制する 1476 バイトにクライアントのネットワーク インターフェイスの MTU を設定 して下さいそうすれば R2 に達する場合パケットはフラグメント化する必要がありません。 しかし、クライアントの MTU を変える場合は、そのクライアントとネットワークを共有しているすべてのデバイスの MTU も変更する必要があります。 イーサネットのセグメントでは、このデバイスの数が膨大になる場合があります。

  • R2 とゲートウェイ ルータとの間にプロキシサーバ(あるいは、Web キャッシュ エンジン)を設置し、そのプロキシサーバがすべてのインターネット ページに対して要求を出すようにします。

  • 1500 バイトにトンネル ヘッダーを加えたよりも MTU が大きいリンク上で GRE トンネルが実行されている場合、もう 1 つの解決法は、GRE のエンドポイント ルータ間にあるすべてのインターフェイスとリンクに対して、MTU を 1524(1500 に GRE のオーバーヘッドとして 24 を加えたもの)に増やすことです。

その他の解決方法

上記のオプションが実行不可能ならこれらのオプションは役立ちます:

  • データ IPパケットの DF ビットを使用して下さい(Cisco IOS で利用可能 なクリアし、設定 するのにポリシー ルーティングをか。 ソフトウェアリリース 12.1(6) およびそれ以降)。

    interface ethernet0 
     ... 
     ip policy route-map clear-df 
     
    !--- This command is used to identify a route map
     
     
    !--- to use for policy routing on an interface,
     
     
    !--- use the ip policy route-map command in
     
     
    !--- interface configuration mode.
     
    
    route-map clear-df permit 10 
     match ip address 101 
     set ip df 0
     
    !--- This command is used to change the Don't Fragment (DF)
     
     
    !--- bit value in the IP header, use this command
     
     
    !--- in route-map configuration mode.
    
    
    access-list 101 permit tcp 10.1.3.0 0.0.0.255 any

    この設定により、データ IP パケットを GRE カプセル化の前にフラグメント化できます。 受信側のエンド ホストでは、このデータ IP パケットを再構成する必要があります。 これは通常は問題にはなりません。

  • ルータを通過する SYN パケットの TCP MSS オプションの値を変更します(IOS 12.2(4)T 以降で使用可能)。 これにより、TCP SYN パケットでの MSS オプションの値が小さくなり、ip tcp adjust-mss value コマンドでの値よりも小さくなります。この場合、1436(MTU から IP ヘッダー、TCP ヘッダー、および GRE ヘッダーのサイズを引いた値) になります。 これで、エンド ホストはこの値より大きい TCP/IP パケットを送信しなくなります。

    interface tunnel0 
     ... 
     ip tcp adjust-mss 1436
     
    !--- This command is used to adjust the maximum segment size (MSS)
    
     
    !--- value of TCP SYN packets going through the router.
    
     
    !--- The maximum segment size is in the range from 500 to 1460.
    
    
  • 最終的なオプションは 1500 へトンネルインターフェイスの IP MTU を増加することです(IOS 12.0 および それ以降で利用可能)。 しかし、トンネル IP MTU が増加すると、トンネル パケットがフラグメント化されます。元のパケットの DF ビットがトンネル パケットのヘッダーにコピーされないからです。 このシナリオでは、GRE トンネルの他の終端にあるルータで、GRE ヘッダーを削除して内部のパケットに転送する前に、GRE パケットを再構成する必要があります。 IP パケットの再構成は、プロセス交換モードで行われ、メモリを使用します。 したがって、この選択肢を使用すると、GRE トンネルでのパケットのスループットが著しく低下する場合があります。

    interface tunnel0
       ...  
    ip mtu 1500
    
    !--- This command is used to set the maximum transmission unit (MTU)
    
    
    !--- size of IP packets sent on an interface. The minimum size
     
    
    !--- you can configure is 128 bytes; the maximum depends on the interface medium.
    
    

結論として、GRE トンネルを介してインターネットをブラウズできない最も一般的な原因は、上記で述べたフラグメントの問題です。 解決策は、上記のいずれかの方法を使用して、ICMP パケットを容認すること、あるいは ICMP 問題を回避することです。


関連情報


Document ID: 13725