【基本】GREトンネルの設定方法

GRE(Generic Routing Encapsulation)は、トンネリングのためのプロトコルです。トンネリングでは、あるパケットを別のパケットの中に入れて(カプセル化して)運びます。この記事では、Cisco ルータで GRE トンネルを作り、トンネルの上で OSPF を動かして、離れた2つのプライベートネットワークをつなぐまでを確認します。

この記事でわかること
  1. GRE におけるオーバーレイとアンダーレイの関係
  2. トンネルインタフェースの設定と、トンネルの状態の確認
  3. トンネルの上での OSPF の設定と、カプセル化されたパケットの確認

検証構成

端末A と端末B は、それぞれプライベートネットワーク(192.168.12.0/24、192.168.34.0/24)にあります。R2〜R5 の間は、インターネットに見立てたネットワーク(169.254.25.0/24、169.254.35.0/24)です。

GRE トンネルインターネットに見立てたネットワークR5169.254.25.0/24169.254.35.0/24.5.5.2.3192.168.12.0/24192.168.34.0/24.1.2.3.4端末A端末BR2R3Tunnel0192.168.235.2/24Tunnel0192.168.235.3/24
図1 検証構成

R5 は、プライベートネットワークへのルーティング情報を持っていません。そのため、このままでは端末A と端末B は通信できません。そこで、R2 と R3 の間に GRE トンネルを作り、その上に新しいネットワーク(オーバーレイネットワーク)を作ります。GRE トンネルは、2台のルータの間を1対1(ポイントツーポイント)で結びます。

補足

この検証では、インターネット側のアドレスとして 169.254.0.0/16 の範囲を使っています。この範囲はリンクローカル用のアドレス(RFC 3927)で、実際のインターネットでは使われません。検証用のアドレスとして読み替えてください。

GREにおけるオーバーレイとアンダーレイの整理

GRE トンネルを使うときは、ネットワークを2つの層に分けて考えるとわかりやすくなります。

層この記事のネットワーク役割
オーバーレイ192.168.235.0/24(トンネル)、192.168.12.0/24、192.168.34.0/24トンネルの上に作る論理的なネットワーク。端末どうしの通信が流れる
アンダーレイ169.254.25.0/24、169.254.35.0/24トンネルを運ぶ土台のネットワーク。カプセル化されたパケットが流れる
オーバーレイ(GRE トンネルの上)アンダーレイ(169.254.x.0/24)192.168.12.0/24192.168.34.0/24.2.3192.168.235.0/24R2R3169.254.25.0/24169.254.35.0/24.2.5.5.3R2R5R3R5 はオーバーレイからは見えない
図2 オーバーレイとアンダーレイ

オーバーレイネットワークから見ると、R2 と R3 は、あたかも 192.168.235.0/24 のスイッチに直接つながっているように見えます。間にある R5 は、オーバーレイネットワークからは見えません。

実際には、R2 は端末A からのパケットを GRE でカプセル化し、アンダーレイのアドレス(169.254.25.2 → 169.254.35.3)を付けた外側の IP ヘッダで送ります。R5 は外側の IP ヘッダだけを見て転送するので、プライベートネットワークの経路を知らなくても届けられます。R3 は外側のヘッダと GRE ヘッダを外し、元のパケットを端末B へ転送します。

元のパケット(端末A → 端末B)IP ヘッダ192.168.12.1 → 192.168.34.4ICMP(データ)100 バイトR2 が GRE でカプセル化したパケット外側の IP ヘッダ169.254.25.2 → 169.254.35.3GREIP ヘッダ192.168.12.1 → 192.168.34.4ICMP(データ)20 バイト4100 バイト合計124 バイトプロトコル番号 47(GRE)
図3 GRE によるカプセル化

GRE は、元のパケットに GRE ヘッダ(基本は4バイト)と外側の IP ヘッダ(20バイト)を付けます。外側の IP ヘッダのプロトコル番号は、GRE を表す 47 になります。

GREの設定

R2 と R3 の設定を確認します。

トンネルインタフェースの設定

GRE の基本設定は次のとおりです。オーバーレイネットワークに使うトンネルインタフェースを作り、アンダーレイネットワークでの送信元と宛先の IP アドレスを設定します。今回、トンネルインタフェースのアドレスは 192.168.235.0/24 にしています。

R2

R2(config)# interface Tunnel0
R2(config-if)# ip address 192.168.235.2 255.255.255.0
R2(config-if)# tunnel source 169.254.25.2
R2(config-if)# tunnel destination 169.254.35.3
R2(config-if)#!         
R2(config)# ip route 169.254.35.0 255.255.255.0 169.254.25.5

R3

R3(config)# interface Tunnel0
R3(config-if)# ip address 192.168.235.3 255.255.255.0
R3(config-if)# tunnel source 169.254.35.3
R3(config-if)# tunnel destination 169.254.25.2
R3(config-if)#!
R3(config)# ip route 169.254.25.0 255.255.255.0 169.254.35.5
コマンド意味
interface Tunnel0トンネルインタフェース Tunnel0 を作る
ip addressオーバーレイ側のアドレス(R2 は .2、R3 は .3)
tunnel sourceカプセル化したパケットの送信元になる、自分のアンダーレイ側のアドレス
tunnel destinationカプセル化したパケットの宛先になる、相手のアンダーレイ側のアドレス
ip route相手の tunnel destination に届くための、アンダーレイの経路

