GRE (Generic Routing Encapsulation)
干什么用的
两个内网想直连,但中间只有公网 —— 而内网地址(10.x)在公网上不可路由。
★★★ GRE 的办法极其朴素:把整个内网包当载荷,外面套一个公网可路由的 IP 头。公网只看外层,内层原样送到对面再拆开。
★★ 它还能承载非 IP 的东西(所以头里有个「协议类型」字段)。
和 IPsec 的分工
★★★ GRE 完全不加密 —— 它只解决「怎么把包送过去」,不解决「别人能不能看」。
★★★ 所以现网常见的是 GRE over IPsec:GRE 负责封装(能带组播、能跑路由协议),IPsec 负责加密。
★★ 为什么不直接用 IPsec?因为 IPsec 隧道不支持组播和多播路由协议,而 GRE 支持 —— 想在隧道里跑 OSPF 就得靠它。
★ 常见误解
★★★ 「GRE 是加密隧道」 —— 完全不加密,抓包能看到里面的原包。把它当 VPN 用是个安全事故。
★★★ 「隧道口配好就没事了」 —— 小心递归路由:如果去隧道对端的路由指向了隧道自己,隧道会反复自我封装然后崩掉。★ 所以对端地址必须走物理口的路由。
★★ 「开销不大」 —— 24 字节(新 IP 20 + GRE 4),MTU 要减到 1476;叠上 IPsec 就是 50~80 字节。