GREトンネリングとは?| GREプロトコルの仕組み

総称ルーティングカプセル化(GRE)とは、直接ポイントツーポイントネットワーク接続を設定するために、あるデータパケットを別のデータパケット内にカプセル化するプロトコルのことです。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • GREとは何かを理解する
  • トンネリングの仕組みについて理解する
  • GREがネットワークプロセスに与える影響について理解する

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

GREとは?

総称ルーティングカプセル化(GRE)とは、一つのルーティングプロトコルを使用するデータパケットを別のプロトコルのパケット内でカプセル化するためのプロトコルのことです。「カプセル化」は、箱の内にもうひとつ別の箱を入れるように、あるデータパケットが別のデータパケットを内包することを意味します。GREは、個別のネットワーク間の接続を簡素化するために、ネットワーク全体で直接ポイントツーポイント接続を設定する方法の1つです。これは、さまざまなネットワーク層プロトコルで機能します。

カプセル化されたパケット - 非対応パケット内のネットワーク対応パケット

GREは、通常、ネットワークでサポートされていないプロトコルの使用を可能にします。これらのパケットを、サポートされているプロトコルを使用する他のパケットに内包するためです。この仕組みを理解するために、車とフェリーの違いを例に考えてみてください。車は陸上にある道路を移動し、フェリーは水の上を移動します。通常、車は水上を移動できません。ただし、水上を移動するために、車をフェリーに積み込むことはできます。

この類推では、活動領域(陸上/水上)を特定のルーティングプロトコルをサポートするネットワークに、車両(車/フェリー)をデータパケットに例えています。GREは、ある種のパケットを別種のパケット内に読み込む方法です。これは、ある種の車両(車)が別種の車両(フェリー)に乗せられ、自力ではできなかった水上を横断できるようになるのと同じように、最初のパケットが通常は交差できないネットワークを通過できるようにすることです。

たとえば、ある会社が2つの異なるオフィスのローカルエリアネットワーク (LAN) 間に接続を設定する必要があるとします。どちらのLANも、最新バージョンのインターネットプロトコルであるIPv6を使用しています。しかし、あるオフィスネットワークから別のオフィスネットワークに移動するために、トラフィックが第三者が管理するネットワークを通過する必要があります。これはやや時代遅れで古いIPv4プロトコルしかサポートしていません。

しかしGREを使用すると、IPv6パケットをIPv4パケット内にカプセル化することによって、このネットワークを介してトラフィックを送信できるようになります。例えを振り返ると、IPv6パケットは車、IPv4パケットはフェリー、第三者ネットワークは水です。

GREトンネリングとはどういう意味か

他のパケット内にパケットをカプセル化することを「トンネリング」と呼びます。GREトンネルは通常、2つのルーター間で設定され、各ルーターはトンネルの片方の端のようなものです。ルーターは、GREパケットを相互に直接送受信するように設定されています。これら2つのルータの間にあるどのルーターも、カプセル化されたパケットを開くことはありません。これらはカプセル化されたパケットを囲むヘッダーのみを参照し、転送します。

なぜこれが「トンネリング」と呼ばれるのかを理解するために、例を少し変えて説明しましょう。車が山の片側のA地点から山の向こう側のB地点に到達する必要がある場合、最も効率的な方法は、シンプルに山を貫通してしまうことです。しかし、普通の車では堅い岩を貫通して進むことはできません。ですから、車がA地点からB地点に到達するためには、山の周りをわざわざ迂回する必要があります。

しかし、トンネルが山を通って作られたと想像してみてください。今、車はA地点からB地点まで直進することができます。これははるかに高速で、トンネルが開通していなければ、なし得なかったことです。

ここで、A地点をネットワークデバイス、B地点を別のネットワークデバイス、山を2つのデバイス間のネットワーク、車をA地点からB地点に移動する必要があるデータパケットだと考えてください。このネットワークは、A地点とB地点のデバイスが必要とするデータパケットの種類をサポートしていないとします。山を通過しようとする車のように、データパケットは通過できないため、追加のネットワークを介して迂回するためにはるかに長い時間が必要になるかもしれません。

しかし、GREは、データパケットが通過できるように、「山」ネットワークを通る仮想「トンネル」を作成します。トンネルによって自動車が陸地を直進する方法がつくられるのと同様に、GRE(およびその他のトンネリングプロトコル)では、データパケットがサポートされていないネットワークを通過する手段がつくられます。

GREヘッダーには何が入っていますか?

ネットワークを介して送信されるすべてのデータは、パケットと呼ばれる小さな断片に分割され、すべてのパケットには、ペイロードとヘッダーの2つの部分があります。ペイロードは、パケットの実際の内容であり、送信されるデータです。ヘッダーには、パケットの送信元とパケットが属するグループの情報が含まれます。各ネットワークプロトコルは、各パケットにヘッダーを付加します。

