【ネットワーク入門】GRE(Generic Routing Encapsulation)について

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

今回は、GRE(Generic Routing Encapsulation)について復習かつ実機確認してみたのでまとめていきたいと思います。

GREとは

GRE(Generic Routing Encapsulation)とはトンネルプロトコルの1つとなります。

トンネルプロトコルには、L2のL2FやPPTP、L2TPなどがあり、L3ではGRE、IPsec等あります。

GREは、暗号化機能を備えていないため、データそのものの安全性は担保されていません。

しかし、その性質を使ったルーティングが必要な場合や様々なルーティングプロトコルやマルチキャストを利用したルーティングプロトコルが利用可能なため、使われているプロトコルとなります。

GREのヘッダは、基本的なIPヘッダに対してGREに関するヘッダを追加しているものになります。

PayLoad
PayLoad
Original IP
Original IP
GRE Flags
GRE Flags
GRE IP
GRE IP
Text is not SVG – cannot display

GREの設定方法

IOSのGRE設定方法の一般的な流れは、主に4ステップあります。(オプションを含めると7ステップ)

STEP
トンネルIFの作成
(config)# interface tunnel <トンネル番号>
STEP
Sourceの指定
(config-if)# tunnel source <IPアドレス|IF名>

この設定はGREでEncapsulationやDecapsulationを実施したいIF(物理IFやLoopback)のIPアドレスやIFを直接指定します。

STEP
Destinationの指定
(config-if)# tunnel destination <IPアドレス>

ここではSourceの指定同様にEncap/DecapしたいIFに関して設定するのですが、IPアドレスの設定のみ可能となります。

STEP
IPアドレスアサイン
(config-if)# ip address <アドレス> <サブネットマスク>

この設定は、トンネルIFで実際に利用するアドレスをアサインします。

通常のIFにアドレスをアサインするのと同じです。

STEP
帯域の定義
(config-if)# bandwidth <通信帯域>
STEP
KEEPALIVEの定義
(config-if)# keepalive <時間(sec)>
STEP
MTUの定義
(config-if) ip mtu <mtu値>

上記の設定を各エンドポイントとなるルータで実施することでGREトンネルを張ることができます。

個人的にMTUを除いてオプションの設定をしているルータをあまりみたことがないので、設定しているルータやその経緯を知ってみたいなと思いますね。

では、実際に実機で確認していきましょう。

CMLによる実機確認

今回、GREを構築した構成は、以下の通りとなります。

Router1
Router1
ISP1
ISP1
ISP2
ISP2
Router2
Router2
10.1.0.0/30
10.1.0.0/30
インターネット模擬
インターネット模擬
100.64.1.0/30
100.64.1.0/30
.1
.1
.2
.2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Lo0:10.1.1.1/24
Lo0:10.1.1.1/24
Lo0:10.2.2.1/24
Lo0:10.2.2.1/24
.1
.1
.2
.2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
100.64.2.0/30
100.64.2.0/30
GREトンネル
GREトンネル
Text is not SVG – cannot display

今回はRouter1とRouter2の間にトンネルIF 100を作成し、GREトンネルを構築する形で確認を行いました。

事前確認は特に設定が入ってないことを確認するのみなので割愛とします。

Router1に設定を入れた際のログは以下の通りとなります。


Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#ip route 0.0.0.0 0.0.0.0 100.64.1.2

Router1(config)#interface tunnel 100

Router1(config-if)#ip address 192.168.100.1 255.255.255.0

Router1(config-if)#tunnel source 100.64.1.1

Router1(config-if)#tunnel destination 100.64.2.2
Router1(config-if)#exit
Router1(config)#router ospf 100
Router1(config-router)#network
Router1(config-router)#network 192.168.100.0 0.0.0.255 area 0
Router1(config-router)#network 10.1.1.0 0.0.0.255 area 0
Router1(config-router)#end
Router1#wr
Building configuration...
[OK]


