网络安全之GRE
GREGRE 是一种隧道协议由 Cisco 开发后来成为标准RFC 2784以及增强版 RFC 2890 增加了 Key 和 Sequence Number。它的核心作用是将一种网络协议的数据报封装在另一种网络协议中传输。最常见的是IP over IP即把 IP 报文封装在另一个 IP 报文中。通俗理解就像把一个包裹原始IP包装进另一个包裹新IP头通过中间网络运送到达目的地后再拆开。为什么需要 GRE普通 IP 路由只能基于目的 IP 转发无法做到传递多播或广播报文IPsec 只能传递单播封装非 IP 协议如 IPX、AppleTalk在路由协议如 OSPF、EIGRP穿越 NAT 或非广播网络时保持邻居关系而 GRE 隧道可以把任意协议的数据包包括组播、广播封装在单播 IP 中穿越 Internet。为路由协议如 OSPF提供逻辑直连链路使两个远距离路由器成为“邻居”。GRE是可以支持组播的所以总部和分部可以运行OSPF这就是GRE非常大的优点。GRE的配置现在这个Tunne;10/0/0这个接口是Down的需要在这个隧道上配置地址这个接口要去处理IP报文的话协议上是要UP的将私网流量导入到隧道--路由的方式静态、动态AR3上配置GRE简单配置案例场景假设两个办公室分别使用私有 IP 网段192.168.1.0/24左边和192.168.2.0/24右边。它们通过公网 Internet连接公网 IP左路由器 R1 为1.1.1.1右路由器 R2 为2.2.2.2。需求让两个私网互通并且希望在隧道上运行动态路由协议如 OSPF以便自动学习对方的路由。方案在 R1 和 R2 之间建立GRE 隧道GRE over IPv4然后把两个私网的路由指向隧道接口。配置步骤1. 在 R1 上创建隧道接口interface Tunnel0 ip address 10.0.0.1 255.255.255.252 # 隧道两端的虚接口IP同子网 tunnel source 1.1.1.1 # 本端公网IP tunnel destination 2.2.2.2 # 对端公网IP tunnel protocol gre # 指定为GRE隧道默认可能就是gre2. 在 R2 上创建隧道接口interface Tunnel0 ip address 10.0.0.2 255.255.255.252 tunnel source 2.2.2.2 tunnel destination 1.1.1.1 tunnel protocol gre3. 添加路由静态或动态静态路由将对方私网指向隧道接口。# R1上 ip route 192.168.2.0 255.255.255.0 Tunnel0 # R2上 ip route 192.168.1.0 255.255.255.0 Tunnel0动态路由OSPF在 Tunnel0 上启用 OSPF让隧道两端形成邻居自动交换私网路由。报文封装过程核心知识点当 R1 内网192.168.1.10访问 R2 内网192.168.2.20时1. 原始 IP 包假设 TCP 80| IP头 (s192.168.1.10, d192.168.2.20) | TCP数据 |2.R1 查路由发现去往192.168.2.0/24的出口是 Tunnel0于是把该包交给隧道接口。3. 隧道封装GRE先加上GRE 头至少 4 字节包含协议类型 0x0800 表示内层是 IPv4。再加上新 IP 头源 IP 1.1.1.1目的 IP 2.2.2.2协议号 47表示 GRE。新 IP 头 GRE 头 原始 IP 包 完整的隧道报文。| 新IP头 (s1.1.1.1,d2.2.2.2, proto47) | GRE头 | 原始IP包 (s192.168.1.10,d192.168.2.20) |4. 公网转发该报文通过公网路由到达 R2公网路由器只看外层 IP 头。5. R2 解封装收到协议号47 的报文交给 GRE 处理模块。剥掉新 IP 头和 GRE 头恢复原始 IP 包。查路由目的192.168.2.20是本地直连转发给对应内网主机。关键点GRE 本身不加密、不认证所有数据在公网上是明文的。验证命令show interface Tunnel0 # 查看隧道接口状态是否 up/up show ip route | include Tunnel0 # 查看通过隧道路由 show ip ospf neighbor # 若跑OSPF查看邻居是否建立 ping 10.0.0.2 source 10.0.0.1 # 测试隧道直连IP