GREは各パケットに2つのヘッダーを追加します。つまり、4バイト長のGREヘッダーと20バイト長のIPヘッダーです。GREヘッダーは、カプセル化されたパケットで使用されるプロトコルタイプを示します。IPヘッダーは、元のパケットのヘッダーとペイロードをカプセル化します。つまり、GREパケットには通常、2つのIPヘッダーがあります。1つは元のパケット用で、もう1つはGREプロトコルによって追加されます。GREトンネルの両端のルーターだけが、元の非GRE IPヘッダーを参照します。

GREの使用はMTUとMSSの要件にどのような影響を与えるか

MTUMSS は、橋を渡る自動車の重量制限と同様に、ネットワーク上を移動するデータパケットのサイズを制限する測定値です。MTUは、ヘッダーを含むパケットの合計サイズを測定し、MSSはペイロードのみを測定します。MTUを超えるパケットは、ネットワークを介して収まるように、断片化(小さな断片に分割)されます。

他のプロトコルと同様に、GREを使用すると、データパケットのサイズに数バイトが追加されます。これは、パケットのMSSとMTU設定に加える必要があります。MTUが1,500バイトで、MSSが1,460バイトの場合(必要なIPヘッダーと TCPヘッダーのサイズを考慮して)、GRE24バイトヘッダーを追加すると、パケットは MTUを超過します:

1,460バイト [ペイロード] + 20バイト [TCPヘッダー] + 20バイト [IPヘッダー] + 24バイト [GREヘッダー + IPヘッダー] = 1,524バイト

その結果、パケットが断片化されます。MTUを超えるパケットは分解して再構成する必要があるため、断片化によってパケットの配信時間が遅くなり、消費演算能力が増加します。

これは、GREヘッダーに対応するためにMSSを減らすことによって回避できます。MSSが1,460ではなく1,436に設定されている場合、GREヘッダーが考慮され、パケットはMTUの1,500を超えません:

1,436バイト [ペイロード] + 20バイト [TCPヘッダー] + 20 バイト [IPヘッダー] + 24バイト [GREヘッダー + IPヘッダー] = 1,500バイト

断片化は回避されますが、その結果、ペイロードはわずかに小さくなり、データを配信するために余分なパケットが必要になります。たとえば、15万バイト(または約150KB)のコンテンツを配信することが目標であり、MTUが1,500に設定されていて、他の第3層プロトコルが使用されていない場合の、GRE 使用時と非使用時に必要なパケット数を比較してみます。

  • GREを使用しない場合、MSS1,460: 103パケット
  • GREを使用する場合、MSS1,436: 105パケット

余分な2つのパケットは、データ転送に数ミリ秒の遅延を加えます。ただし、GREの使用により、これらのパケットはそれ以外の場合よりも高速なネットワークパスを通過できるため、損失時間を削減できます。

GREはDDoS攻撃でどのように使用されるか

分散型サービス拒否(DDoS)攻撃では、攻撃者は標的のサーバーやネットワークを迷惑ネットワークトラフィックで制圧しようとします。これは、正規のお客様にサービスを提供できなくなるまで、偽のデリバリー注文でレストランを集中砲撃するようなものです。

GREは、他のネットワークプロトコルと同様にDDoS攻撃を実行するために使用できます。過去最大のDDoS攻撃の1つは2016年9月に発生しています。セキュリティ研究者のWebサイトが狙われ、Miraiボットネットを使用して実行されました。Webサイトは、GREプロトコル使用のパケットで制圧されていました。

他のプロトコルとは異なり、GREパケットでは送信元を偽造したり、スプーフィングしたりすることはできません。(これに該当しないプロトコルの例については、SYNフラッドDNS増幅攻撃に関する記事を参照してください。)大規模なGRE DDoS攻撃を実行するには、攻撃者はボットネットで実際のコンピューティングデバイスを大量に制御する必要があります。

CloudflareはGRE DDoS攻撃からどのように保護するか

Cloudflareは、GREを使用した攻撃を含め、あらゆる種類のネットワーク層DDoS攻撃から保護します。Cloudflare Magic Transitは、オンプレミス、クラウドハイブリッドネットワークを保護します。これはCloudflareのグローバルネットワークのDDoS対策機能をネットワークインフラストラクチャに拡張することによって行います。攻撃ネットワークトラフィックはすべて、正当なトラフィックの速度を低下させることなく、フィルタリングされます。

CloudflareはGREトンネリングをどのように使うか

Magic Transitがお客様のネットワークトラフィックを保護し、高速化するために、Cloudflareネットワークをお客様の内部ネットワークに安全に接続する必要があります。この目的のために、GREトンネリングは非常に有効です。Magic Transitは、GREトンネリングを使用して、パブリックインターネットを通って、直接Cloudflareのお客様のネットワークに安全に接続することができます。

Magic Transitは、Cloudflare Anycastネットワーク上に構築されています。つまり、どのCloudflareサーバーも単一のIPアドレスを使ってGREトンネルのエンドポイントとして機能することができるため、GREトンネル接続の単一障害点の問題を排除します(CloudflareもこのアプローチでMagic WANのお客様と接続しています)。Magic Transitの仕組みについての詳細はMagic Transitの製品ページをご覧ください。