GRE协议介绍

项目背景

IPv6的部署大致要经历一个渐进的过程,在初始阶段,IPv4的网络海洋中会出现若干局部零散的IPv6孤岛,为了保持通信,这些孤岛通过跨越IPv4的隧道彼此连接;随着IPv6规模的应用,原来的孤岛逐渐聚合成为了骨干的IPv6 Internet网络,形成于IPv4骨干网并存的局面,在IPv6骨干上可以引入了大量的新业务,同时可以充分发挥IPv6的诸多优势。

为了实现IPv6和IPv4网络资源的互访,还需要转换服务器以实现v6和v4的互通;最后,IPv4骨干网逐步萎缩成局部的孤岛,通过隧道连接,IPv6占据了主导地位,具备全球范围的连通性。

IPv6提供很多过渡技术来实现上述这样一个演进过程。这些过渡技术围绕两类问题解决:

① IPv6孤岛互通技术:实现IPv6网络和IPv6网络的互通。

② IPv6和IPv4互通技术:实现两个不同网络之间互相访问资源。

目前,解决上述问题的基本过渡技术有两种:双栈和隧道。

① 双栈:即设备升级到IPv6的同时保留IPv4支持,可以同时访问IPv6和IPv4设备,包含双协议栈支持,应用程序依靠DNS地址解析返回的地址类型,来决定使用何种协议栈。

② 隧道:通过在一种协议中承载另一种协议,实现跨越不同域的互通,具体可以是IPv6-in-IPv4,IPv6-in-MPLS,IPv4-in-IPv6等隧道类型。

GRE隧道(VPN)

GRE与IP in IP、IPX over IP等封装形式很相似,但比他们更通用。在GRE的处理中,很多协议的席位差异都被忽略,这使得GRE不限于某个特定的“X over Y”应用,而是一种最基本的封装形式。

在最简单的情况下,路由器接收到一个需要封装和路由的原始数据报文(Payload),这个报文首先被GRE封装而成GRE报文,接着被封装在IP协议中,然后完全由IP层负责此报文的转发。

原始报文的协议被称之为乘客协议,GRE被称之为封装协议,而负责转发的IP协议被称之为传递(Delivery)协议或传输(Transport)协议。注意到在以上的流程中不用关心乘客协议的具体格式或内容,整个被封装的报文格式:

