目 录 第1章 GRE简介1.1 GRE概述GRE是Generic Routing Encapsulation(通用路由封装)的简称。简单而言,GRE就是对某些网络层协议(如:IPV4,IPV6,IPX等)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IPV4,IPV6等)中传输。 GRE通过创建一条点到点的tunnel来完成二次封装数据的转发。 企业私有网络的IP地址通常是自己规划,无法和外部互联网进行正确的路由。而在企业网络的出口,通常会有一个互联网唯一的IP地址,这个地址可以在互联网中唯一识别出来。GRE就是对目的IP地址和源地址为企业内部地址的数据报文进行封装,加上一个IP头,其目的地址为远端机构互联网出口的IP地址,源地址为本地互联网出口的IP地址,从而通过互联网进行正确的传输,实现最简单的VPN技术。 实现VPN的应用只是GRE的功能之一,GRE的隧道功能还能为IPV4到IPV6的过渡发挥积极的作用。 1.2 GRE报文格式
GRE的报文由传递协议和负载协议构成,如图1.2?1所示。 图1.2?1 GRE报文格式 Delivery Header:传递协议的协议头在传递协议为IPv4的情况下,这里占用20个字节并且将协议号置为47,表明这个报文是GRE报文。 GRE Header:GRE协议头占用8个字节,其中包含了2个字节的Protocol Type,用于表明负载协议是什么类型,当负载协议为IP时需要将这两个字节数据标注为0x800。 Payload:负载协议的数据包。 1.3 GRE工作原理1.3.1 隧道源端的加封装过程当路由器发送或转发一个IP数据报时,如果IP数据报经路由查找要从GRE隧道接口发出,就需要进行GRE封装。在封装时需要根据该GRE隧道接口的选项设置情况进行GRE报头选项字段的处理,最后根据封装后的目的地址查找路由把数据报送到输出的网络接口,实现数据报的转发。 目前GER隧道的MTU是1476字节,如果要发送的数据报长度大于接口的MTU,还需要进行分片操作,然后再经过GRE封装后发出,即先分片后封装。当该IP数据报头DF位置1表明该数据包进行了分片,当接口接收到的报文大于自己的MTU时,则回送ICMP消息表明自己需要分片接收数据包(type为3,code为4,附带该接口的MTU)。 1.3.2 隧道对端的解封装过程当路由器收到一个IP数据报时,如果其目的地址是本地且其报头的协议字段为47,说明该数据报是经过GRE封装的,需要在本路由器上进行解析。 GRE报文经过合法性检查后,需要根据GRE报文的源地址和目的地址映射到本地保存的GRE隧道编号,若对应的GRE隧道不存在,则丢弃该数据报。 接着进行GRE选项的处理,目前我司路由器仅支持key选项而忽略其他选项。若GRE报头中flag字段的key标记与本路由器对应隧道的key标记不同,或者都置了key标记而key值不同,则丢弃该数据报。 把去除GRE封装的IP数据报头的TTL减1,然后进行进一步的处理。通过查找路由判断数据报是要本地投递还是转发。TTL的处理方法表明,藏在外网IP后的内网IP不会在隧道转发的过程中将TTL递减。 解封装时,如果内部IP头的地址是原封装设备,则会造成路由环路。要避免这种情况的发生。 1.4 设备版本信息
第2章 配置GRE2.1 GRE配置思路
GRE的主要配置步骤包括: 1. 创建隧道,设置隧道模式为GRE; 2. 配置隧道源地址和目的地址; 3. 配置私网路由的出口为tunnel接口或者将下一跳设置为对端的tunnel ip。 此外可根据需要启用密钥、tunnel sequence选项、tunnel checksum选项等。 2.2 GRE配置命令下面介绍GRE的主要配置命令。 1. 创建隧道,并进入该隧道接口配置模式
<tunnel-number>的格式为tunnel+<id>,如tunnel1,id取值范围在1~64。 2. 配置隧道为GRE隧道
3. 为所在隧道配置一个隧道源地址
4. 为所在隧道配置一个隧道目的地址
5. 为隧道配置密钥
隧道两端的密钥必须相同。 6. 配置本隧道启用tunnel sequence选项
7. 配置本隧道启用tunnel checksum选项
第3章 GRE配置实例3.1 网络拓扑
如图3.1?1所示,某公司为了连接两个部门之间的网络,启用了GRE构建隧道。规划中路由器的loopback作为tunnel source和tunnel destination,并设置两个私网地址作为tunnel地址,打通100.100.100.0/24和200.200.200.0/24的隧道通路。
![]()
图3.1?1 GRE典型配置组网 3.2 配置步骤
GER的fei_1/1连接的是100.100.100.0/24的内部网络,fei_1/2连接到运营商提供的公网接口,接口IP地址为 GER的配置: GER(config)#int loopback1 GER(config-if)#ip address GER(config)#int fei_1/1 GER(config-if)#ip address 100.100.100.1 255.255.255.0 GER(config)#int fei_1/2 GER(config-if)#ip address GER(config)#int tunnel1 GER(config-if)#ip address 172.16.1.1 255.255.255.252 GER(config-if)#tunnel mode gre ip GER(config-if)#tunnel source GER(config-if)#tunnel destination GER(config)#ip route GER(config)#ip route 200.200.200.0 255.255.255.0 tunnel1 GAR的配置: GAR(config)#int loopback1 GAR(config-if)#ip address GAR(config)#int fei_1/1 GAR(config-if)#ip address 200.200.200.1 255.255.255.0 GAR(config)#int fei_2/1 GAR(config-if)#ip address GAR(config)#int tunnel1 GAR(config-if)#ip address 172.16.1.1 255.255.255.252 GAR(config-if)#tunnel mode gre ip GAR(config-if)#tunnel source GAR(config-if)#tunnel destination GAR(config)#ip route GAR(config)#ip route 100.100.100.0 255.255.255.0 tunnel1 配置要点:要使tunnel接口协议up,tunnel source和tunnel destination之间必须路由可达。建议tunnel source和tunnel destination的IP地址取用设备的loopback,这样可以防止物理接口异常导致隧道故障,并充分利用公网上的冗余路由,保证GRE隧道的稳定性。Tunnel接口的IP地址可以用ip unnumber配置,但是推荐配置私有IP地址使配置更加清晰。 第4章 GRE维护与诊断使用以下命令可以检查Tunnel接口状态:
当GRE出现故障时,可以通过以下步骤确认问题。 1. 查看tunnel接口是否协议UP GER(config)#show ip interface brief 2. 检查tunnel source和tunnel destination之间是否路由可达 GER(config)#ping 3. 检查tunnel接口是否能够相互ping通 GER(config)#ping 172.16.1.2 source 172.16.1.1 |
|