第216篇:GRE over IPsec 实现安全隧道
关键词
GRE over IPsec、安全隧道、组合加密、路由协议加密、组播加密、隧道优化、MTU 调优
一、为什么需要 GRE over IPsec
1.1 IPsec Alone 的局限性
纯 IPsec VPN 的限制:
-
不支持组播和广播 IPsec ESP 是点对点的单播加密 无法传输路由协议(OSPF 需要组播 224.0.0.5) 无法传输 DHCP 广播等
-
无法传输多协议 IPsec 只保护 IP 流量 无法传输 IPX、MPLS 等
-
配置复杂度(多站点场景) 每对站点需要独立的 IPsec 策略 新增站点需要重新配置相关站点
GRE over IPsec 的解决方案:
GRE 隧道(逻辑层) - 承载组播/广播 - 运行路由协议 (OSPF) - 多协议传输 IPsec ESP 加密(安全层) - 加密整个 GRE 报文 - 身份认证 + 防篡改
1.2 GRE over IPsec 的典型场景
场景 1:总部-分支带动态路由
总部和分支运行 OSPF,通过 GRE 隧道交换路由
IPsec 加密 GRE 隧道,保证安全
场景 2:DMVPN(Dynamic Multipoint VPN)
Cisco DMVPN 基于 mGRE + IPsec
分支间动态建立直连隧道
场景 3:组播应用加密
IPTV、视频会议等组播流量通过 GRE 封装后加密
二、架构设计
2.1 协议栈层次
GRE over IPsec 的协议栈:
用户数据 (TCP/UDP) 内层 IP 头 S=10.0.0.1 D=192.168.1.1 GRE 头 协议类型=0x0800 外层 IP 头 S=202.1.1.1 D=203.1.1.1 ├────────────────────────┤ ← GRE 隧道封装 ESP 头 (IPsec) 新 IP 头 (IPsec 隧道) S=202.1.1.1 D=203.1.1.1 └────────────────────────┘ ← IPsec 隧道再封装
2.2 转发流程
数据从用户到对端用户的完整封装路径:
PC-A (10.0.0.1) → 网关 A → IPsec 加密 → 公网 → 网关 B → PC-B (192.168.1.1)
步骤 1:PC-A 发送数据包
S=10.0.0.1, D=192.168.1.1, TCP 80
步骤 2:网关 A 收到,路由到 Tunnel 接口
GRE 封装:+ GRE 头 (4 字节)
外层 IP:+ S=202.1.1.1, D=203.1.1.1
步骤 3:IPsec 策略匹配 GRE 流量
ESP 加密:加密整个 GRE 报文
新 IP 头:S=202.1.1.1, D=203.1.1.1(IPsec 隧道模式)
步骤 4:公网传输 → 网关 B
步骤 5:网关 B 解封 IPsec → 解封 GRE → 原始报文
路由到 PC-B
三、配置实战
3.1 完整配置
# ====== 网关 A ======
# 1. GRE 隧道接口
interface Tunnel0/0/0
ip address 10.255.255.1 255.255.255.252
tunnel-protocol gre
source GigabitEthernet0/0/0 # 源接口
destination 203.1.1.1 # 对端公网 IP
keepalive 5 3 # 保活检测
# 2. OSPF 在 GRE 隧道上运行
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 10.255.255.0 0.0.0.255 # 隧道接口网段
network 10.0.0.0 0.255.255.255 # 本端私网
# 3. IPsec 保护 GRE 流量
acl number 3001
rule 5 permit gre source 202.1.1.1 0 destination 203.1.1.1 0
!
ike proposal 1
encryption-algorithm aes-256
dh group14
authentication-algorithm sha256
authentication-method pre-share
!
ike peer GRE_PEER
ike-proposal 1
pre-shared-key Huawei@123
remote-address 203.1.1.1
!
ipsec proposal GRE_ENC
esp authentication-algorithm sha256
esp encryption-algorithm aes-256
encapsulation-mode tunnel
!
ipsec policy GRE_OVER_IPSEC 10 isakmp
security acl 3001
ike-peer GRE_PEER
proposal GRE_ENC
!
interface GigabitEthernet0/0/0
ip address 202.1.1.1 255.255.255.0
ipsec policy GRE_OVER_IPSEC # IPsec 在物理接口
# ====== 网关 B(对称配置)======
interface Tunnel0/0/0
ip address 10.255.255.2 255.255.255.252
tunnel-protocol gre
source GigabitEthernet0/0/0
destination 202.1.1.1
keepalive 5 3
!
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 10.255.255.0 0.0.0.255
network 192.168.0.0 0.0.255.255
!
acl number 3001
rule 5 permit gre source 203.1.1.1 0 destination 202.1.1.1 0
!
ike peer GRE_PEER
ike-proposal 1
pre-shared-key Huawei@123
remote-address 202.1.1.1
!
ipsec policy GRE_OVER_IPSEC 10 isakmp
security acl 3001
ike-peer GRE_PEER
proposal GRE_ENC
!
interface GigabitEthernet0/0/0
ipsec policy GRE_OVER_IPSEC
3.2 验证配置
# 查看 GRE 隧道状态
display interface Tunnel0/0/0
Tunnel0/0/0 current state: UP
Description:
Internet Address: 10.255.255.1/30
Tunnel source 202.1.1.1, destination 203.1.1.1
Tunnel protocol/transport GRE/IP
# 查看 OSPF 邻居(通过 GRE 隧道建立)
display ospf peer
OSPF Process 1 with Router ID 1.1.1.1
Neighbors
Area 0.0.0.0 interface 10.255.255.1 (Tunnel0/0/0)
Router ID: 2.2.2.2
State: Full
Dead time: 00:00:35
# 查看 IPsec SA
display ipsec sa
Interface: GigabitEthernet0/0/0
SPI: 12345678
Encapsulation mode: tunnel
Encryption: aes-256
Authentication: sha256
Protocol: ESP
四、MTU 优化
4.1 开销计算
GRE over IPsec 的额外开销:
层级 开销(字节)
─────────────────────────────
内层 IP 头 20
GRE 头 4
外层 IP 头 20 ← GRE 封装
ESP 头 8 ← IPsec 封装
新 IP 头(隧道模式) 20
ESP 尾(含认证) 18
─────────────────────────────
总计 90 字节
有效载荷(链路 MTU=1500):
1500 - 90 = 1410 字节
4.2 优化配置
# 方案一:调整 Tunnel 接口 MTU
interface Tunnel0/0/0
mtu 1400 # 减少 Tunnel MTU
tcp adjust-mss 1360 # 修改 TCP MSS
!
# 方案二:IPsec DF 位处理
ipsec policy GRE_OVER_IPSEC 10 isakmp
df-bit clear # 允许分片(降低性能)
!
# 方案三:物理接口调整
interface GigabitEthernet0/0/0
mtu 1600 # 增大物理接口 MTU(需要链路支持)
五、故障排查
5.1 分层排查
排查 GRE over IPsec 故障的分层方法:
第 1 层:公网连通性
ping 202.1.1.2(对端公网地址)
第 2 层:IPsec 隧道
display ike sa
display ipsec sa
→ 确认 IPsec SA 已建立
第 3 层:GRE 隧道
display interface Tunnel0/0/0
→ 确认 UP
ping -a 10.255.255.1 10.255.255.2
第 4 层:OSPF/路由
display ospf peer
display ip routing-table
→ 确认路由学习正常
第 5 层:端到端连通性
ping -a 10.0.0.1 192.168.1.1
5.2 常见问题
问题 1:IPsec 策略未匹配 GRE 流量
症状:IPsec SA 未建立
检查:acl 是否正确匹配了 gre 协议?
display acl 3001
问题 2:GRE 隧道 UP 但 IPsec 未加密
症状:display ipsec sa 为空
检查:IPsec 策略是否应用到了物理接口而非 Tunnel 接口?
问题 3:MTU 导致的大包不通
症状:小包通,大包不通
检查:tcp adjust-mss 配置
六、总结
| 知识点 | 核心要点 |
|---|---|
| GRE over IPsec | GRE 提供多协议/组播支持,IPsec 提供加密 |
| 协议栈 | 内层 IP → GRE → 外层 IP → ESP → 新 IP |
| ACL 匹配 | 匹配 gre 协议(协议号 47)而非具体端口 |
| IPsec 位置 | 应用在物理接口,保护 GRE 流量 |
| MTU 开销 | ~90 字节,需 TCP MSS 调整 |
| 路由协议 | OSPF 可在 GRE 隧道上运行 |
七、思考
- 为什么在某些场景下需要 GRE over IPsec 而不是纯 IPsec?
- GRE over IPsec 的协议栈层次是怎样的?从最内层到最外层说明。
- IPsec ACL 应该匹配什么协议?为什么匹配的是 GRE 而不是 TCP/UDP?
- IPsec 策略应该应用在哪个接口(物理接口还是 Tunnel 接口)?为什么?
- 小包能通但大包不通是什么原因?如何解决?
下篇预告:第217篇《防火墙场景的 DNS 过滤与防域名劫持》——防火墙上的 DNS 安全策略,防范 DNS 劫持和恶意域名访问。