GRE只是一种封装方法。对于隧道和VPN操作的处理机制,例如如何建立隧道,如何保证数据的安全性,数据错误和意外发生时如何处理等,GRE本身并没有做出任何规范。GRE负责封装数据,其他VPN协议负责处理一切。
然而,GRE封装本身已经提供了足够建立VPN隧道的工具。GRE VPN正是基于GRE封装,以最简化的手段建立的VPN。GRE VPN用GRE把一个网络层协议封装在另一个网络层协议里,因此是一种第三层(网络层)VPN技术。
GRE VPN采用了隧道技术。两个站点的路由器之间通过公共网络连接彼此的物理接口,并依赖物理接口进行实际的通信。两个路由器上分别建立一个虚拟接口——Tunnel接口,两个Tunnel接口之间建立点对点的虚拟连接,就形成了一条跨越公共网络的隧道。物理接口具有承载协议的地址和相关配置,直接服务于承载协议;而Tunnel接口则具有载荷协议的地址和相关配置,负责为载荷协议服务。当然实际的载荷协议包需要经过GRE封装和承载协议封装,再通过物理接口传送。
由于IP已然成为最普遍应用的网络层协议,Internet也是基于IP的,所以以IP作为承载协议是最为常见的。
图5.19所示就是一个以IP公共网络作为承载网络的GRE VPN。A和B两个站点在LAN上运行IPX协议。然而IPX不能通过IP公共网络直接路由,于是在路由器A上创建虚拟接口Tunnel0,在路由器B上也创建虚拟接口Tunnel0,给这两个接口分配属于同一个网段的IPX地址。Tunnel0接口使用实际的物理接口S0/0发送数据。站点A和站点B的E0/0和Tunnel0接口均配置IPX地址,而S0/0接口具有公网IP地址。
图5.19 GRE隧道连接
从站点A发送到站点B的IPX包,实际上经过如下基本处理过程:
(1)根据IPX包的目标地址,查找IPX路由,找到一个出站接口;
(2)如果出站接口是GRE VPN的Tunnel0接口,即根据配置,对IPX包进行GRE封装和IP封装,变成一个IP包,其目的是RTB;
(3)经过RTA的物理接口S0/0发出此包;
(4)包穿越IP公共网,到达RTB;
(5)RTB解开封装,把IPX包递交给自己的相应Tunnel接口Tunnel0,再进行下一步的IPX路由。
大部分的组织已经使用IP构建Intranet,并使用私有地址空间。私有IP地址在公共网上是不可路由的。所以GRE VPN的主要任务是建立连接组织各个站点的隧道,跨越公共IP网络传送内部私网IP数据,如图5.20所示。
图5.20 IP over IP GRE隧道
站点A和站点B的E0/0和Tunnel0接口均具有私网IP地址,而S0/0接口具有公网IP地址。此时,要从站点A发送私网IP包到站点B,经过的基本过程如下:
(1)根据私网IP包的目标地址,查找路由表,找到一个出站接口:
(2)如果出站接口是GRE VPN的Tunnel0接口,即根据配置,对私网IP包进行GRE封装,再加以公网IP封装,变成一个公网IP包,其目的是RTB的公网地址;
(3)经过RTA的物理接口S0/0发出此包;
(4)此数据包穿越IP公共网,到达RTB;
(5)RTB解开封装,把得到的私网IP包递交给自己的相应Tunnel接口Tunnel0,再进行下一步IP路由,例如通过E0/0路由到站点B的私网。
无论是何种形式的GRE隧道,其基本处理流程都要包含以下内容:
(1)隧道起点设备根据载荷协议进行路由查找;
(2)起点设备根据隧道相关配置对报文进行封装;
(3)起点设备根据承载协议进行路由转发;
(4)中途设备根据承载协议相关路由信息进行转发;
(5)隧道终点设备对报文进行解封装;
(6)隧道终点根据载荷协议进行路由查找并转发。
1.隧道起点载荷协议路由查找
作为隧道发起端的RTA和隧道终结端的RTB必须同时具备连接私网和公网的接口,分别是E0/0和S0/0;同时也必须各具有一个虚拟的隧道接口,这里是Tunnel0。
当一个私网IP包到达RTA时,如果这个IP包的目的地址不属于RTA,则RTA需要执行正常的路由查找流程。处理过程如图5.21所示。RTA查看IP路由表,结果有以下可能:
(1)若找不到匹配项,则丢弃此包;
(2)若寻找到一条具有普通出站接口的路由,则执行正常转发流程;(www.xing528.com)
(3)若找到一条出站接口为Tunnel0的路由,则执行GRE VPN封装和转发流程。
2.封装
假设此私网数据包的下一跳已经确定,出站接口为Tunnel0,则此数据包理论上应该由Tunnel0接口发出。但是Tunnel0接口是虚拟的,并不能直接发送数据。所有数据必须经过GRE封装后转发。
图5.21 隧道起点路由查找
此时RTA需要从Tunnel0接口的配置中获得一系列参数。处理过程如图5.22所示。RTA首先得知需要使用GRE封装格式,于是在原私网IP包前添加GRE头,并填充适当的字段。同时RTA获知一个源地址和一个目标地址,作为最后构造的公网IP包的源地址和目标地址。这个源地址是RTA的任何一个公网IP地址,例如S0/0的地址;目标地址是隧道终点RTB的任何一个公网地址,例如S0/0的地址。当然,这两个地址在两台路由器上必须是一一对应的,也就是说在RTB上应该有恰恰相反的地址配置。另外,RTA和RTB双方的地址必须是互相可达的。之后,RTA利用这两个地址,为GRE封装包添加公网IP头,并填充其他适当的字段。这样,一个包裹着GRE头和私网IP包的公网IP包—也就是承载协议包—就出现了。接下来要执行的是对这个包的转发。
图5.22 加封装处理
3.承载协议路由转发
承载协议路由转发如图5.23所示。首先RTA针对这个公网IP包再次进行常规路由查找。查找的结果仍然可能有:
(1)若找不到匹配项,则丢弃此包;
(2)若寻找到一条路由,则执行正常转发流程。
图5.23 承载协议路由转发
假设RTA找到一条匹配的路由,则根据这条路由的下一跳地址转发此包。当然,不能排除仍存在递归查找的可能性,但是这些过程与普通的IP路由查找和转发没有区别,所以不再讨论。
4.中途转发
中途转发如图5.24所示。这个公网IP包现在必须通过公共IP网,到达RTB。如果RTA和RTB具有公网IP可达性,这个并不是问题,中途设备仅仅执行正常的路由转发功能即可。
图5.24 中途转发
5.解封装
公网IP包到达RTB之后,执行解封装,如图5.25所示。其过程如下:
(1)RTB检查IP地址,发现此数据包的目标是自己;
(2)RTB检查IP头,发现上层协议号47,表示此载荷为GRE封装;
(3)RTB解开IP头,检查GRE头,若无错误发生,则解开GRE头;
(4)RTB根据公网IP包的目的地址,将得到的私网IP包提交给相应的Tunnel接口,这里是Tunnel0。
图5.25 解封装
6.隧道终点载荷协议路由查找
Tunnel接口收到这个私网IP包后,处理方法与普通接口收到IP包时完全相同。如果这个IP包的目的地址也属于RTB,则RTB将此包解开转给上层协议处理,如果这个IP包的目的地址不属于RTB,则RTB需要执行正常的路由查找流程,如图5.26所示。RTB查看IP路由表,结果有以下可能:
图5.26 隧道终点载荷协议路由查找
(1)若找不到匹配项,则丢弃此包;
(2)若寻找到一条匹配的路由,则执行正常转发流程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。