GRE
GRE(Generic Routing Encapsulation)は、標準的な三层トンネル技術であり、ポイントツーポイント方式のトンネル技術です。
この技術により、異なるネットワーク間での安全な通信が可能になります。
例えば、この技術を使用して、会社Aとその支店A1間の通信を実現するための専用回線を構築できます。この場合、二重IPヘッダーを使用します。
通常、この技術はデバイスのエッジでVPNとして利用されます。
トンネル作成時には、トンネル両端のデバイスが相互に通信可能であることを確認する必要があります。両端のIPアドレスは同じサブネット内にあっても、別のサブネット内にあっても構いません。
異なるサブネットの場合、静的ルーティングのみでプライベートネットワーク間の通信を可能にする必要があります。一方、同一サブネットでは動的ルーティングにより通信が可能です。
GREプロトコル番号は47です。
設定例:
AR3:
[r1]interface Tunnel 0/0/0 ---- トンネルインターフェースを作成
[r1-Tunnel0/0/0]ip address 10.1.1.1 24 ---- トンネルにIPアドレスを割り当て
[r1-Tunnel0/0/0]tunnel-protocol ? ---- トンネルモードを選択:GREモード
gre Generic Routing Encapsulation
ipsec IPSEC Encapsulation
ipv4-ipv6 IP over IPv6 encapsulation
ipv6-ipv4 IPv6 over IP encapsulation
mpls MPLS Encapsulation
none Null Encapsulation
[r1-Tunnel0/0/0]tunnel-protocol gre
[r1-Tunnel0/0/0]source 12.1.1.1 ----- トンネルの送信元IP(ローカル端末のインターフェースIP)
[r1-Tunnel0/0/0]destination 23.1.1.2 ----- トンネルの宛先IP(リモート端末のインターフェースIP)
トンネルの一意性は送信元IPと宛先IPによって識別されます。
AR5:
[r3]interface Tunnel 0/0/1
[r3-Tunnel0/0/1]ip address 10.1.1.2 24
[r3-Tunnel0/0/1]tunnel-protocol gre
[r3-Tunnel0/0/1]source 23.1.1.2
[r3-Tunnel0/0/1]destination 12.1.1.1
Ciscoでは、トンネルの一意性は送信元IP、宛先IP、およびkeyIDによって決定されます。つまり、両端で複数のトンネルを同時に作成することが可能です。
GREデータパケット
このパケットには二重IPヘッダーが含まれており、Typeフィールドは上位層で使用されているプロトコルを示します。0800はIPv4を使用していることを意味します。
GREの欠点:GREはポイントツーポイント方式のため、各トンネルには一意の送信元と宛先が必要です。トンネル数が多くなると管理が困難になります。
MGRE
MGRE(Multi-Point Generic Routing Encapsulation)は、マルチポイント対応のGREプロトコルです。
MGREでは送信元のみを定義し、宛先は定義しません。しかし、実際には宛先を知る必要があります。そのため、NHRP(Next Hop Resolution Protocol)を活用します。
NHRPプロトコル
NHRP(Next Hop Resolution Protocol)は、ARPに類似したプロトコルです。すべてのトンネルインターフェース上で動作します。
NHRPサーバーを設定すると、すべてのクライアントはそのサーバーを認識します。その後、各クライアントは自身のトンネルインターフェースIPと物理IP情報をNHRP登録メッセージに含めてNHRPサーバーに送信し、登録を行います。NHRPサーバーは手動で指定します。
MGREインターフェースは自身のMGREインターフェースIPと対応するトンネルインターフェース情報をNHS(NHRP Server)に登録します。NHSには全MGREインターフェースのマッピング情報が保持されています。他のMGREインターフェース間の通信時はNHSから宛先アドレスを取得し、トンネルを確立します。
MGREの設定例:
NHRPサーバー側:
[r1]interface Tunnel 0/0/0
[r1-Tunnel0/0/0]tunnel-protocol gre p2mp ----- GREをポイントツーマルチポイントモードに設定
[r1-Tunnel0/0/0]ip address 10.1.1.1 24
[r1-Tunnel0/0/0]source 12.1.1.1 ----- 送信元IPを設定
[r1-Tunnel0/0/0]nhrp network-id 100 ----- NHRP IDを設定(NHRPサーバーを一意に識別)
クライアント側:
[r3]interface Tunnel 0/0/0
[r3-Tunnel0/0/0]tunnel-protocol gre p2mp ----- GREをポイントツーマルチポイントモードに設定
[r3-Tunnel0/0/0]ip address 10.1.1.2 24
[r3-Tunnel0/0/0]source 23.1.1.1 ------ 送信元IPを設定
[r3-Tunnel0/0/0]nhrp network-id 100 ------ NHRP IDを設定(グローバルに一意)
[r3-Tunnel0/0/0]nhrp entry 10.1.1.1 12.1.1.1 register ----- NHRPサーバーへの登録。10.1.1.1はサーバーのトンネルIP、12.1.1.1は物理IP。
[r1]display nhrp peer all ---------- NHRPの全ピア情報を表示
トンネル構築後、A、A1、A2でRIPを有効化し、他サイトのルート情報を学習できるか確認します。
RIPを有効化すると、AR1のみが他サイトのルート情報を学習し、AR3やAR4は学習できません。
これはHub-Spoke構造のためです。A1/A2はルート送信時に自身のトンネルIPと物理IPを送信元として、224.0.0.9(マルチキャスト)宛てに送信します。AR1がハブ側であるため、この送信はAR1のみに届きます。このネットワークタイプは非ブロードキャストマルチアクセス(NBMA)です。
このため、NHRPサーバー(AR1)で疑似ブロードキャスト機能を有効にする必要があります。
疑似ブロードキャスト:動的に学習されたルートをNHRP内の各サイトに配信します。
[r1-Tunnel0/0/0]nhrp entry multicast dynamic ------ 疑似ブロードキャストを有効化 [r1-Tunnel0/0/0]undo rip split-horizon ----- 水平分割を無効化
疑似ブロードキャストを有効化しても、まだ1つのルートしか学習されません。これはRIPの水平分割機能によるものです。ハブサイト側で水平分割を無効化することで、すべてのサイトが全ルートを学習できるようになります。