------------------------------- | Delivery Header | | (Transport Protocol) | ------------------------------- | GRE Header | | (Encapsulation Protocol | ------------------------------- | Payload Packet | | (Passenger Protocol) | -------------------------------

GRE报头的格式如下:

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |C|R|K|S|s|Recur| Flags | Ver | Protocol Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum (optional) | Offset (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Key (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Routing (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

GRE隧道原理:

1、封装

Ingress PE从连接X协议的接口接收到X协议报文后,首先交由X协议处理。

X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。

根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。

根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。

2、解封装

解封装过程和封装过程相反。

Egress PE从GRE Tunnel接口收到该报文,分析IP头发现报文的目的地址为本设备,则Egress PE去掉IP头后交给GRE协议处理。GRE协议剥掉GRE报头,获取X协议,再交由X协议对此数据报文进行后续的转发处理。

配置:

左边为R3,右边为R4

R3:配置公网IP:

interface GE0/3/4

ip address 34.0.0.3/24

no shutdown

!

配置私网IP:

interface GE0/1/3

ip address 13.0.0.3/24

no shutdown

!

配置GRE Tunnel:

interface tunnel100

tunnel mode gre

tunnel source 34.0.0.3

tunnel destination 34.0.0.4

ip address 192.168.100.3/24 //和对方Tunnel IP在同一网段

no shutdown

!

配置路由:

ip route 0.0.0.0/0 34.0.0.4 //到公网默认路由

ip route 24.0.0.0/24 tunnel100 //到对方私网路由通过Tunnel 100访问

!

R4:

配置公网IP:

interface GE0/3/4

ip address 34.0.0.4/24

no shutdown

!

配置私网IP:

interface GE0/2/4

ip address 24.0.0.4/24

no shutdown

!

配置GRE Tunnel:

interface tunnel100

tunnel mode gre

tunnel source 34.0.0.4

tunnel destination 34.0.0.3

ip address 192.168.100.4/24 //和对方Tunnel IP在同一网段

no shutdown

!

配置路由:

ip route 0.0.0.0/0 34.0.0.3 //到公网默认路由

ip route 13.0.0.0/24 tunnel100 //到对方私网路由通过Tunnel 100访问

!

在R4上ping R3的私网地址13.0.0.3,抓包如下:

GRE报文解析:

GRE头各字段解释:

目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。

GRE安全机制

GRE本身提供两种基本的安全机制:校验和验证,识别关键字。

1、校验和验证

校验和验证是指对封装的报文进行端到端校验。

若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。

隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。

2、识别关键字

识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。

RFC1701中规定:若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。

关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。

GRE的Keepalive检测

由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成数据空洞。

GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免因对端不可达而造成的数据丢失,有效防止数据空洞,保证数据传输的可靠性。

Keepalive检测功能的实现过程如下:

当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。

对端每收到一个探测报文,就给源端发送一个回应报文。

如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。

对于设备实现的GRE Keepalive检测功能,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。

GRE具有如下的优点:

1.多协议的本地网可以通过单一协议的骨干网实现传输;

2.将一些不能连续的子网连接起来,用于组建VPN;

3.扩大了网络的工作范围,包括那些路由网管有限的协议。如IPX包最多可以转发16次(即经过16个路由器),而在一个Tunnel连接中看上去只经过一个路由器。

由于GRE是将一个数据包封装到另一个数据包中,因此可能会遇到GRE的数据报大于网络接口所设定的数据包最大尺寸的情况。解决这种问题的方法是在隧道接口上配置ip tcp adjust-mss 1436。另外,虽然GRE并不支持加密,但是可以通过Tunnel key命令在隧道的两头各设置一个密钥。

这个密钥其实就是一个明文的密码。由于GRE隧道没有状态控制,可能隧道的一端已经关闭,而另一端仍然开启。这一问题的解决方案就是在隧道两端开启keepalive数据包,它可以让隧道一端定时向另一端发送keepalive数据,确认端口保持开启状态。如果隧道的某一端没有按时收到keepalive数据,那么这一侧的隧道端口也会关闭。

IPSec(VPN)

IPSec(IP Security)是一组开放协议的总称,特定的通信方之间的IP层通过加密与数据源验证,以保证数据包在Internet网上传输时的私有性、完整性和真实性。IPSec通过AH(Authentication Header)和ESP(Encapsulating Security Payload)这两个安全协议来实现。

AH在IP包中的位置(隧道方式):

------------------- ------------------------------ | IP | TCP | Data | ----------> | IP2 | AH | IP | TCP | Data | ------------------- ------------------------------

ESP将需要保护的用户数据进行加密后再封装到IP包中,ESP可以保证数据的完整性、真实性和私有性。

ESP头在IP包中的位置(隧道方式):

------------------- ------------------------------------------------ | IP | TCP | Data | ----------> | IP2 | ESP | IP | TCP | Data | Trailer | Auth | ------------------- ------------------------------------------------

IPv6 over IPv4隧道

在IPv4网络向IPv6网络过渡的初期,IPv4网络已被大量部署,而IPv6网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv4网络上创建隧道,从而实现IPv6孤岛之间的互连。

在IPv4网络上用于连接IPv6孤岛的隧道成为IPv6 over IPv4隧道。为了实现IPv6 over IPv4隧道,需要在IPv4孤岛的隧道称为IPv6 over IPv4隧道。为了实现IPv6 over IPv4隧道,需要在IPv4网络与IPv6网络交界的边界路由设备商启动IPv4/IPv6双协议栈。

IPv6 over IPv4隧道技术的原理:

① 边界路由设备启动IPv4/IPv6双协议栈,并配置IPv6 over IPv4隧道。

② 边界路由设备在收到从IPv6网络侧发来的报文后,如果报文的目的地址不是自身且下一跳出接口为Tunnel接口,就要把收到的IPv6报文作为负载,加上Ipv4报文头,封装成IPv4报文。

③ 在IPv4网络中,封装后的报文被传递到对端的边界路由设备。

④ 对端边界路由设备对报文解封装,去掉IPv4报文头,然后将封装后的IPv6报文发送到对端的IPv6网络中。

⑤ 其他隧道原理类似。

IPv4 over IPv6隧道

在IPv4 Internet向IPv6 Internet过渡后期,IPv6网络被大量部署后,而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值