*Nov 16 00:06:21.689: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:06:41.178: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:06:42.474: %GRUB-5-CONFIG_WRITING: GRUB configuration is being updated on disk. Please wait...
*Nov 16 00:06:43.137: %GRUB-5-CONFIG_WRITTEN: GRUB configuration was written to disk successfully.
*Nov 16 00:09:05.166: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel100, changed state to down
*Nov 16 00:09:58.733: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel100, changed state to up
*Nov 16 00:10:28.357: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:10:30.185: %GRUB-5-CONFIG_WRITING: GRUB configuration is being updated on disk. Please wait...
*Nov 16 00:10:30.850: %GRUB-5-CONFIG_WRITTEN: GRUB configuration was written to disk successfully.

上記の設定を入れることでTunnel 100はUPしました。

ただ、Router2側で設定をまだ入れていないのでOSPFネイバーはあがりません。

では、Router2に設定を追加していきましょう。

Router2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router2(config)#ip route 0.0.0.0 0.0.0.0 100.64.2.1

Router2(config)#interface tunnel 100

Router2(config-if)#ip address 192.168.100.2 255.255.255.0

Router2(config-if)#tunnel source 100.64.2.2

Router2(config-if)#tunnel destination 100.64.1.1
Router2(config-if)#exit
Router2(config)#router ospf 100
Router2(config-router)#network 192.168.100.0 0.0.0.255 area 0
Router2(config-router)#network 10.2.2.0 0.0.0.255 area 0

Router2(config-router)#end

*Nov 16 00:06:54.620: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:07:02.649: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:07:03.916: %GRUB-5-CONFIG_WRITING: GRUB configuration is being updated on disk. Please wait...
*Nov 16 00:07:04.583: %GRUB-5-CONFIG_WRITTEN: GRUB configuration was written to disk successfully.
*Nov 16 00:11:17.300: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel100, changed state to down
*Nov 16 00:11:35.879: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel100, changed state to up
*Nov 16 00:11:53.820: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.1.1 on Tunnel100 from LOADING to FULL, Loading Done
*Nov 16 00:12:05.879: %SYS-5-CONFIG_I: Configured from console by cisco on vty0 (192.168.11.19)
*Nov 16 00:12:07.035: %GRUB-5-CONFIG_WRITING: GRUB configuration is being updated on disk. Please wait...
*Nov 16 00:12:07.697: %GRUB-5-CONFIG_WRITTEN: GRUB configuration was written to disk successfully.

設定投入後、SyslogからもOSPFネイバーが確立されました。

事後確認としていくつかログを見ていきましょう。

Router1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
10.2.2.1          0   FULL/  -        00:00:37    192.168.100.2   Tunnel100

Router1#show interfaces tunnel 100
Tunnel100 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 192.168.100.1/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 linestate evaluation up
  Tunnel source 100.64.1.1, destination 100.64.2.2
  Tunnel protocol/transport GRE/IP
    Key disabled, sequencing disabled
    Checksumming of packets disabled
  Tunnel TTL 255, Fast tunneling enabled
  Tunnel transport MTU 1476 bytes
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Last input 00:00:06, output 00:00:03, output hang never
  Last clearing of "show interface" counters 00:04:15
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     17 packets input, 1756 bytes, 0 no buffer
     Received 0 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     28 packets output, 2856 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out
Router1#

このログからもわかるようにGREでトンネリングされていることがわかります。

では、GREのパケットを見ていきましょう。

以下画像ではGREのIPヘッダ(宛先が100.64.1.1・送信元が100.64.2.2)とGRE Flagが追加されていることがわかる。

GREパケット

これでGREの動作や設定方法を確認することができたと思います。

最後に

ここ最近はCCNPの勉強をしている関係もあり、基本的なネットワークプロトコルを攻めている状況となります。

CCNP合格後、SR関連に手を出したいと思います。

  • URLをコピーしました!

この記事を書いた人

目次