前面两篇讲清了 IPSec 的原理。这一篇讲实际怎么落地——尤其是那个绕不过去的选择:隧道里要不要跑路由协议。
两种常见拓扑
| 拓扑 | 形态 | 适用 | 问题 |
|---|---|---|---|
| 点对点 | 总部 ↔ 分支,一对一 | 只有两三个站点 | 站点一多,隧道数量 N² 增长 |
| Hub-Spoke | 所有分支都连总部(Hub),分支之间不直连 | 最常见的企业组网 | 分支之间互访要绕总部;Hub 是性能瓶颈和单点 |
Hub-Spoke 有个天然优势:总部只需要一个公网地址,分支可以用动态地址(拨号、DHCP)——因为只有分支主动连总部。这也是为什么分支侧常配「野蛮模式 + 动态对端」。
关键选择:隧道里跑不跑路由协议
这是实际项目里第一个要定的技术点,因为它决定了用纯 IPSec 还是 GRE over IPSec。
纯 IPSec 隧道为什么跑不了 OSPF
原因有两层:
- IPSec 的感兴趣流用 ACL 定义,而 ACL 只能匹配单播 IP 五元组——OSPF 用的是组播地址 224.0.0.5,匹配不上;
- IPSec 隧道是个「点对点策略」,不是接口——没有接口就没有邻居关系可言,ARP 也无处可发。
所以纯 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 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 点对点
# ── 总部(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 流量。
# ① 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
分支是动态地址怎么办
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 时,顺序不能错:
- 出方向:先 IPSec 加密,再 NAT。因为如果先 NAT,内网地址被改了,IPSec 的感兴趣流就匹配不上;
- 实际配置上:华为设备里 IPSec 在
ipsec policy绑到接口时,NAT 的nat-policy要用nat-policy里的规则把去往 VPN 对端的流量排除掉 NAT(deny 掉),否则会被 NAT 掉; - 隧道本身过 NAT(分支在 NAT 后面)→ 必须开 NAT-T,把 ESP 塞进 UDP 4500。
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 掉,隧道起不来
排错
- 隧道起不来,日志 no proposal chosen → 两端 proposal 无交集,逐项对比;
- 能 ping 通小包,大包丢 → MTU / MSS 问题(GRE over IPSec 必查)。验证方法:
ping -s 1400逐步加大包大小找临界值; - 隧道 Up 但只有单向通 → ACL 不是镜像关系;
- 分支在 NAT 后面建不起来 → 没开 NAT-T,或者对端不认识分支的源地址;
- 同时配了 NAT,隧道起不来 → NAT 把 VPN 流量也转了。加一条 deny 排除;
- 分支数量多,总部配置爆炸 → 改用
ipsec policy-template模板方式。
一句话总结:隧道里要跑 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 原样。