在学习GRE隧道之前,我们首先需要了解GRE隧道是什么,它的作用是什么。 通用路由封装(GRE) 是一种协议,用于将使用一个路由协议的数据包封装在另一协议的数据包中。“封装”是指将一个数据包包装在另一个数据包中,就像将一个盒子放在另一个盒子中一样。GRE 是在网络上建立直接点对点连接的一种方法,目的是简化单独网络之间的连接。它适用于各种网络层协议。 要了解其工作原理,请想像一下汽车和渡轮之间的区别。汽车在陆地上行驶,而渡轮在水上行驶。汽车通常不能在水上行驶,但是可以将汽车装载到渡轮上。 在这个类比当中,地形类型好比是支持某些路由协议的网络,而车辆则好比是数据包。GRE 是一种将一种类型的数据包装载到另一种类型的数据包中的方式,以便第一个数据包可以穿越它通常无法穿越的网络,就像一种类型的运输工具(汽车)被装载到到另一种类型的运输工具(渡轮)上,以便穿越原本无法行驶的地形。 例如,假设一家公司需要在位于两个不同办公室的局域网(LAN)之间建立连接。两个 LAN 都使用最新版本的 互联网协议 IPv6。但是,为了从一个办公网络到达另一个办公网络,流量必须通过一个由第三方管理的网络 — 该网络有些过时,仅支持较旧的 IPv4 协议。 借助 GRE,该公司可以将 IPv6 数据包封装在 IPv4 数据包中,然后便可通过此网络传输流量。回到那个类比,IPv6 数据包是汽车,IPv4 数据包是渡轮,而第三方网络则是水。 使用GRE还可以克服IGP协议的一些局限性。 例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。 下面我们来做个小实验来体验一下GRE隧道。
图 1 GRE拓扑 对AR1做下面的配置: # 创建Tunnel接口 interface Tunnel0/0/1 # 配置IP地址 ip address 20.1.12.1 255.255.255.0 # 配置Tunnel接口的隧道协议 tunnel-protocol gre # 配置Tunnel源地址 source 10.1.12.1 # 指定Tunnel接口的目的IP地址 destination 10.1.12.2 # 配置一条静态路由指向Tunnel ip route-static 192.168.2.0 24 Tunnel 0/0/1 AR2上的配置与上面类似,这里就不再列出了。 我们在PC1上pingPC2。
我们抓取AR1与AR2之间传递的GRE报文。 Frame 3: 98 bytes on wire (784 bits), 98 bytes captured (784 bits) on interface 0 Ethernet II, Src: HuaweiTe_53:13:29 (00:e0:fc:53:13:29), Dst: HuaweiTe_d3:05:4f (00:e0:fc:d3:05:4f) Internet Protocol Version 4,Src: 10.1.12.2,Dst: 10.1.12.1 Generic Routing Encapsulation (IP) Flags and Version: 0x0000 Protocol Type: IP (0x0800) Internet Protocol Version 4,Src: 192.168.2.1,Dst: 192.168.1.1 Internet Control Message Protocol 可以看到外层的IP报文源目IP地址分别为10.1.12.2,10.1.12.1。内层源目IP地址则成了192.168.2.1,192.168.1.1。实现了在AR1与AR2之间的透明传输。 我们能够很清楚的看到从PC1到PC2传递的数据,这带来了安全隐患。我们可以对传递的数据进行加密处理。 而GRE本身并不支持加密,因而通过GRE隧道传输的流量是不加密的。我们将 IPSec技术与GRE相结合,先建立GRE隧道对报文进行GRE封装,然后再建立IPSec隧道对报文进行加密,这样就只可以保证报文传输的完整性和私密性。 我们下一期来讲解IPSec是如何进行报文加密的。
|