GREトンネルとは?仕組みと設定方法|Cisco設定例・IPsec over GRE・MTU問題の対処法【わかりやすく解説】

ネットワークトラフィックモニタリング

Cisco IOS GREトンネル GRE over IPsec 拠点間VPN トラブルシューティング

あわせて読みたい関連記事

GREトンネルとは?仕組みをわかりやすく解説

複数拠点を仮想的に接続する技術として、GREトンネル(Generic Routing Encapsulation)はネットワークエンジニアにとって基本かつ重要なスキルのひとつです。OSPFやEIGRPなどの動的ルーティングプロトコルをインターネット越しに使いたい場合や、プライベートIPをインターネット上でやりとりしたい場合に非常に有効です。

本記事では、GREの仕組み・Ciscoルータでの設定手順・IPsecとの組み合わせによるセキュリティ確保・トラブルシューティングまで、現場目線で体系的に解説します。

👷 現場での体験談

2拠点間でOSPFを使ってルーティングを統合したいという要件がありました。拠点間はインターネット回線のみ。通常OSPFのマルチキャストパケット(224.0.0.5)はインターネット越しに届きません。

GREトンネルを張ることでトンネルインターフェース上でOSPFを動かし、あたかも直接L3接続しているかのようにルーティングを統合できました。さらにGRE over IPsecで暗号化を追加して完成。GREがなければこの要件は別の手段で対応するしかなく、設計が複雑になっていたと思います。

GREトンネル構成図
GREトンネル構成図:本社-支社間のカプセル化接続とGRE over IPsecの概要

GREトンネルとは

GRE(Generic Routing Encapsulation)は、任意のレイヤ3プロトコルのパケットを新しいIPヘッダでカプセル化してトンネル転送する技術です。外側から見ると通常のIPパケットとして扱われるため、インターネット経由でも透過的に通信できます。

図1:GREカプセル化の仕組み(パケット構造)
外側IPヘッダ (トンネルのIP) GREヘッダ (4バイト) 内側IPヘッダ (元のパケット) ペイロード(元のデータ) ← GREオーバーヘッド(約24バイト = 外側IPヘッダ20B + GREヘッダ4B)→
🔀
プロトコル非依存
IPv4・IPv6・IPX・その他L3プロトコルをカプセル化できる
📡
マルチキャスト対応
OSPF・EIGRPなどマルチキャストを使う動的ルーティングをインターネット越しに使える
🔓
暗号化なし(重要)
GRE単体に暗号化機能はない。インターネット経由ではIPsecとの組み合わせが必須

GREが必要になる主なシナリオ

図2:GREトンネルが使われる主な用途(現場経験ベース)

CiscoルータによるGREトンネル構成

構成図

拠点A LAN 拠点B LAN 192.168.1.0/24 192.168.2.0/24 | | [Router A]━━━━━━━━━GRE Tunnel (10.0.0.0/30)━━━━━━━━━[Router B] WAN: 203.0.113.1 WAN: 198.51.100.1 | | └──────────────── インターネット ─────────────────┘ Tunnel0 IP: 10.0.0.1/30 Tunnel0 IP: 10.0.0.2/30

Router A の設定

Router-A# configure terminal

! トンネルインターフェースを設定
Router-A(config)# interface Tunnel0
Router-A(config-if)# ip address 10.0.0.1 255.255.255.252
Router-A(config-if)# tunnel source 203.0.113.1      ← 自拠点のWAN IP
Router-A(config-if)# tunnel destination 198.51.100.1 ← 対向拠点のWAN IP
Router-A(config-if)# tunnel mode gre ip              ← GREモード(デフォルトだが明示推奨)
Router-A(config-if)# no shutdown

! 対向LAN宛のスタティックルート(またはOSPFを使う場合はトンネルIF上で有効化)
Router-A(config)# ip route 192.168.2.0 255.255.255.0 Tunnel0

Router-A(config)# end
Router-A# copy running-config startup-config

Router B の設定

Router-B# configure terminal

Router-B(config)# interface Tunnel0
Router-B(config-if)# ip address 10.0.0.2 255.255.255.252
Router-B(config-if)# tunnel source 198.51.100.1
Router-B(config-if)# tunnel destination 203.0.113.1
Router-B(config-if)# tunnel mode gre ip
Router-B(config-if)# no shutdown