R2 の tunnel source が R3 の tunnel destination になり、R3 の tunnel source が R2 の tunnel destination になるよう、両端で逆に設定します。トンネルのモードは指定していないので、既定の GRE(GRE/IP)になります。

R2 と R3 の間でトンネルを作るには、アンダーレイネットワークでルータどうしが通信できる必要があります。今回は、スタティックルートで R2 と R3 がお互いのアンダーレイ側のアドレスに届くようにしています。

トンネルの状態の確認

トンネルインタフェースの状態を確認します。Tunnel0 is up, line protocol is up となっていれば、トンネルインタフェースはアップしています。

R2

R2# show interfaces tunnel 0
Tunnel0 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 192.168.235.2/24
  MTU 17916 bytes, BW 100 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 169.254.25.2, destination 169.254.35.3
  Tunnel protocol/transport GRE/IP

R3

R3# show interfaces tunnel 0
Tunnel0 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 192.168.235.3/24
  MTU 17916 bytes, BW 100 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 169.254.35.3, destination 169.254.25.2
  Tunnel protocol/transport GRE/IP
表示意味
Tunnel0 is up, line protocol is upトンネルインタフェースがアップしている
Internet addressオーバーレイ側のアドレス
BW 100 Kbit/secインタフェースの帯域幅の値。OSPF のコストの計算に使われる(STEP 4)
Keepalive not setGRE キープアライブを設定していない
Tunnel source / destinationアンダーレイでの送信元と宛先
Tunnel protocol/transport GRE/IPIP の上で GRE を使うトンネル
注意

キープアライブを設定していない GRE トンネルは、tunnel source のインタフェースがアップしていて、tunnel destination への経路があれば、相手のルータが止まっていてもアップのままになります。相手の状態をトンネルの状態に反映させたい場合は、トンネルインタフェースで keepalive を設定します(既定は10秒間隔、3回応答がなければダウン)。

オーバーレイネットワークができているか確認します。R2 から、R3 のトンネルインタフェースのアドレスに Ping を実行します。

R2

R2# ping 192.168.235.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.235.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/34/64 ms

192.168.235.3 に Ping が届いているので、オーバーレイネットワークで R2 と R3 が通信できています。

オーバーレイネットワーク上でのルーティング設定

端末A と端末B が通信できるよう、R2 と R3 で OSPF を設定します。OSPF に入れるのは、オーバーレイ側のネットワーク(両方の LAN とトンネル)です。

OSPF area 0Tunnel0192.168.12.0/24192.168.34.0/24192.168.235.0/24R2R3端末A端末BOSPF のパケットもトンネルの中を通るアンダーレイ(169.254.x.0/24)は OSPF に入れず、スタティックルートで到達させる
図4 オーバーレイネットワークでの OSPF

OSPFの設定

R2

R2(config)# router ospf 1
R2(config-router)# network 192.168.12.0 0.0.0.255 area 0
R2(config-router)# network 192.168.235.0 0.0.0.255 area 0

R3

R3(config)# router ospf 1
R3(config-router)# network 192.168.34.0 0.0.0.255 area 0
R3(config-router)# network 192.168.235.0 0.0.0.255 area 0

トンネルインタフェースのネットワーク(192.168.235.0/24)を OSPF に入れると、R2 と R3 はトンネルの中で OSPF のネイバーになり、お互いの LAN の経路を交換します。アンダーレイのネットワーク(169.254.x.0/24)は OSPF に入れません(下の「うまくいかないとき」)。

ルーティングテーブルの確認

R2 と R3 のルーティングテーブルを確認します。

R2

R2#show ip route ospf
O     192.168.34.0/24 [110/1001] via 192.168.235.3, 01:05:23, Tunnel0

R3

R3#show ip route ospf
O     192.168.12.0/24 [110/1001] via 192.168.235.2, 01:06:51, Tunnel0
表示意味
OOSPF で学習した経路
[110/1001]アドミニストレーティブディスタンス 110(OSPF)と、メトリック(コスト)1001
via 192.168.235.3ネクストホップは、相手のトンネルインタフェースのアドレス
Tunnel0出力インタフェースはトンネル。オーバーレイネットワークを経由する

R2 では、192.168.34.0/24 の出力インタフェースが Tunnel0 になっていて、オーバーレイネットワークを経由することがわかります。コストの 1001 は、トンネルのコスト 1000(参照帯域幅の既定 100 Mbps ÷ トンネルの帯域幅 100 Kbit/sec)に、相手側の LAN のコスト 1 を足した値と読めます。トンネルが複数あって経路を選ばせたい場合は、トンネルインタフェースの bandwidth や ip ospf cost でコストを調整します。

疎通とカプセル化の確認

