第215篇:GRE 隧道与 Overlay 网络
关键词
GRE、通用路由封装、Overlay 网络、隧道技术、多协议传输、GRE Keepalive、隧道接口
一、GRE 概述
1.1 什么是 GRE
GRE(Generic Routing Encapsulation,通用路由封装)是一种轻量级隧道协议,可以将一种协议的报文封装在另一种协议中传输:
GRE 隧道的基本概念:
| Overlay 网络(逻辑网络) 私网 IP 10.0.0.0/8 ─── GRE 隧道 ─── 私网 IP | |
|---|---|
| │ 封装 | |
| ┌────────┴────────┐ | |
| │ Underlay 网络 │ | |
| │ 公网 IP 层 │ | |
| │ 202.1.1.1→203.1.1.1│ | |
| └─────────────────┘ |
GRE 的核心特点:
| 特点 | 说明 |
|---|---|
| 协议无关 | 可以封装 IPv4、IPv6、IPX 等 |
| 轻量级 | 无加密,无认证,纯粹封装 |
| 多点支持 | 支持点到点、点到多点 |
| 标准开放 | RFC 2784 / RFC 2890 |
| IP 协议号 | 47 |
1.2 GRE 与 IPsec 的定位
GRE vs IPsec:
GRE:
纯封装,不加密
开销小(4-8 字节 GRE 头)
适合传递路由协议(OSPF、EIGRP)
常与 IPsec 组合使用
IPsec:
加密 + 认证
开销大(50-86 字节)
不适合传递组播/路由协议
可保护 GRE 隧道
最佳组合:GRE over IPsec
先用 GRE 建立隧道 + 传递路由
再用 IPsec 加密整个 GRE 隧道
→ 既支持路由协议,又保证安全
二、GRE 报文封装
2.1 封装结构
原始报文: | 原始 IP 头 S=10.0.0.1 D=10.0.0.2 | TCP/UDP/其他 | 数据 | | --- | --- | --- |
GRE 隧道封装后: | 外部 IP 头 S=202.1.1.1 D=203.1.1.1 协议=47(GRE) | GRE 头 协议类型 0x0800 | 原始 IP 头 S=10.0.0.1 D=10.0.0.2 | TCP/UDP | 数据 | | --- | --- | --- | --- | --- |
GRE 头结构(4 字节基础头,可选扩展): | C/R | K/S | S | Res | Version | (2 字节 Flag/Version) | | --- | --- | --- | --- | --- | --- | | 协议类型 (2 字节) | ← 如 0x0800 = IPv4 | | | | | | (可选) 校验和 (4 字节) (可选) 密钥 (4 字节) (可选) 序列号 (4 字节) | | | | | |
封装开销: 基础 GRE 头:4 字节 外部 IP 头:20 字节 总计:24 字节额外开销
2.2 GRE 支持的多协议
GRE 可以封装多种协议(协议类型字段标识):
协议类型值 协议
────────────────────
0x0800 IPv4
0x86DD IPv6
0x8847 MPLS 单播
0x8848 MPLS 组播
0x8035 RARP
0x809B AppleTalk
0x8137 IPX
三、GRE 隧道配置
3.1 点到点 GRE 隧道
# 路由器 A(202.1.1.1)
interface Tunnel0/0/0
ip address 10.255.255.1 255.255.255.252 # 隧道接口 IP
tunnel-protocol gre # GRE 隧道
source 202.1.1.1 # 源地址(公网 IP)
destination 203.1.1.1 # 目的地址(对端公网 IP)
keepalive 5 3 # Keepalive 检测(5s 间隔 3 次)
!
# 路由:将远端私网路由指向隧道接口
ip route-static 192.168.2.0 255.255.255.0 Tunnel0/0/0
# 路由器 B(203.1.1.1)
interface Tunnel0/0/0
ip address 10.255.255.2 255.255.255.252
tunnel-protocol gre
source 203.1.1.1
destination 202.1.1.1
keepalive 5 3
!
ip route-static 192.168.1.0 255.255.255.0 Tunnel0/0/0
3.2 在 GRE 隧道上运行动态路由
# 在 GRE 隧道上运行 OSPF(让两端自动学习路由)
# 路由器 A
interface Tunnel0/0/0
ip address 10.255.255.1 255.255.255.252
tunnel-protocol gre
source 202.1.1.1
destination 203.1.1.1
!
ospf 1
area 0.0.0.0
network 10.255.255.0 0.0.0.255
network 192.168.1.0 0.0.0.255 # 本端私网
# 路由器 B
interface Tunnel0/0/0
ip address 10.255.255.2 255.255.255.252
tunnel-protocol gre
source 203.1.1.1
destination 202.1.1.1
!
ospf 1
area 0.0.0.0
network 10.255.255.0 0.0.0.255
network 192.168.2.0 0.0.0.255 # 本端私网
# 效果:
# 两台路由器通过 GRE OSPF 自动学习对方私网路由
# 无需配置静态路由
四、GRE 与 IPsec 组合
4.1 GRE over IPsec
GRE over IPsec 的组合方式:先 GRE 封装,再 IPsec 加密
| IPsec 加密保护 ┌─────────────────────┐ | GRE 隧道(逻辑) OSPF/路由协议运行 在 GRE 隧道上 | |
|---|---|---|
优点: 1. 同时获得 GRE 的多协议支持和 IPsec 的加密 2. 路由协议(OSPF、EIGRP)可以在 IPsec 上运行 3. 组播/广播流量可以加密传输
4.2 配置示例
# GRE over IPsec 配置
# 步骤 1:创建 GRE 隧道
interface Tunnel0/0/0
ip address 10.255.255.1 255.255.255.252
tunnel-protocol gre
source 202.1.1.1
destination 203.1.1.1
!
# 步骤 2:在 GRE 隧道上运行 OSPF
ospf 1
area 0.0.0.0
network 10.255.255.0 0.0.0.255
network 192.168.1.0 0.0.0.255
!
# 步骤 3:创建 IPsec 策略保护 GRE 流量
acl number 3001
rule 5 permit gre source 202.1.1.1 0 destination 203.1.1.1 0 # 保护 GRE 协议
!
ipsec proposal GRE_IPSEC
esp authentication-algorithm sha256
esp encryption-algorithm aes-256
!
ike peer GRE_PEER
ike-proposal 1
pre-shared-key Huawei@123
remote-address 203.1.1.1
!
ipsec policy GRE_POLICY 10 isakmp
security acl 3001
ike-peer GRE_PEER
proposal GRE_IPSEC
!
# 步骤 4:IPsec 应用到物理接口(而非 Tunnel 接口)
interface GigabitEthernet0/0/0
ip address 202.1.1.1 255.255.255.0
ipsec policy GRE_POLICY # IPsec 在物理接口上
五、GRE Keepalive 与故障检测
5.1 Keepalive 机制
GRE 隧道本身没有状态检测机制,需要通过 Keepalive 来检测对端状态:
Keepalive 工作原理:
本地 ─── GRE Keepalive 请求 ──→ 对端
本地 ←── GRE Keepalive 应答 ─── 对端
如果连续 N 次未收到应答:
→ 宣告对端不可达
→ Tunnel 接口状态变为 Down
→ 触发路由切换
配置:
interface Tunnel0/0/0
keepalive 10 3 # 每 10 秒发一次,连续 3 次失败=故障
查看 Keepalive 状态:
display interface Tunnel0/0/0
Tunnel0/0/0 current state: UP
Keepalive: 10 seconds, retry times: 3
Keepalive packet: sent 100, received 99
5.2 BFD for GRE
对更快的故障检测需求,可以在 GRE 隧道上启用 BFD:
interface Tunnel0/0/0
bfd min-tx-interval 10
bfd min-rx-interval 10
bfd detect-multiplier 3
!
# BFD 检测时间 = 10ms × 3 = 30ms
# 远快于 Keepalive 的 30 秒
六、典型应用场景
6.1 站点间 VPN 基础(GRE + IPsec)
总部 ─── GRE Tunnel ─── IPsec 保护 ─── 分支
│ │
│ 运行 OSPF(自动学习路由) │
│ 组播/广播通过 GRE 传输 │
│ IPsec 提供加密保护 │
6.2 MPLS over GRE
GRE 可以承载 MPLS 标签报文(协议类型 0x8847):
┌───────────┐
│ MPLS 核心 │
└─────┬─────┘
│ (MPLS 标签)
┌────────┴────────┐
│ GRE 隧道封装 MPLS │
└────────┬────────┘
┌─────┴─────┐
│ 非 MPLS 域 │
└───────────┘
场景:非 MPLS 网络承载 MPLS 流量
6.3 IPv6 over IPv4 GRE
IPv6 站点通过 IPv4 互联网互联(IPv6 过渡期):
┌──────────────┐ GRE 隧道 ┌──────────────┐
│ IPv6 站点 A │ ══════════════════════ │ IPv6 站点 B │
│ 2001:db8::1 │ (over IPv4) │ 2001:db8::2 │
└──────────────┘ └──────────────┘
配置:
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2001:db8:ff::1/64
tunnel-protocol gre
source 202.1.1.1
destination 203.1.1.1
七、总结
| 知识点 | 核心要点 |
|---|---|
| GRE | 通用路由封装,轻量级隧道,无加密 |
| 封装开销 | GRE 头 4 字节 + 外部 IP 头 20 字节 = 24 字节 |
| 多协议 | IPv4、IPv6、MPLS、IPX 等都可封装 |
| GRE 隧道 | Tunnel 接口,源 + 目的地址定义隧道端点 |
| GRE + IPsec | GRE 传递路由/组播,IPsec 加密保护 |
| Keepalive | 检测 GRE 隧道对端状态 |
| 动态路由 | GRE 隧道上可运行 OSPF/EIGRP 等 |
八、思考
- GRE 隧道和 IPsec 隧道有什么本质区别?为什么有时需要两者组合使用?
- GRE 报文封装后,外层 IP 头和内层 IP 头分别代表什么?
- GRE 隧道上运行动态路由协议有什么好处?没有它只能怎么做?
- GRE over IPsec 和 IPsec alone 相比,有哪些优势?
- GRE Keepalive 的作用是什么?如果对端故障了,Keepalive 如何触发切换?
下篇预告:第216篇《GRE over IPsec 实现安全隧道》——详解 GRE over IPsec 的最佳实践,包括配置优化和故障排查。