Router-B(config)# ip route 192.168.1.0 255.255.255.0 Tunnel0

Router-B(config)# end
Router-B# copy running-config startup-config
ℹ GREのMTUオーバーヘッドに注意 GREカプセル化によって約24バイト(外側IPヘッダ20B + GREヘッダ4B)のオーバーヘッドが加わります。トンネルインターフェースの実効MTUは1500 − 24 = 1476バイトとなります。TCPの通信障害を防ぐために以下を設定することを推奨します。
Router-A(config-if)# ip tcp adjust-mss 1436   ← 1476 - 40(IP+TCPヘッダ)= 1436

OSPFをGREトンネル上で動かす例

GREトンネルの最大の強みは動的ルーティングプロトコルが使えることです。トンネルインターフェースをOSPFのnetworkに含めるだけでネイバーが確立します。

! Router AでOSPFをトンネルIF上で有効化
Router-A(config)# router ospf 1
Router-A(config-router)# network 10.0.0.0 0.0.0.3 area 0      ← トンネルIF
Router-A(config-router)# network 192.168.1.0 0.0.0.255 area 0 ← 拠点A LAN

GRE over IPsecでセキュリティを確保

GRE単体では通信内容が平文のままインターネットを流れます。インターネット越しに使う場合はIPsecでGREトラフィックを暗号化するGRE over IPsec構成が必須です。

GREのみ
  • マルチキャスト・動的ルーティングに対応
  • 暗号化なし→盗聴リスクあり
  • 社内閉域網・ラボ環境では使用可能
GRE over IPsec
  • GREのマルチキャスト対応を保持
  • IPsecで暗号化・完全性保護
  • インターネット経由では必須

GRE over IPsecの設定例(Router A)

! GREトラフィックを暗号化対象にするACL
Router-A(config)# access-list 110 permit gre host 203.0.113.1 host 198.51.100.1

! ISAKMPポリシー(Phase1)
Router-A(config)# crypto isakmp policy 10
Router-A(config-isakmp)# encryption aes 256
Router-A(config-isakmp)# hash sha256
Router-A(config-isakmp)# authentication pre-share
Router-A(config-isakmp)# group 14          ← group 2(1024bit)は非推奨。group14以上を使用
Router-A(config-isakmp)# lifetime 86400
Router-A(config-isakmp)# exit

! 事前共有鍵の設定
Router-A(config)# crypto isakmp key SecureKey2024! address 198.51.100.1

! トランスフォームセット(Phase2)
Router-A(config)# crypto ipsec transform-set GRE-SET esp-aes 256 esp-sha256-hmac
Router-A(cfg-crypto-trans)# mode tunnel
Router-A(cfg-crypto-trans)# exit

! crypto map の設定
Router-A(config)# crypto map GRE-MAP 10 ipsec-isakmp
Router-A(config-crypto-map)# set peer 198.51.100.1
Router-A(config-crypto-map)# set transform-set GRE-SET
Router-A(config-crypto-map)# match address 110
Router-A(config-crypto-map)# exit

! WAN側インターフェースに適用
Router-A(config)# interface GigabitEthernet0/0
Router-A(config-if)# crypto map GRE-MAP
🚨 DHグループ2(group 2)は非推奨 元の設定例にあったgroup 2(1024ビット)は現在のガイドラインで非推奨です。新規構築ではgroup 14(2048ビット)以上を使用してください。既存環境がgroup 2の場合は早急な更新を推奨します。

パケットの処理フロー(GRE over IPsec)

① 拠点AのPC(192.168.1.10)が拠点B(192.168.2.10)へ通信
② Router A がパケットをGREでカプセル化
  → 元IPヘッダ + GREヘッダ + 外側IPヘッダ(203.0.113.1 → 198.51.100.1)
③ IPsecのACLにマッチ → GREパケット全体をESPで暗号化
  → ESPヘッダ + 暗号化データ + 外側IPヘッダ
④ インターネットを通過(暗号化済み)
⑤ Router B がIPsecを復号 → GREパケット取り出し → 内側IPを取り出して転送
⑥ 拠点Bの192.168.2.10に届く

確認コマンドとトラブルシューティング

基本確認コマンド

! トンネルインターフェースの状態確認
Router-A# show interface Tunnel0

! ルーティングテーブルの確認(対向ネットワークへのルートがあるか)
Router-A# show ip route