端末A(Cisco デバイス)から端末B に Ping を実行します。

端末A

PC1#ping 192.168.34.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/59/76 ms

traceroute を実行すると、オーバーレイネットワークを経由していることがわかります。2番目のホップは R3 のトンネルインタフェースのアドレスで、アンダーレイネットワークのアドレス(R5)は見えません。

端末A

PC1#traceroute 192.168.34.4
Type escape sequence to abort.
Tracing the route to 192.168.34.4
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.12.2 12 msec 16 msec 4 msec
  2 192.168.235.3 12 msec 28 msec 28 msec
  3 192.168.34.4 60 msec 12 msec 72 msec

R5 で端末A から端末B への通信をパケットキャプチャすると、アンダーレイネットワークのアドレスでカプセル化されていることがわかります。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark、R5 で取得)画面イメージ
▸ Ethernet II, Src: 00:00:00_00:55:55 (00:00:00:00:55:55), Dst: 00:00:00_00:33:33 (00:00:00:00:33:33)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 351▾ Internet Protocol Version 4, Src: 169.254.25.2, Dst: 169.254.35.3    0100 .... = Version: 4    .... 0101 = Header Length: 20 bytes (5)  ▸ Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)2    Total Length: 124    Identification: 0x01d9 (473)  ▸ Flags: 0x0000    Fragment offset: 0    Time to live: 2543    Protocol: Generic Routing Encapsulation (47)    Header checksum: 0x2a78 [validation disabled]    [Header checksum status: Unverified]    Source: 169.254.25.2    Destination: 169.254.35.34▸ Generic Routing Encapsulation (IP)5▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 192.168.34.4▸ Internet Control Message Protocol
図5 R5 でキャプチャした端末A から端末B へのパケット(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Src: 169.254.25.2, Dst: 169.254.35.3外側の IP ヘッダ。アンダーレイのアドレス(R2 の tunnel source と tunnel destination)
2Total Length: 124外側の IP パケットの長さ。元のパケット 100 バイトに、GRE ヘッダ 4 バイトと外側の IP ヘッダ 20 バイトが加わっている
3Protocol: Generic Routing Encapsulation (47)外側の IP ヘッダの次に GRE ヘッダが続く(プロトコル番号 47)
4Generic Routing Encapsulation (IP)GRE ヘッダ。中に入っているのが IP パケットであることを示す
5Src: 192.168.12.1, Dst: 192.168.34.4内側(元)の IP ヘッダ。オーバーレイのアドレス(端末A から端末B)

R5 は外側の IP ヘッダ(169.254.25.2 → 169.254.35.3)だけを見て転送しています。内側のプライベートアドレスは GRE の中に入っているので、R5 がプライベートネットワークの経路を知らなくても通信できます。

GRE は暗号化しない

キャプチャで内側の IP ヘッダがそのまま読めるように、GRE はカプセル化するだけで、暗号化はしません。インターネットを経由して拠点をつなぐ場合は、GRE と IPsec を組み合わせて(GRE over IPsec)暗号化するのが一般的です。IPsec の設定は 【IPSec】サイト間IPSec(Crypto-Map) で説明しています。

うまくいかないとき

状態よくある原因確認すること
Tunnel0 の line protocol が downtunnel source のインタフェースがダウンしている、tunnel destination への経路がないshow ip interface brief、show ip route で宛先への経路があるか
トンネルはアップだが通信できない相手のルータが止まっている、相手側の tunnel source/tunnel destination が合っていない(キープアライブがないと、トンネルはアップのまま)相手側の設定、アンダーレイで相手の tunnel source に Ping が届くか
トンネルがアップとダウンを繰り返す(%TUN-5-RECURDOWN)トンネルの宛先への経路を、トンネル自身を経由して学習している(再帰ルーティング)アンダーレイのネットワークをトンネル上の OSPF に入れていないか
Ping は通るが、大きなパケットだけ通らないGRE のヘッダ(24 バイト)の分、運べるパケットが小さくなる(GRE の IP MTU は 1500 − 24 = 1476 が目安)トンネルインタフェースの ip mtu、TCP なら ip tcp adjust-mss
OSPF のネイバーができないトンネルのネットワークを OSPF に入れていない、エリアが違うshow ip ospf neighbor、network コマンドの範囲

まとめ

項目ポイント
GREパケットを別の IP パケットの中に入れて運ぶトンネリングのプロトコル(プロトコル番号 47)。暗号化はしない
オーバーレイトンネルの上の論理的なネットワーク。R2 と R3 が直接つながっているように見える
アンダーレイトンネルを運ぶネットワーク。中継する R5 は外側の IP ヘッダだけを見て転送する
トンネルの設定interface Tunnel0 にオーバーレイのアドレス、tunnel source と tunnel destination にアンダーレイのアドレスを設定する(両端で逆)
アンダーレイの経路相手の tunnel destination へ届く経路が必要(今回はスタティックルート)
オーバーレイのルーティングトンネルと LAN のネットワークを OSPF に入れる。アンダーレイのネットワークは入れない

 

コメント