第216篇:GRE over IPsec 实现安全隧道

关键词

GRE over IPsec、安全隧道、组合加密、路由协议加密、组播加密、隧道优化、MTU 调优


一、为什么需要 GRE over IPsec

1.1 IPsec Alone 的局限性

纯 IPsec VPN 的限制:

  1. 不支持组播和广播 IPsec ESP 是点对点的单播加密 无法传输路由协议(OSPF 需要组播 224.0.0.5) 无法传输 DHCP 广播等

  2. 无法传输多协议 IPsec 只保护 IP 流量 无法传输 IPX、MPLS 等

  3. 配置复杂度(多站点场景) 每对站点需要独立的 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 隧道上运行

七、思考

  1. 为什么在某些场景下需要 GRE over IPsec 而不是纯 IPsec?
  2. GRE over IPsec 的协议栈层次是怎样的?从最内层到最外层说明。
  3. IPsec ACL 应该匹配什么协议?为什么匹配的是 GRE 而不是 TCP/UDP?
  4. IPsec 策略应该应用在哪个接口(物理接口还是 Tunnel 接口)?为什么?
  5. 小包能通但大包不通是什么原因?如何解决?

下篇预告:第217篇《防火墙场景的 DNS 过滤与防域名劫持》——防火墙上的 DNS 安全策略,防范 DNS 劫持和恶意域名访问。