GRE简介
介绍GRE的定义和受益。
定义
通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。
受益
GRE实现机制简单,对隧道两端的设备负担小。
GRE隧道可以通过IPv4网络连通多种网络协议的本地网络,有效利用了原有的网络架构,降低成本。
GRE隧道扩展了跳数受限网络协议的工作范围,支持企业灵活设计网络拓扑。
GRE隧道可以封装组播数据,和IPSec结合使用时可以保证语音、视频等组播业务的安全。
GRE隧道将不连续的子网连接起来,用于组建VPN,实现企业总部和分支间安全的连接。
GRE基本原理实现过程报文在GRE隧道中传输包括封装和解封装两个过程。如图2-1所示,如果X协议报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成,而解封装在Egress PE上进行。封装后的数据报文在网络中传输的路径,称为GRE隧道。 图2-1 通过GRE隧道实现X协议互通组网图
封装
Ingress PE从连接X协议网络的接口接收到X协议报文后,首先交由X协议处理。 X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。 根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。 根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。
关于封装后详细的报文格式,请参见报文格式。 解封装 解封装过程和封装过程相反。
报文格式GRE封装后的报文格式如图2-2所示。乘客协议(Passenger Protocol):封装前的报文称为净荷,封装前的报文协议称为乘客协议。 封装协议(Encapsulation Protocol):GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。 传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
图2-2 GRE报文结构
GRE头的各字段解释如表2-1所示。 表2-1 GRE头的各字段解释[td]
GRE头字段 | | C | 校验和验证位。- 该位置1,表示GRE头插入了校验和(Checksum)字段。
- 该位置0,表示GRE头不包含校验和字段。
| K | 关键字位。- 该位置1,表示GRE头插入了关键字(Key)字段。
- 该位置0,表示GRE头不包含关键字字段。
| Recursion | 表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 说明:
| Flags | 预留字段。当前必须置为0。 | Version | 版本字段。必须置为0。 | Protocol Type | 标识乘客协议的协议类型。常见的乘客协议为IPv4协议,协议代码为0800。 Ethernet over GRE协议的协议代码为0x6558。 | Checksum | 对GRE头及其负载的校验和字段。 | Key | 关键字字段,隧道接收端用于对收到的报文进行验证。 |
因为目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。
GRE的安全机制 GRE本身提供两种基本的安全机制:
校验和验证
识别关键字
校验和验证 校验和验证是指对封装的报文进行端到端校验。
若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。
识别关键字 识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。
若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。
关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。
配置GRE隧道 介绍如何在IPv4网络中配置GRE隧道。
前置任务 在配置GRE隧道之前,需完成以下任务: 实现源接口和目的接口之间路由可达。关于路由的详细配置请参见IP单播路由配置指南。 配置流程 请按照以下顺序配置GRE隧道。对于可选步骤,请根据情况选择配置。
通过GRE透传的X协议
对应任务
网络层协议(如IPX、ATM、IPv6、AppleTalk等)
配置Tunnel接口
配置Tunnel接口的路由
(可选)配置GRE的安全机制
(可选)使能GRE的Keepalive检测功能
PPP协议
配置Tunnel接口
配置Link-bridge功能
(可选)配置GRE的安全机制
(可选)使能GRE的Keepalive检测功能
以太协议
配置Tunnel接口
配置Tunnel接口的路由
配置Link-bridge功能或配置Ethernet over GRE功能
(可选)配置GRE的安全机制
(可选)使能GRE的Keepalive检测功能
配置Tunnel接口 配置Tunnel接口的路由 (可选)配置Link-bridge功能 (可选)配置GRE的安全机制 (可选)使能GRE的Keepalive检测功能 (可选)配置Ethernet over GRE功能 (可选)配置Ethernet over mGRE功能 (可选)配置GRE隧道与BFD会话的绑定关系 配置GRE隧道与BFD会话的绑定关系,通过BFD会话检测链路状态。 检查GRE配置结果 配置Tunnel接口
背景信息
GRE隧道是通过隧道两端的Tunnel接口建立的,所以需要在隧道两端的设备上分别配置Tunnel接口。对于GRE的Tunnel接口,需要指定其协议类型为GRE、源地址或源接口、目的地址和Tunnel接口IP地址。
Tunnel的源地址:配置报文传输协议中的源地址。当配置地址类型时,直接作为源地址使用。当配置类型为源接口时,取该接口的IP地址作为源地址使用。
Tunnel的目的地址:配置报文传输协议中的目的地址。
Tunnel接口IP地址:为了在Tunnel接口上启用动态路由协议,或使用静态路由协议发布Tunnel接口,需要为Tunnel接口分配IP地址。Tunnel接口的IP地址可以不是公网地址,甚至可以借用其他接口的IP地址以节约IP地址。但是当Tunnel接口借用IP地址后,该地址不能直接通过tunnel口互通,因此在借用IP地址情况下,必须配置静态路由或路由协议先实现借用地址的互通性,才能实现Tunnel的互通。
操作步骤
执行命令system-view,进入系统视图。
执行命令interface tunnel interface-number,创建Tunnel接口,并进入Tunnel接口视图。
执行命令tunnel-protocol gre,配置Tunnel接口的隧道协议为GRE。
(可选)执行命令gre key { plain key-number | [ cipher ] plain-cipher-text },设置GRE隧道的识别关键字。
当设备之间只有一条物理链路且源地址和目的地址只能取一个时,由于只能配置一个源地址和目的地址相同的Tunnel接口,因此不能承载不同的业务流量。为了解决上述问题,系统支持配置两条或两条以上源地址和目的地址相同的Tunnel接口,通过命令gre key配置不同的GRE Key字段来区分这些GRE隧道,从而可以承载不同的业务流量。
若将多条GRE隧道配置为相同的源地址和目的地址,建议先配置gre key,否则会提示隧道配置冲突。
执行命令source { source-ip-address | interface-type interface-number },配置Tunnel的源地址或源接口。
配置Tunnel的源接口时,有如下注意事项:
Tunnel的源接口不能指定为自身GRE隧道的Tunnel接口,但可以指定为其他隧道的Tunnel接口。
Tunnel的源地址可以配置为VRRP备份组的虚地址。
Bridge-if接口不可配置为Tunnel的源接口。
执行命令destination [ vpn-instance vpn-instance-name ] dest-ip-address,配置Tunnel的目的地址。
如果CE设备通过GRE隧道连接到PE,则PE上配置Tunnel的目的地址时,需要指定VPN实例,将Tunnel接口加入私网路由表。
(可选)执行命令tunnel route-via interface-type interface-number { mandatory | preferred },指定GRE隧道的路由出接口。
缺省情况下,未指定GRE隧道的路由出接口。
GRE隧道封装后的报文将查找路由转发表进行转发,如果GRE隧道的目的地址存在等价路由且存在多条目的地址相同的GRE隧道,则这些GRE隧道封装的报文将以负载分担进行转发。此时某些GRE隧道封装后报文的实际出接口可能是另一个隧道的源IP接口。如果该链路上下一跳设备配置了URPF(Unicast Reverse Path Forwarding)检测,则以报文的源IP做为目的IP,在转发表中查找源IP对应的接口是否与入接口匹配,因此会发现报文源IP对应的接口与报文的入接口不一致,则认为报文非法并丢弃。为了解决这个问题,可以配置tunnel route-via命令指定GRE隧道路由出接口,使报文严格或优先从隧道的源IP地址所在的出接口转发。
通过设置mandatory和preferred参数选择下列两种模式:
mandatory:严格按照指定的出接口转发流量,如果GRE隧道目的地址的路由出接口不包含指定的出接口时,隧道接口状态为Down,不进行流量转发。
preferred:优先按照指定的出接口转发流量,如果GRE隧道目的地址的路由出接口不包含指定的出接口时,则可以选择其他接口转发,隧道接口状态为Up。
(可选)执行命令mtu mtu,配置Tunnel接口的MTU。
缺省情况下,Tunnel接口的MTU值为1500。
如果改变Tunnel接口最大传输单元MTU,需要先对接口执行shutdown命令,再执行undo shutdown命令将接口重启,以保证设置的MTU生效。
(可选)执行命令description text,配置接口的描述信息。
缺省情况下,Tunnel接口默认描述信息为“HUAWEI, AR Series, Tunnel interface-number Interface”。
例如,缺省情况下,Tunnel0/0/1接口默认描述信息为“HUAWEI, AR Series, Tunnel0/0/1 Interface”。
指定Tunnel接口的IP地址,选择如下方法之一:
创建IP地址
若是采用GRE隧道实现IPv4协议的互通,必须在Tunnel接口下配置IPv4地址:
执行命令ip address ip-address { mask | mask-length } [ sub ],配置Tunnel接口的IPv4地址。
若是采用GRE隧道实现IPv6协议的互通,必须在Tunnel接口下配置IPv6地址:
执行命令ipv6 address { ipv6-address prefix-length | ipv6-address/prefix-length },配置Tunnel接口的IPv6地址。
配置接口的IPv6地址前,需要在系统视图下使用命令ipv6使能IPv6报文转发功能,并在该接口下使用命令ipv6 enable使能接口的IPv6功能。
借用IP地址
执行命令ip address unnumbered interface interface-type interface-number,配置Tunnel接口借用IP地址。
设备不支持借用IPv6地址。
(可选)执行命令qos group qos-group-value,配置报文所属的QoS组。
缺省情况下,系统没有配置报文所属的QoS组。
该命令仅对GRE协议和DSVPN协议生效,其他协议类型支持配置但不生效。
该命令只在报文加封装的过程中生效,解封装过程不生效。即仅对入方向报文生效。
配置Tunnel接口的路由背景信息在保证本端设备和远端设备在骨干网上路由互通的基础上,本端设备和远端设备上必须存在经过Tunnel接口转发的路由,这样,需要进行GRE封装的报文才能正确转发。经过Tunnel接口转发的路由可以是静态路由,也可以是动态路由。 如图2-10所示,X网络协议为PPP协议时,如果要实现其协议报文在IP网络透传,则配置Tunnel接口的路由不生效,而需(可选)配置Link-bridge功能。
如图2-10所示,以Router_1为例,有如下注意事项。配置静态路由时,源端设备和目的端设备都需要配置:此路由目的地址是未进行GRE封装的报文的原始目的地址(Router_2的GE2/0/0所在的网段地址),出接口是本端Tunnel接口(Router_1的Tunnel0/0/1接口)。 配置动态路由协议时,在Tunnel接口和与X网络协议相连的接口上都要使用该动态路由协议。 例如,在图2-10中,如果使用动态路由协议配置Tunnel接口的路由,则Tunnel接口和接入X网络协议的GE2/0/0接口上都需要配置动态路由协议,并且路由表中去往Router_2的GE2/0/0网段的出接口是Tunnel0/0/1。 实际配置时,Tunnel接口路由和骨干网的路由需要采用不同类型的路由协议或者同类型协议的不同进程,避免用户报文通过物理接口转发,而不是通过Tunnel接口转发。 当在Tunnel接口使用动态路由并使能路由引入功能时,请将通往目的地址的路由配置为动态路由或是32位主机路由实现互通,避免通往目的地址的路由发布到Tunnel接口路由上,导致隧道震荡。
图2-10 配置GRE动态路由协议组网图
操作步骤
|