! トンネルを通じたpingでの疎通確認
Router-A# ping 10.0.0.2              ← 対向トンネルIPへのping
Router-A# ping 192.168.2.1           ← 対向LANゲートウェイへのping

! IPsec Phase1の状態確認
Router-A# show crypto isakmp sa

! IPsec Phase2の状態確認(pkts encaps/decapsが増えているか)
Router-A# show crypto ipsec sa
(show interface Tunnel0 の正常時出力)
Tunnel0 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 10.0.0.1/30
  Tunnel source 203.0.113.1, destination 198.51.100.1
  Tunnel protocol/transport GRE/IP
  ...

(問題のある出力)
Tunnel0 is up, line protocol is down   ← トンネルは設定されているが宛先に到達できない
症状原因対処
Tunnel0がup/downtunnel destinationへのルートがない(WAN側の経路不備)show ip route でWAN IPへのルートを確認
トンネルIPへのpingが通らないtunnel sourceまたはtunnel destinationのIPが誤っている両端の設定を照合して送信元/宛先IPを修正
LAN間の通信が通らないスタティックルートがない・OSPFのネイバーが上がっていないshow ip route / show ip ospf neighbor
大きなパケットだけ通らないGREオーバーヘッドによるMTU超過ip tcp adjust-mss 1436 をTunnel0に設定
IPsecが確立しないPhase1/Phase2の設定不一致・PSK不一致show crypto isakmp sa
debug crypto isakmp

GREとVTI(ルートベースIPsec)の使い分け

GRE over IPsecと似た構成として、CiscoではVTI(Virtual Tunnel Interface)を使ったルートベースIPsecも選択肢になります。

比較項目GRE over IPsecVTI(ルートベースIPsec)
マルチキャスト対応✅ 対応(GREがマルチキャストを通す)✅ 対応(IPsec VTIもマルチキャスト可)
設定の複雑さGRE + IPsecの2段構成でやや複雑tunnel modeをipsecに変更するだけでシンプル
対向機器の互換性対向がGREに対応していれば可Cisco同士またはIKEv2対応機器向け
推奨用途OSPFやEIGRP等のマルチキャスト通信が必要な既存環境新規構築でシンプルに暗号化トンネルを張りたい場合

まとめ

GREトンネルは、複数拠点のネットワークを柔軟に接続するための強力な技術です。設定自体はシンプルですが、MTUオーバーヘッドへの対応と、インターネット経由での使用時のIPsec暗号化が重要です。

  • tunnel sourcetunnel destinationは両端で対称に設定する
  • GREオーバーヘッドは24バイト。ip tcp adjust-mss 1436でTCPの断片化を防ぐ
  • インターネット経由ではGRE over IPsecで暗号化する。DHグループはgroup 14以上を使用
  • Tunnel0がup/downの場合はWAN側へのルートを確認する
  • OSPFをGREトンネル上で動かすことで動的ルーティング統合が可能
  • 新規構築でシンプルな暗号化トンネルが必要な場合はVTI(ルートベースIPsec)も検討

確認コマンド(show interface Tunnel0show ip routeshow crypto ipsec sa)で状態を確認しながら設定を進めましょう。

よくある質問(FAQ)

Q. CiscoでGREトンネルを設定するコマンドは?

interface Tunnel0 → ip address [トンネルIP] [マスク] → tunnel source [送信元IF or IP] → tunnel destination [対向IP] で設定します。両端で対称的に設定し、tunnel sourceとdestinationを正しく対応させる必要があります。show interface Tunnel0 で状態を確認できます。

Q. GREトンネルとIPsecの違いは?

GREはカプセル化のみで暗号化機能がありません。IPsecは暗号化・認証を提供しますが、マルチキャストやブロードキャストを直接通せません。両者を組み合わせた「IPsec over GRE」構成では、GREでマルチキャスト対応のトンネルを作り、IPsecで暗号化するため、OSPFなどのルーティングプロトコルをVPN越しに使えます。

Q. GREトンネルでMTU問題が発生する理由は?

GREは24バイトのオーバーヘッド(GREヘッダ4バイト + 外側IPヘッダ20バイト)を追加するため、トンネルインターフェースの実効MTUは1476バイトになります。ip mtu 1476 と ip tcp adjust-mss 1436 をトンネルインターフェースに設定してフラグメントを防止してください。