GREとは
GRE(Generic Routing Encapsulation)は、ネットワーク上で異なるプロトコルのパケットをIPでカプセル化して送るためのトンネル技術です。トンネルプロトコルには、L2レベルのL2FやPPTP、L2TPなどと、L3レベルのGREやIPsecがあります。その中でGREは、特に「任意のプロトコルをIPトンネルに載せられる柔軟性」が特徴です。
GREトンネルでは、パケットは送信側ルータでGREヘッダと新しいIPヘッダを付加され、受信側ルータでそれが解除されます。これにより、実際にはインターネットを経由していても、両端のルータ間は仮想的に直結しているように見えるのです。
ただし、GRE自体には暗号化機能はありません。そのため「ルーティング情報を隠す」ことはできますが、データそのものは暗号化されず、パケット解析ツールを使えば中身を見られてしまいます。もしセキュリティを強化したい場合はGRE over IPsec(GREトンネルをIPsecで暗号化)を利用します。
さらにGREは、マルチキャストを使うルーティングプロトコル(OSPFやEIGRPなど)もトンネル上で利用可能です。これは、IPsec単独ではできない重要なポイントです。
トンネリングの3つのコンポーネント
トンネル技術には、次の3つの要素が関わります。GREもこの枠組みで説明できます。
| コンポーネント | 内容 |
|---|---|
| Transport Protocol | カプセル化したデータを運ぶための外側のプロトコル(IPが一般的) |
| Passenger Protocol | 中に入れて運ばれる元のプロトコル(IP、IPX、AppleTalkなど) |
| Carrier Protocol | カプセル化に使うプロトコル(GREなど) |
GREの場合、典型的には「Passenger Protocol = IP」「Carrier Protocol = GRE」「Transport Protocol = IP」という組み合わせになります。つまり「IPの中にGREを入れて、その中にさらにIPを入れる」構造になるわけです。
このためGREで送信されるパケットには、新しいIPヘッダとGREヘッダが追加されます。
GREトンネリングのトラフィックフロー
例として、拠点R2のLAN(192.168.2.0/24)から本社R1のLAN(192.168.1.0/24)へ通信するケースを考えます。
- R2で送信された192.168.2.x → 192.168.1.x宛のパケットは、ルーティングテーブルにより「ネクストホップがTunnel0」と判断されます。
- R2はそのパケットに新しいIPヘッダ(送信元=R2のWAN IP、宛先=R1のWAN IP)とGREヘッダを追加してインターネットに送信します。
- パケットを受け取ったR1はGREヘッダと外側のIPヘッダを外し、中のオリジナルパケット(192.168.2.x → 192.168.1.x)をLAN側に転送します。
GREは暗号化しないため中身は保護されませんが、プライベートIPアドレスを隠したり、ある経路を外部に知らせずに拠点間通信を行ったりする場合には有効です。また、トンネルは「ポイントツーポイント」の関係を作るので、中継ルータにLANのルートを知らせる必要がありません。その結果、ルーティング情報に対するセキュリティは保たれます。
しかし、ルーティング情報だけでなく実際の通信内容も守りたい場合は、GREとIPsecを組み合わせることが必須です。
GREのコンフィグ設定
GREトンネルを利用するには、Ciscoルータでトンネルインターフェースを作成し、送信元と宛先を指定する必要があります。これにより、仮想的にルータ同士が直結しているように見える環境を作り出せます。
トンネルインターフェースの基本設定
(config)# interface tunnel number
(config-if)# ip address address mask
(config-if)# tunnel source address | interface
(config-if)# tunnel destination address
(config-if)# tunnel mode gre ip
- number: 任意の番号(両端で合わせる必要はない)
- ip address: トンネル用のIPアドレス
- tunnel source: トンネル送信元となるIPアドレスまたはインターフェース
- tunnel destination: トンネル宛先のIPアドレス
- tunnel mode gre ip: GREモードを指定(デフォルトでGREなので省略可能)
送信元と宛先の間でIP到達性があることが前提条件です。PINGで確認してから設定するのが確実です。
GREの設定例(スタティックルーティング)
R1の設定
interface GigabitEthernet 0/0
ip address 1.1.1.1 255.255.255.252
interface GigabitEthernet 0/1
ip address 192.168.1.254 255.255.255.0
interface tunnel 0
ip address 10.1.1.1 255.255.255.0
tunnel source 1.1.1.1
tunnel destination 2.2.2.2
ip route 192.168.2.0 255.255.255.0 tunnel 0
R2の設定
interface GigabitEthernet 0/0
ip address 2.2.2.2 255.255.255.252
interface GigabitEthernet 0/1
ip address 192.168.2.254 255.255.255.0
interface tunnel 0
ip address 10.1.1.2 255.255.255.0
tunnel source 2.2.2.2
tunnel destination 1.1.1.1
ip route 192.168.1.0 255.255.255.0 tunnel 0
この設定でR1のLAN(192.168.1.0/24)とR2のLAN(192.168.2.0/24)がGREトンネルで接続されます。
GREの設定例(ダイナミックルーティング)
スタティックルートではなくOSPFを使用する場合の例です。
R1の設定
interface GigabitEthernet 0/0
ip address 1.1.1.1 255.255.255.252
interface GigabitEthernet 0/1
ip address 192.168.1.254 255.255.255.0
interface tunnel 0
ip address 10.1.1.1 255.255.255.0
tunnel source 1.1.1.1
tunnel destination 2.2.2.2
router ospf 1
network 192.168.1.254 0.0.0.0 area 0
network 10.1.1.1 0.0.0.0 area 0
R2の設定
interface GigabitEthernet 0/0
ip address 2.2.2.2 255.255.255.252
interface GigabitEthernet 0/1
ip address 192.168.2.254 255.255.255.0
interface tunnel 0
ip address 10.1.1.2 255.255.255.0
tunnel source 2.2.2.2
tunnel destination 1.1.1.1
router ospf 1
network 192.168.2.254 0.0.0.0 area 0
network 10.1.1.2 0.0.0.0 area 0
これにより、OSPFでLANとトンネルネットワークのルートが交換されます。
トンネルインターフェースのデフォルトモード
TunnelインターフェースのデフォルトはGREです。特別に指定しなくてもGREトンネルが使えます。他の方式(IP over IPやIPv6 over IPv4など)を利用する場合は tunnel mode で明示的に指定します。
GREトンネルのKeepalive
トンネルのUp/Down判定は宛先IPへのルート有無に依存するため、実際に相手ルータが落ちていてもUpのまま残ることがあります。この問題を解決するためにKeepalive機能を利用します。
interface tunnel 0
keepalive 5 3
この場合、5秒ごとにKeepaliveを送り、3回応答がなければトンネルをDownと判定します。
GREインターフェースのMTU調整
GREヘッダと新しいIPヘッダが追加されるため、トンネルのMTUは通常の物理I/Fより24バイト小さくなり1476バイトです。フラグメントを防ぐためにMSS調整を行います。
interface GigabitEthernet0/1
ip tcp adjust-mss 1436
この設定により、TCPセッションでの最大セグメントサイズが1436バイトに制限され、不要なフラグメントが防止されます。
GRE over IPsecとは
GRE over IPsecは、GREトンネルの上にIPsec暗号化を適用する仕組みです。GREはマルチキャストや複数のL3プロトコルをカプセル化できる柔軟性を持ち、IPsecは暗号化と完全性保護を提供します。両者を組み合わせることで、セキュアでかつルーティングに対応したVPNを構築できます。特に拠点間VPNでOSPFやEIGRPなどのダイナミックルーティングを利用する場合に有効です。
IPsecとGREの比較
| VPNプロトコル | トンネル対象 | 伝送可能プロトコル | マルチキャスト対応 | 暗号化 | 主な用途 |
|---|---|---|---|---|---|
| IPsec | IP | IPのみ | × | ○ | セキュアなユニキャストVPN |
| GRE | IP | IP, IPX, AppleTalkなど | ○ | × | マルチプロトコルや動的ルーティング |
GRE over IPsecの基本構成
GREでプライベートネットワーク同士を接続し、そのGREパケット自体をIPsecで暗号化します。これにより、GREの柔軟性とIPsecのセキュリティを同時に享受できます。暗号化の対象はGREトンネルの送信元IPと宛先IPとなります。
R1の設定例
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key cisco address 200.1.1.1
crypto isakmp keepalive 30 on-demand
crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
mode transport
crypto map M-ipsec 1 ipsec-isakmp
set peer 200.1.1.1
set transform-set IPSEC
match address A-ipsec
interface Loopback0
ip address 100.1.1.1 255.255.255.255
interface GigabitEthernet0/1
ip address 10.1.1.254 255.255.255.0
ip tcp adjust-mss 1332
interface Tunnel1
ip address 192.168.1.1 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 200.1.1.1
interface Dialer1
ip unnumbered Loopback0
encapsulation ppp
dialer pool 1
ppp authentication chap callin
crypto map M-ipsec
router ospf 1
network 10.1.1.254 0.0.0.0 area 0
network 192.168.1.1 0.0.0.0 area 0
ip access-list extended A-ipsec
permit gre host 100.1.1.1 host 200.1.1.1
ip access-list extended A-security
permit esp host 200.1.1.1 host 100.1.1.1
permit udp host 200.1.1.1 host 100.1.1.1 eq isakmp
permit gre host 200.1.1.1 host 100.1.1.1
R2の設定例
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key cisco address 100.1.1.1
crypto isakmp keepalive 30 on-demand
crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
mode transport
crypto map M-ipsec 1 ipsec-isakmp
set peer 100.1.1.1
set transform-set IPSEC
match address A-ipsec
interface Loopback0
ip address 200.1.1.1 255.255.255.255
interface GigabitEthernet0/1
ip address 10.1.2.254 255.255.255.0
ip tcp adjust-mss 1332
interface Tunnel1
ip address 192.168.1.2 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 100.1.1.1
interface Dialer1
ip unnumbered Loopback0
encapsulation ppp
dialer pool 1
ppp authentication chap callin
crypto map M-ipsec
router ospf 1
network 10.1.2.254 0.0.0.0 area 0
network 192.168.1.2 0.0.0.0 area 0
ip access-list extended A-ipsec
permit gre host 200.1.1.1 host 100.1.1.1
ip access-list extended A-security
permit esp host 100.1.1.1 host 200.1.1.1
permit udp host 100.1.1.1 host 200.1.1.1 eq isakmp
permit gre host 100.1.1.1 host 200.1.1.1
GRE over IPsecの注意点
- IPsecのモードはトランスポートにすることで二重トンネリングを避ける
- MSS値は1332byte程度に調整し、フラグメントを防ぐ
- MTUも1372に調整して整合性を取る
- ACLでGREプロトコル番号47を明示的に許可する
- OSPFなどのルーティングプロトコルはトンネルインターフェース上で有効化する
このようにGRE over IPsecは、GREの柔軟性とIPsecのセキュリティを兼ね備えたVPNソリューションとして実務でもよく利用されます。
GRE over IPsecの1対N(ハブ&スポーク)構成の全体像
拠点が3つ以上になると、拠点どうしをフルメッシュで結ぶよりも、中央拠点(ハブ)に集約し各拠点(スポーク)がハブだけとトンネルを張る方が運用が楽です。GRE over IPsecなら、GREでOSPFなどのダイナミックルーティングやマルチキャストを通しつつ、そのGRE自体をIPsecで暗号化できます。ここではPPPoE回線を想定し、R1をハブ、R2/R3をスポークとして解説します。
設計方針と試験で狙われる要点
IPsecは暗号化と完全性を担当、GREはトンネリングとマルチキャスト伝送を担当します。二重に「トンネル」を作らないため、IPsecはトランスポートモード、GREが実際のトンネル役という分担にします。暗号スイートは実務でも試験でもAES系+SHA系が推奨です。PPPoEではMTUが小さくなるため、トンネルMTUとMSS調整を行いフラグメントを避けます。ACLは役割ごとに分け、IPsec対象(GREの送受元IP)、回線側許可(ISAKMP/ESP/GRE)を混同しないようにします。
ハブ・スポークごとのIPsecパラメータ整理
| 役割 | IKEv1 Phase1 | IKEv1 Phase2 |
|---|---|---|
| ハブR1 → スポークR2/R3 | 暗号=AES、ハッシュ=SHA-1、認証=PSK、DH=グループ2、ライフタイム=86400秒、DPD=30 | プロトコル=ESP、暗号=AES、認証=HMAC-SHA1、モード=transport、ライフタイム=3600秒、PFS=なし |
| スポークR2/R3 → ハブR1 | 同上(相手がR1一択) | 同上 |
ハブR1の代表コンフィグ
! IKE Phase1(複数ピアを登録)
crypto isakmp policy 1
encr aes
hash sha
authentication pre-share
group 2
crypto isakmp key cisco address 102.1.1.1
crypto isakmp key cisco address 103.1.1.1
crypto isakmp keepalive 30 on-demand
! IKE Phase2(AES+SHA、transport)
crypto ipsec transform-set IPSEC esp-aes esp-sha-hmac
mode transport
! 2本のIPsecセッションを暗号マップで束ねる(Seq番号で優先)
crypto map M-IPSEC 1 ipsec-isakmp
set peer 102.1.1.1
set transform-set IPSEC
match address A-IPSEC-R2
crypto map M-IPSEC 2 ipsec-isakmp
set peer 103.1.1.1
set transform-set IPSEC
match address A-IPSEC-R3
! ルータI/F
interface Loopback1
ip address 101.1.1.1 255.255.255.255
interface GigabitEthernet0/1
ip address 10.1.1.254 255.255.255.0
ip tcp adjust-mss 1332
! GREトンネル(R2用)
interface Tunnel1
ip address 192.168.1.1 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 102.1.1.1
! GREトンネル(R3用)
interface Tunnel2
ip address 192.168.2.1 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 103.1.1.1
! PPPoE側
interface Dialer1
ip unnumbered Loopback1
ip access-group A-SECURITY in
ip mtu 1454
encapsulation ppp
dialer pool 1
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-IPSEC
! OSPFはLANと各トンネルを有効化
router ospf 1
log-adjacency-changes
network 10.1.1.254 0.0.0.0 area 0
network 192.168.1.1 0.0.0.0 area 0
network 192.168.2.1 0.0.0.0 area 0
ip route 0.0.0.0 0.0.0.0 Dialer1
! IPsec対象ACL:GREの送受元(R1↔R2、R1↔R3)
ip access-list extended A-IPSEC-R2
permit gre host 101.1.1.1 host 102.1.1.1
ip access-list extended A-IPSEC-R3
permit gre host 101.1.1.1 host 103.1.1.1
! 回線側の最低限許可(ISAKMP/ESP/GRE)
ip access-list extended A-SECURITY
permit udp host 102.1.1.1 host 101.1.1.1 eq isakmp
permit esp host 102.1.1.1 host 101.1.1.1
permit gre host 102.1.1.1 host 101.1.1.1
permit udp host 103.1.1.1 host 101.1.1.1 eq isakmp
permit esp host 103.1.1.1 host 101.1.1.1
permit gre host 103.1.1.1 host 101.1.1.1
スポークR2の代表コンフィグ
crypto isakmp policy 1
encr aes
hash sha
authentication pre-share
group 2
crypto isakmp key cisco address 101.1.1.1
crypto isakmp keepalive 30 on-demand
crypto ipsec transform-set IPSEC esp-aes esp-sha-hmac
mode transport
crypto map M-IPSEC 1 ipsec-isakmp
set peer 101.1.1.1
set transform-set IPSEC
match address A-IPSEC
interface Loopback1
ip address 102.1.1.1 255.255.255.255
interface GigabitEthernet0/1
ip address 10.1.2.254 255.255.255.0
ip tcp adjust-mss 1332
interface Tunnel1
ip address 192.168.1.2 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 101.1.1.1
interface Dialer1
ip unnumbered Loopback1
ip access-group A-SECURITY in
ip mtu 1454
encapsulation ppp
dialer pool 1
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-IPSEC
router ospf 1
log-adjacency-changes
network 10.1.2.254 0.0.0.0 area 0
network 192.168.1.2 0.0.0.0 area 0
ip route 0.0.0.0 0.0.0.0 Dialer1
! IPsec対象:GRE(R2→R1)
ip access-list extended A-IPSEC
permit gre host 102.1.1.1 host 101.1.1.1
! 回線側の許可(ISAKMP/ESP/GRE)R1→R2方向
ip access-list extended A-SECURITY
permit udp host 101.1.1.1 host 102.1.1.1 eq isakmp
permit esp host 101.1.1.1 host 102.1.1.1
permit gre host 101.1.1.1 host 102.1.1.1
スポークR3の代表コンフィグ
crypto isakmp policy 1
encr aes
hash sha
authentication pre-share
group 2
crypto isakmp key cisco address 101.1.1.1
crypto isakmp keepalive 30 on-demand
crypto ipsec transform-set IPSEC esp-aes esp-sha-hmac
mode transport
crypto map M-IPSEC 1 ipsec-isakmp
set peer 101.1.1.1
set transform-set IPSEC
match address A-IPSEC
interface Loopback1
ip address 103.1.1.1 255.255.255.255
interface GigabitEthernet0/1
ip address 10.1.3.254 255.255.255.0
ip tcp adjust-mss 1332
interface Tunnel2
ip address 192.168.2.2 255.255.255.0
ip mtu 1372
tunnel source Dialer1
tunnel destination 101.1.1.1
interface Dialer1
ip unnumbered Loopback1
ip access-group A-SECURITY in
ip mtu 1454
encapsulation ppp
dialer pool 1
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-IPSEC
router ospf 1
log-adjacency-changes
network 10.1.3.254 0.0.0.0 area 0
network 192.168.2.2 0.0.0.0 area 0
ip route 0.0.0.0 0.0.0.0 Dialer1
ip access-list extended A-IPSEC
permit gre host 103.1.1.1 host 101.1.1.1
ip access-list extended A-SECURITY
permit udp host 101.1.1.1 host 103.1.1.1 eq isakmp
permit esp host 101.1.1.1 host 103.1.1.1
permit gre host 101.1.1.1 host 103.1.1.1
MTUとMSSの目安
PPPoEのオーバーヘッドとGREヘッダ(24バイト)を見込んで、トンネルMTUは1372、LAN側MSSは1332を目安とします。実機ではshow interfacesで実測し、必要に応じて微調整します。フラグメントが出るとOSPFやアプリの不調につながるのでここは外さないようにします。
動作確認の手順
まずshow ip interface briefで各Tunnelがup/upであることを確認します。次にshow ip ospf neighborでハブと各スポークのネイバーが形成されているか確認します。IPsecはshow crypto isakmp saでフェーズ1、show crypto ipsec saでフェーズ2を確認し、#pkts encryptと#pkts decryptが増えているかを見ます。暗号化側だけ増えるなら自局からの送出はできている合図、復号側が増えるなら相手からの受信もできています。