GRE 与 NAT 的配合是什么
GRE 是隧道封装协议,本身没有端口概念,IP 协议号为 47。NAT 设备靠端口区分不同的内部会话,而 GRE 没有端口可用,因此在 NAT 后面无法建立多路独立的 GRE 隧道,NAT 设备也可能直接丢弃协议 47 的报文。实际工程中的通行做法是把 GRE 放进 IPsec 里(GRE over IPsec),让外层封装的 UDP 端口(通常是 4500)承担穿越 NAT 的任务,或直接改用其他隧道方案。
基本信息
| 问题根源 | GRE 协议号 47,无端口,NAT 难以区分多路隧道 |
|---|---|
| 解决路径 | GRE over IPsec,或改用其他隧道方案 |
| 放行要求 | 中间设备需放行对应协议号或隧道封装端口 |
| 常见表现 | 隧道起不来、单通、隧道建立后业务偶发中断 |
| 连带影响 | 隧道封装增加开销,需同步调整 MSS 与 MTU |
典型使用场景
- 分支机构通过运营商网络建立隧道,中间存在 NAT 设备
- 更换出口设备后原 GRE 隧道无法建立,需要判断是否被 NAT 丢弃
- 多分支共用同一出口:多路隧道无法区分时的方案选型
- 隧道改造:从纯 GRE 改为 GRE over IPsec 后验证稳定性
- 排查业务偶发中断:确认是否与封装开销导致的 MTU 问题有关
- 中间设备策略复核:确认协议号与端口是否被放行
检查思路
检查思路
# 1. 抓包确认 GRE 报文是否到达设备(协议号 47)
# 2. 确认中间 NAT 设备是否丢弃协议 47 或无法承载多路隧道
# 3. 评估改造为 GRE over IPsec 封装(外层常见 UDP 4500)
# 4. 改造后验证隧道建立、稳定性与打通业务
# 5. 复测 MSS/MTU:封装开销会压缩可用载荷
# 6. 记录隧道标识与分支对应关系,便于后续扩展方案对照
| 方案 | 穿越 NAT 能力 | 注意事项 |
|---|---|---|
| 纯 GRE | 差,协议 47 无端口 | NAT 后基本不可用 |
| GRE over IPsec | 较好,外层走 UDP | 封装开销大,需调整 MSS |
| 仅 IPsec | 好 | 多分支需区分感兴趣流与标识 |
| 其他隧道方案 | 取决于封装方式 | 需评估设备支持与兼容性 |
隧道类改造后必须复测 MSS/MTU:封装头会占用字节,原先刚好通过的报文可能开始分片或被丢弃,表现为小包通、大包断。
多个分支共用一条隧道时区分依赖隧道标识,NAT 改造后需重新设计标识方式,否则分支流量可能相互串扰。