前面两篇讲清了 IPSec 的原理。这一篇讲实际怎么落地——尤其是那个绕不过去的选择:隧道里要不要跑路由协议。

两种常见拓扑

拓扑形态适用问题
点对点总部 ↔ 分支,一对一只有两三个站点站点一多,隧道数量 N² 增长
Hub-Spoke所有分支都连总部(Hub),分支之间不直连最常见的企业组网分支之间互访要绕总部;Hub 是性能瓶颈和单点

Hub-Spoke 有个天然优势:总部只需要一个公网地址,分支可以用动态地址(拨号、DHCP)——因为只有分支主动连总部。这也是为什么分支侧常配「野蛮模式 + 动态对端」。

关键选择:隧道里跑不跑路由协议

这是实际项目里第一个要定的技术点,因为它决定了用纯 IPSec 还是 GRE over IPSec。

纯 IPSec 隧道与 GRE over IPSec 的能力差异与封装层次对比
▲ 两种方案的差异,以及多一层 GRE 头带来的封装变化

纯 IPSec 隧道为什么跑不了 OSPF

原因有两层:

所以纯 IPSec 隧道里只能配静态路由,或者用 BGP(BGP 用单播 TCP 179 建邻居,能被 ACL 匹配)。

判断口诀:隧道里要跑 OSPF / EIGRP 这类靠组播建邻居的协议 → 必须 GRE over IPSec。只是静态路由或 BGP → 纯 IPSec 更省事。

GRE over IPSec 的代价

开销项大小
GRE 头24 字节(4 字节基本头 + 4 字节协议类型 + 4 字节密钥 + 4 字节序列号 + 8 字节?实际 4+4+4+4 = 16 起,带 key/seq 到 24)
ESP 头 + 尾约 20~30 字节(含 IV、填充、认证数据)
新 IP 头20 字节

加起来轻松超过 60 字节。所以 GRE over IPSec 的 Tunnel 接口 MTU 要往下调(常见调到 1400 或更低),否则大包会被分片甚至丢弃——最典型的现象是「ping 通但网页打不开、能登录但传不了文件」。

MTU 计算
物理口 MTU 1500
  - 新 IP 头 20
  - ESP 头 + 尾 ≈ 30(AES-256 + SHA-256 时更多)
  - GRE 头 24
  ─────────────
  = 1426  ← Tunnel 接口 MTU 至少要调到这个值以下

华为上直接配:
interface Tunnel0/0/0
 mtu 1400
 tcp adjust-mss 1360          # ★ 同时改 TCP MSS,双保险

★ 只调 MTU 不改 MSS,TCP 大包依然会被丢
★ 这是 GRE over IPSec 最高频的"能连不能用"故障

华为配置:纯 IPSec 点对点

huawei · 站点到站点 IPSec(隧道模式 + ESP + IKEv2)
# ── 总部(200.1.1.1,内网 192.168.1.0/24)──

# ① 感兴趣流
acl number 3000
 rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255

# ② IKE 提议(两端要有交集)
ike proposal 10
 encryption-algorithm aes-256
 authentication-algorithm sha2-256
 dh group14
 authentication-method pre-share
 sa duration 86400

# ③ IKE peer
ike peer branch1 v2
 pre-shared-key cipher Huawei@123
 ike-proposal 10
 remote-address 200.1.2.1
 dpd interval 10 retransmit 3        # ★ 必配

# ④ IPSec 提议
ipsec proposal prop1
 esp encryption-algorithm aes-256
 esp authentication-algorithm sha2-256
 encapsulation-mode tunnel

# ⑤ 策略并绑定
ipsec policy policy1 10 isakmp
 security acl 3000
 ike-peer branch1
 proposal prop1
 sa duration time-based 3600

# ⑥ 应用到出接口
interface GigabitEthernet0/0/0
 ip address 200.1.1.1 24
 ipsec policy policy1

# ⑦ 去分支内网的路由
ip route-static 192.168.2.0 255.255.255.0 200.1.2.1

华为配置:GRE over IPSec

思路是分两层做:先建 GRE 隧道(跑路由协议),再用 IPSec 保护 GRE 流量。

huawei · GRE over IPSec
# ① GRE 隧道接口(★ 注意 MTU 和 MSS)
interface Tunnel0/0/0
 ip address 10.255.255.1 30
 tunnel-protocol gre
 source 200.1.1.1
 destination 200.1.2.1
 mtu 1400
 tcp adjust-mss 1360

# ② 在隧道上跑 OSPF(这就是纯 IPSec 做不到的事)
ospf 1
 area 0.0.0.0
  network 10.255.255.0 0.0.0.3

# ③ 感兴趣流:只保护 GRE 流量(协议号 47)
acl number 3000
 rule 5 permit gre source 200.1.1.1 0 destination 200.1.2.1 0
# ★ 不是匹配内网网段!是匹配两个隧道端点之间的 GRE 报文

# ④ 其余 IKE / IPSec 配置与纯 IPSec 完全相同
#    只是 acl 3000 换成了上面这条

# ★ 顺序很重要:GRE 先封装 → IPSec 再加密 GRE 报文
#   抓包时看到的是 ESP,解出来里面是 GRE

分支是动态地址怎么办

huawei · 分支侧(动态 IP)
ike peer hq v2
 exchange-mode aggressive           # ★ 野蛮模式,不依赖固定 IP
 local-id type name branch1          # 用名字标识自己
 remote-id type name hq              # 用名字标识对端
 pre-shared-key cipher Huawei@123
 remote-address 200.1.1.1

# ★ 总部侧要用模板方式(ipsec policy-template)来接受任意分支
#   否则每来一个分支就得加一条 policy,没法维护
ipsec policy-template tmpl 1
 security acl 3000
 ike-peer hq
 proposal prop1

ipsec policy policy1 100 isakmp template tmpl

NAT 场景:NAT 与 IPSec 的顺序

设备同时做 NAT 和 IPSec 时,顺序不能错:

huawei · 排除 VPN 流量不做 NAT
acl number 3001
 rule 5 deny ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255
 rule 10 permit ip source 192.168.1.0 0.0.0.255     # 其余流量才做 NAT

nat-policy
 rule name snat-out
  source-zone trust
  destination-zone untrust
  source-address 192.168.1.0 24
  action source-nat easy-ip
# ★ 上面这条 deny 必须先于 permit 生效,否则 VPN 流量被 NAT 掉,隧道起不来

排错

一句话总结:隧道里要跑 OSPF 就用 GRE over IPSec,只走静态路由或 BGP 就用纯 IPSec。GRE 方案的必修课是 MTU/MSS;分支动态地址用野蛮模式 + 模板;同时做 NAT 时记得把 VPN 流量排除掉。

📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)

合并了原始笔记中「IPSEC 配置 / IPSEC VPn / GRE OVER IPSEC」三页。
原笔记以组网图与配置片段为主,本文把两种方案的取舍讲透,并补上了 GRE 头开销的具体计算、MTU/MSS 这对"能连不能用"的元凶、以及 NAT 与 IPSec 的执行顺序。
配置命令保留华为 VRP 原样。