GRE协议原理与华为设备配置实践

一、GRE协议基础原理

(一)GRE协议定义与特点

通用路由封装(Generic Routing Encapsulation,GRE)是一种隧道协议,主要用于将一种网络层协议的数据报文封装在另一种网络层协议中传输,属于VPN的第三层隧道协议。GRE协议的核心功能是通过建立虚拟点对点连接,解决异构网络间的通信问题,支持IPv4、IPv6、IPX等多种协议的封装传输。

GRE协议具有以下核心特点:

  1. 协议无关性:GRE能够封装多种网络层协议的数据报文,使其能够在不同的网络环境中传输,形成虚拟的点对点连接,即GRE隧道。这种特性使得GRE可以连接使用不同协议的网络。
  2. 简单高效:GRE是一种轻量级隧道协议,其基本头部只有4个字节(在C、K、S等标志位都为0的情况下),对设备性能影响较小,不需要维护复杂的隧道状态。
  3. 支持组播:与IPSec等安全协议不同,GRE能够封装组播报文,这使得动态路由协议的组播报文可以通过GRE隧道传输,从而在VPN网络中运行动态路由协议。
  4. 灵活性强:GRE可以与IPsec等安全协议结合使用,形成GRE over IPSec架构,既利用GRE的组播支持能力,又通过IPsec提供数据加密和完整性保护。
  5. 扩展网络范围:通过在网络中使用GRE隧道可以隐藏一部分跳数,从而扩大网络的工作范围,解决跳数受限协议(如RIP)的工作范围限制问题。

(二)GRE协议工作原理

GRE协议的工作原理主要包括封装和解封装两个过程,这两个过程在隧道入口端(Ingress PE)和隧道出口端(Egress PE)分别完成。

封装过程发生在隧道入口端,具体步骤如下:

  1. 当设备(如Router A)连接Group 1的接口收到X协议报文后,首先交由X协议处理。
  2. X协议检查报文头中的目的地址域来确定如何路由此包。若报文的目的地址要经过Tunnel才能到达,则设备将此报文发给相应的Tunnel接口。
  3. Tunnel接口收到此报文后进行GRE封装,添加GRE头部。GRE头部包含标志位、协议类型等字段,其中协议类型标识乘客协议类型。
  4. 在封装IP报文头后,设备根据此IP包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。

解封装过程发生在隧道出口端,与封装过程相反:

  1. Router B从Tunnel接口收到IP报文,检查目的地址。如果发现目的地是本路由器,则Router B剥掉此报文的IP报头,交给GRE协议处理。
  2. GRE协议进行检验密钥、检查校验和及报文的序列号等验证操作。
  3. GRE协议完成相应的处理后,剥掉GRE报头,再交由X协议对此数据报进行后续的转发处理。

GRE隧道设计为无状态机制,这意味着隧道本身不维护连接状态,每个数据包都被独立处理。这种设计简化了协议实现,但也意味着需要额外的机制来检测隧道连通性,因此GRE支持Keepalive功能来检测链路是否可用。

GRE使用IP协议号47标识,当IPv4被作为GRE有效载荷传输时,协议类型字段必须被设置为0x800。当一个隧道终点拆封此含有IPv4包作为有效载荷的GRE包时,IPv4包头中的目的地址必须用来转发包,并且需要减少有效载荷包的TTL。值得注意的是,在转发这样一个包时,如果有效载荷包的目的地址就是包的封装器(也就是隧道另一端),就会出现回路现象。在此情形下,必须丢弃该包。

二、GRE报文格式与字段解析

(一)GRE报文结构组成

GRE报文由三部分组成:净荷(Payload)、GRE头部和传输协议头部。这种三层结构设计使得GRE能够灵活地封装各种网络层协议,并在不同的传输协议中传输。

  1. 净荷(Payload):净荷是需要封装和传输的原始数据报文,其协议类型称为乘客协议(Passenger Protocol)。乘客协议可以是IPv4、IPv6、IPX、AppleTalk等多种网络层协议。
  2. GRE头部:GRE头部是封装协议添加的报文头,包含控制信息和协议标识字段。GRE头部是GRE协议的核心部分,决定了如何处理封装的报文。
  3. 传输协议头部:传输协议头部负责对封装后的报文进行转发,传输协议可以是IPv4或IPv6。传输协议头部的源地址是隧道源接口地址,目的地址是隧道目的接口地址。

GRE报文的三层结构可以用以下方式表示:

|--------|----------|--------------------|
| 层级 | 组成部分 | 功能描述 |
| 外层 | 传输协议头部 | 负责报文在骨干网中的路由转发 |
| 中层 | GRE头部 | 提供封装控制信息和协议标识 |
| 内层 | 净荷(乘客协议) | 原始数据报文,如IPv4、IPv6等 |

这种分层结构使得GRE协议能够在不同的网络环境中传输多种协议的数据报文,实现了协议无关性和网络透明性。

(二)GRE头部字段详解

GRE头部包含多个字段,每个字段都有特定的功能和含义。一个最简单的GRE头部只有4个字节,即在C、K、S等标志位都为0的情况下,GRE头部仅包含第0到31位的信息。GRE头部各字段的详细含义如下:

|---------------------|--------|-------------------------------------|
| 字段名称 | 位数 | 功能描述 |
| C(校验和位) | 1 | 设置为1表示Checksum字段有效;0表示Checksum字段不生效 |
| K(关键字位) | 1 | 设置为1表示头部中Key字段有效;0表示Key字段不生效 |
| Recursion(递归) | 3 | 表示报文被封装的层数,每封装一次该值加1,最多封装3次 |
| Flags(标志位) | 5 | 预留字段,值为0 |
| Version(版本) | 3 | 版本号,值为0 |
| Protocol Type(协议类型) | 16 | 乘客协议类型,如IPv4为0x0800,IPv6为0x86DD |
| Checksum(校验和) | 16 | 对GRE头部和负载计算校验和,只有当C位为1时有效 |
| Key(关键字) | 32 | 关键字信息,用于隧道接收端验证,只有当K位为1时有效 |

GRE头部的关键字段功能如下:

  1. 协议类型字段:标识乘客协议类型,一般情况下,该协议字段与以太网帧的类型字段值相同。例如,IPv4协议代码为0x0800,IPv6协议代码为0x86DD。
  2. 校验和字段:当C位为1时,发送方根据GRE头及Payload信息计算校验和,并将包含校验和信息的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进行进一步处理,否则丢弃。
  3. 关键字字段:当K位为1时,发送方在发送的报文中携带其本地配置的GRE Key,接收方收到报文后,将报文中的GRE Key与接收方本地配置的GRE Key进行比较,如果一致则对报文进行进一步处理,否则丢弃。
  4. 递归字段:表示报文被封装的层数,每封装一次该值加1,最多封装3次,超过则丢弃报文。这一机制防止报文被无限次封装,避免网络环路。

GRE头部字段的灵活设计使得GRE协议能够适应不同的应用场景,通过设置不同的标志位和字段值,可以实现不同的功能,如安全验证、协议识别等。

三、华为设备GRE隧道配置基础

(一)GRE隧道配置准备工作

在华为设备上配置GRE隧道之前,需要完成一系列准备工作,确保配置能够顺利进行。这些准备工作包括网络规划、设备准备和基础配置等方面。

  1. 网络规划与设计
    • 确定隧道源地址和目的地址,这两个地址必须是公网可达的IP地址。
    • 规划隧道接口的IP地址,隧道两端的IP地址应在同一网段。
    • 确定需要通过隧道传输的流量类型和协议,以便后续配置路由和安全策略。
  2. 设备准备与检查
    • 确保设备软件版本支持GRE功能,部分旧版本可能不支持某些GRE特性,如GRE Key验证。
    • 检查设备接口状态,确保用作隧道源接口的物理接口状态正常。
    • 确认设备资源充足,GRE隧道会占用一定的系统资源。
  3. 基础配置检查
    • 配置物理接口IP地址,确保源地址对应的物理接口已配置公网IP。
    • 确保源接口和目的接口之间路由可达,这是GRE隧道建立的基础条件。
    • 配置设备的基本网络参数,如主机名、时钟等。

配置前的准备工作检查列表如下:

|---------|-------------|-----------------------------------------|
| 检查项 | 要求 | 检查方法 |
| 设备软件版本 | 支持所需GRE特性 | display version |
| 物理接口状态 | UP状态 | display interface brief |
| 源接口路由可达 | 能够ping通目的地址 | ping 目的地址 |
| 系统资源 | CPU、内存使用率正常 | display cpu-usage, display memory-usage |

完成这些准备工作后,就可以开始GRE隧道的基本配置。良好的准备工作可以避免后续配置中的许多常见问题,提高配置成功率和网络稳定性。

(二)GRE隧道基本配置步骤

华为设备GRE隧道的基本配置步骤包括创建Tunnel接口、配置GRE协议、设置隧道参数和配置路由等。以下是详细的配置步骤和命令解析。

  1. 创建Tunnel接口并配置GRE协议

system-viewinterface Tunnel 0tunnel-protocol greip address 192.168.1.1 255.255.255.0source 202.100.1.1destination 202.100.1.2

这些命令中,tunnel-protocol gre指定隧道协议为GRE;ip address配置隧道接口的IP地址;source参数指定隧道源地址(通常是公网接口IP);destination参数指定隧道目的地址(对端公网IP)。

  1. 配置物理接口IP地址

interface GigabitEthernet0/0/1ip address 202.100.1.1 255.255.255.252

这确保了隧道源接口有正确的IP地址配置,是隧道建立的基础。

  1. 安全区域设置

firewall zone untrustadd interface GigabitEthernet0/0/1firewall zone trustadd interface GigabitEthernet0/0/0firewall zone tunneladd interface Tunnel0

这些命令将物理接口和隧道接口分配到对应安全区域,通常将公网接口加入untrust区域,内网接口加入trust区域,隧道接口加入自定义的tunnel区域。

  1. 安全策略配置

security-policyrule name GRE_Permitsource-zone untrustdestination-zone localservice protocol greaction permitrule name Tunnel_Trafficsource-zone trustdestination-zone tunnelaction permit

GRE使用IP协议号47,需放行公网接口间通信。这些安全策略允许GRE协议通信和隧道承载流量。

  1. NAT豁免配置

nat-policyrule name No_NATsource-zone trustdestination-zone tunnelsource-address 192.168.1.0 24action no-nat

这防止隧道流量被错误NAT转换,确保隧道流量正常传输。

  1. 路由配置

ip route-static 10.1.2.0 255.255.255.0 Tunnel0

这添加静态路由确保隧道对端网段路由指向隧道接口,是隧道流量正确转发的关键。

(三)GRE隧道配置验证与测试

配置完成后,需要进行验证和测试以确保GRE隧道正常工作。华为设备提供了多种命令用于验证GRE隧道配置和状态。

  1. 检查Tunnel接口状态

display interface Tunnel 0

此命令显示Tunnel接口的详细状态信息,包括接口是否UP、IP地址、封装协议、源地址和目的地址等。关键信息包括:

    • Tunnel接口状态应为UP
    • 隧道协议应为GRE
    • 源地址和目的地址应正确配置
  1. 测试隧道连通性

ping -a 202.100.1.1 202.100.1.2ping 192.168.1.2traceroute 10.1.2.1

这些命令分别测试公网连通性、隧道接口连通性和通过隧道的端到端连通性。如果所有测试都成功,表明GRE隧道配置正确且工作正常。

  1. 检查隧道信息

display tunnel-info all

此命令显示所有隧道的详细信息,包括隧道类型、源地址、目的地址等。

  1. 检查路由表

display ip routing-table

确认路由表中存在通过Tunnel接口转发的路由条目。

  1. 可选配置验证:如果配置了Keepalive功能,可以使用以下命令查看GRE隧道接口发送给对端以及从对端接收的Keepalive报文数量:

display keepalive packets count

通过这些验证和测试命令,可以全面检查GRE隧道的配置和运行状态,及时发现和解决问题,确保隧道正常工作。

四、华为设备GRE配置实践案例

(一)IPv4 over IPv4 GRE隧道配置案例

IPv4 over IPv4 GRE隧道是最常见的GRE应用场景,用于在IPv4网络中建立虚拟点对点连接,实现两个IPv4网络之间的通信。下面是一个实际的配置案例。

组网需求:DeviceA、DeviceB、DeviceC属于IPv4骨干网,它们之间运行OSPF协议。需要在DeviceA和DeviceC之间建立直连链路,因此部署GRE隧道,通过静态路由指定到达对端的报文通过Tunnel接口转发,实现PC1和PC2相互通信。

配置思路

  1. 设备运行IPv4动态路由协议实现骨干网互通
  2. 在DeviceA和DeviceC上创建Tunnel接口,指定Tunnel的源地址和目的地址
  3. 配置Tunnel接口的网络地址
  4. 配置到各自相连的PC的静态路由,出接口为本端的Tunnel接口

DeviceA配置

<Huawei> system-view

Huawei sysname DeviceA

DeviceA interface GigabitEthernet0/0/0

DeviceA-GigabitEthernet0/0/0 ip address 10.1.1.1 255.255.255.0

DeviceA-GigabitEthernet0/0/0 quit

DeviceA interface GigabitEthernet0/0/1

DeviceA-GigabitEthernet0/0/1 ip address 192.168.1.1 255.255.255.252

DeviceA-GigabitEthernet0/0/1 quit

DeviceA interface Tunnel0

DeviceA-Tunnel0 ip address 10.1.2.1 255.255.255.252

DeviceA-Tunnel0 tunnel-protocol gre

DeviceA-Tunnel0 source 192.168.1.1

DeviceA-Tunnel0 destination 192.168.1.2

DeviceA-Tunnel0 quit

DeviceA ospf 1

DeviceA-ospf-1 area 0

DeviceA-ospf-1-area-0.0.0.0 network 10.1.1.0 0.0.0.255

DeviceA-ospf-1-area-0.0.0.0 network 192.168.1.0 0.0.0.255

DeviceA-ospf-1-area-0.0.0.0 quit

DeviceA-ospf-1 quit

DeviceA ip route-static 10.1.3.0 255.255.255.0 Tunnel0

DeviceC配置

<Huawei> system-view

Huawei sysname DeviceC

DeviceC interface GigabitEthernet0/0/0

DeviceC-GigabitEthernet0/0/0 ip address 10.1.3.1 255.255.255.0

DeviceC-GigabitEthernet0/0/0 quit

DeviceC interface GigabitEthernet0/0/1

DeviceC-GigabitEthernet0/0/1 ip address 192.168.1.2 255.255.255.252

DeviceC-GigabitEthernet0/0/1 quit

DeviceC interface Tunnel0

DeviceC-Tunnel0 ip address 10.1.2.2 255.255.255.252

DeviceC-Tunnel0 tunnel-protocol gre

DeviceC-Tunnel0 source 192.168.1.2

DeviceC-Tunnel0 destination 192.168.1.1

DeviceC-Tunnel0 quit

DeviceC ospf 1

DeviceC-ospf-1 area 0

DeviceC-ospf-1-area-0.0.0.0 network 10.1.3.0 0.0.0.255

DeviceC-ospf-1-area-0.0.0.0 network 192.168.1.0 0.0.0.255

DeviceC-ospf-1-area-0.0.0.0 quit

DeviceC-ospf-1 quit

DeviceC ip route-static 10.1.1.0 255.255.255.0 Tunnel0

验证配置:在DeviceA上执行ping命令测试到PC2的连通性:

ping -a 10.1.1.1 10.1.3.1

如果能够ping通,表明GRE隧道配置成功,两个IPv4网络可以通过GRE隧道正常通信。

(二)IPv6 over IPv4 GRE隧道配置案例

IPv6 over IPv4 GRE隧道用于在IPv4网络中传输IPv6数据包,是实现IPv6过渡的重要技术之一。下面是一个IPv6 over IPv4 GRE隧道的配置案例。

实验目标:R1与R2之间通过创建一条IPv6 over IPv4的GRE隧道实现双方IPv6网络互访。

R1配置

<Huawei> system-view

Huawei sysname R1

R1 ipv6

R1 interface GigabitEthernet0/0/0

R1-GigabitEthernet0/0/0 ip address 202.100.1.1 255.255.255.252

R1-GigabitEthernet0/0/0 quit

R1 interface GigabitEthernet0/0/1

R1-GigabitEthernet0/0/1 ipv6 enable

R1-GigabitEthernet0/0/1 ipv6 address 2001:DB8:1::1 64

R1-GigabitEthernet0/0/1 quit

R1 interface Tunnel0

R1-Tunnel0 ipv6 enable

R1-Tunnel0 tunnel-protocol gre

R1-Tunnel0 ipv6 address 2001:DB8:100::1 64

R1-Tunnel0 source 202.100.1.1

R1-Tunnel0 destination 202.100.1.2

R1-Tunnel0 quit

R1 ipv6 route-static 2001:DB8:2:: 64 Tunnel0

R2配置

<Huawei> system-view

Huawei sysname R2

R2 ipv6

R2 interface GigabitEthernet0/0/0

R2-GigabitEthernet0/0/0 ip address 202.100.1.2 255.255.255.252

R2-GigabitEthernet0/0/0 quit

R2 interface GigabitEthernet0/0/1

R2-GigabitEthernet0/0/1 ipv6 enable

R2-GigabitEthernet0/0/1 ipv6 address 2001:DB8:2::1 64

R2-GigabitEthernet0/0/1 quit

R2 interface Tunnel0

R2-Tunnel0 ipv6 enable

R2-Tunnel0 tunnel-protocol gre

R2-Tunnel0 ipv6 address 2001:DB8:100::2 64

R2-Tunnel0 source 202.100.1.2

R2-Tunnel0 destination 202.100.1.1

R2-Tunnel0 quit

R2 ipv6 route-static 2001:DB8:1:: 64 Tunnel0

验证配置:在R1上执行ping命令测试到R2的IPv6地址连通性:

ping ipv6 -a 2001:DB8:1::1 2001:DB8:2::1

如果能够ping通,表明IPv6 over IPv4 GRE隧道配置成功,两个IPv6网络可以通过IPv4骨干网正常通信。

(三)Ethernet over GRE配置案例

Ethernet over GRE功能用于实现分支与总部之间的二层互通。分支与总部的网络都是以太网络,之间通过IP/MPLS骨干网相连。下面是一个Ethernet over GRE的配置案例。

组网需求:Network_1和Network_2网络都是以太网络,两个网络之间通过IP/MPLS骨干网相连,需要实现二层互通。

工作原理:SwitchA的用户侧物理以太网接口收到分支网络的以太报文后,在设备内基于MAC和VLAN进行二层转发,找到出接口VE接口,将以太报文转发到VE接口绑定的Tunnel接口,经过GRE封装(协议代码为0x6558)后,通过GRE隧道转发至SwitchB。SwitchB的Tunnel接口对收到的报文进行GRE解封装,检查到协议代码为0x6558后,将以太报文转发给Tunnel接口绑定的VE接口,然后在设备内基于MAC和VLAN进行二层转发,找到出接口,将以太报文发往总部网络。

SwitchA配置

<Huawei> system-view

Huawei sysname SwitchA

SwitchA interface Virtual-Ethernet1

SwitchA-Virtual-Ethernet1 portswitch

SwitchA-Virtual-Ethernet1 port link-type trunk

SwitchA-Virtual-Ethernet1 port trunk allow-pass vlan 10

SwitchA-Virtual-Ethernet1 quit

SwitchA interface Tunnel0

SwitchA-Tunnel0 tunnel-protocol gre

SwitchA-Tunnel0 source 192.168.1.1

SwitchA-Tunnel0 destination 192.168.1.2

SwitchA-Tunnel0 tunnel ve 1

SwitchA-Tunnel0 quit

SwitchA interface GigabitEthernet0/0/1

SwitchA-GigabitEthernet0/0/1 portswitch

SwitchA-GigabitEthernet0/0/1 port link-type trunk

SwitchA-GigabitEthernet0/0/1 port trunk allow-pass vlan 10

SwitchA-GigabitEthernet0/0/1 quit

SwitchA interface GigabitEthernet0/0/2

SwitchA-GigabitEthernet0/0/2 ip address 192.168.1.1 255.255.255.252

SwitchA-GigabitEthernet0/0/2 quit

SwitchB配置

<Huawei> system-view

Huawei sysname SwitchB

SwitchB interface Virtual-Ethernet1

SwitchB-Virtual-Ethernet1 portswitch

SwitchB-Virtual-Ethernet1 port link-type trunk

SwitchB-Virtual-Ethernet1 port trunk allow-pass vlan 10

SwitchB-Virtual-Ethernet1 quit

SwitchB interface Tunnel0

SwitchB-Tunnel0 tunnel-protocol gre

SwitchB-Tunnel0 source 192.168.1.2

SwitchB-Tunnel0 destination 192.168.1.1

SwitchB-Tunnel0 tunnel ve 1

SwitchB-Tunnel0 quit

SwitchB interface GigabitEthernet0/0/1

SwitchB-GigabitEthernet0/0/1 portswitch

SwitchB-GigabitEthernet0/0/1 port link-type trunk

SwitchB-GigabitEthernet0/0/1 port trunk allow-pass vlan 10

SwitchB-GigabitEthernet0/0/1 quit

SwitchB interface GigabitEthernet0/0/2

SwitchB-GigabitEthernet0/0/2 ip address 192.168.1.2 255.255.255.252

SwitchB-GigabitEthernet0/0/2 quit

验证配置:在SwitchA上执行ping命令测试到SwitchB的连通性:

ping 192.168.1.2

如果能够ping通,表明Ethernet over GRE隧道配置成功。需要注意的是,目前Ethernet over GRE作为二层隧道,支持VLAN下的单播、广播报文经过隧道转发,不支持组播报文经过隧道转发。

五、GRE高级功能与安全机制

(一)GRE Keepalive检测功能

GRE协议本身不具备检测链路状态的功能,如果远端端口不可达,隧道不能及时关闭Tunnel连接,会导致源端不断向对端转发数据,而对端因隧道不通而丢弃所有报文,形成数据空洞。Keepalive检测功能可以时刻检测隧道链路状态,当对端不可达时及时关闭隧道连接,避免数据丢失,保证数据传输的可靠性。

Keepalive检测功能原理:当GRE隧道源端使能Keepalive检测功能后,会创建一个定时器,周期性地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。对端每收到一个探测报文,就会给源端发送一个回应报文。如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达,并将不可达计数清零。如果源端的计数器值达到预先设置的重试次数时,还没收到回送报文,就认为对端不可达,此时源端将关闭隧道连接。

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

华为设备上配置GRE Keepalive检测功能:在华为设备上配置GRE Keepalive检测功能的命令是在Tunnel接口视图下执行:

keepalive period period \[retry-times retry-times]

其中:

  • period参数指定Keepalive检测报文的发送周期,默认值为5秒
  • retry-times参数指定Keepalive检测报文的重传次数,默认值为3

例如,配置keepalive 5 3表示Keepalive检测报文的发送周期为5秒,重传次数为3次。如果在指定的重传次数内未收到对端的回应报文,则认为隧道两端通信失败,GRE隧道将被拆除。

配置示例

interface Tunnel 0keepalive 10 5

此配置表示Keepalive检测报文的发送周期为10秒,重传次数为5次。

验证Keepalive配置:配置完成后,可以通过执行display interface tunnel命令查看GRE的Keepalive功能是否使能,以及报文的发送周期和重传次数等参数。还可以使用display keepalive packets count命令查看GRE隧道接口发送给对端以及从对端接收的Keepalive报文数量。

需要注意的是,模式为GRE over IPv6隧道的Tunnel接口不支持keepalive命令。此外,当使能GRE隧道的Keepalive功能时,可能会存在由于产品ACL资源不足导致Tunnel接口频繁出现Up和Down的现象。建议在配置此功能时同时使能接口的control-flap功能,以减少对设备和网络稳定性的影响。

(二)GRE安全机制与验证功能

GRE本身提供两种基本的安全机制:校验和验证和识别关键字验证。这些安全机制虽然不如IPSec等协议强大,但在某些场景下可以提供基本的安全保障。

1. 校验和验证机制

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

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

2. 识别关键字(Key)验证机制

识别关键字验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。当GRE报文头中的K位为1时,在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。

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

3. 华为设备上配置GRE安全机制

在华为设备上配置GRE安全机制时,可以通过以下命令实现:

system-viewinterface Tunnel 0# 使能GRE隧道的校验和功能gre checksum# 配置GRE隧道的识别关键字gre key { plain key-number | cipher plain-cipher-text }

如果在隧道两端的Tunnel接口配置识别关键字,则必须指定相同的识别关键字,或者隧道两端都不配置此命令。如果使用plain选项,识别关键字将以明文形式保存在配置文件中,存在安全隐患,建议使用cipher选项,将识别关键字加密保存。

4. GRE安全机制比较

|----------|--------------------------|----------------|----------------|----------------|
| 安全机制 | 工作原理 | 优点 | 缺点 | 适用场景 |
| 校验和验证 | 对GRE头及Payload计算校验和,接收方验证 | 防止传输过程中的数据损坏 | 不提供身份验证和加密 | 不可靠网络环境,防止传输错误 |
| 关键字验证 | 收发双方配置相同的关键字进行验证 | 简单的身份验证,防止错误接收 | 安全性较弱,关键字可能被嗅探 | 需要基本身份验证的场景 |

5. GRE与IPSec结合使用

由于GRE本身不提供数据加密功能,是一种轻量级的隧道协议,为了增强安全性,通常将GRE与IPSec协议结合使用,形成GRE over IPSec方案。IPSec提供数据加密和完整性校验,而GRE提供多协议封装能力和组播支持。

在这种组合方案中,GRE首先将组播报文封装成单播报文,封装后的单播报文就可以经过IPSec隧道发送到对端网络。这种结合使用的方式既利用了GRE的组播支持能力,又通过IPSec提供了数据安全性。

GRE over IPSec的配置通常包括以下步骤:

  1. 配置GRE隧道
  2. 配置IPSec安全策略
  3. 将IPSec策略应用到GRE隧道的物理接口上

需要注意的是,在配置GRE over IPSec时,最容易出错的是ACL规则配置。ACL应该匹配的是GRE封装后的公网IP头,而不是原始数据包或隧道接口地址。常见错误包括:源目地址颠倒、使用隧道接口地址、过于宽松的匹配规则等。

六、GRE协议应用场景与最佳实践

(一)GRE协议典型应用场景

GRE协议凭借其灵活性和协议无关性,在实际网络中有广泛的应用场景。以下是GRE协议的典型应用场景分析。

1. 企业分支互联

GRE隧道常用于连接分布在不同地区的分支机构。例如,某跨国企业需连接20个分支机构,可采用GRE over IPsec方案实现安全通信。配置时,总部与分支需配置GRE隧道接口,使用静态路由指向对端隧道地址,并在GRE隧道外层封装IPsec ESP协议,提供数据加密和完整性校验。

在这种场景下,GRE隧道的优势在于:

  • 支持多种协议,可以连接不同协议的网络
  • 配置简单,不需要复杂的协议转换
  • 与IPSec结合使用,既提供安全性又支持组播流量

2. IPv6过渡解决方案

在IPv6过渡过程中,GRE提供两种过渡模式:手动隧道和6to4隧道。手动隧道固定配置隧道源/目的地址,适用于稳定连接场景;6to4隧道自动从IPv6地址中提取IPv4嵌入地址,简化大规模部署。

运营商可在核心路由器配置GRE隧道接口,绑定公网IPv4地址,边缘设备将IPv6数据封装为GRE-over-IPv4格式,对端解封装后恢复IPv6报文,实现跨域传输。这种方式的优势在于:

  • 不需要升级整个网络到IPv6
  • 可以逐步过渡到IPv6
  • 支持IPv6协议的全部功能

3. 混合云组网

在云环境中,GRE隧道可用于连接VPC与本地数据中心。例如,在VPC端配置隧道规则,指定远端路由器IP、协议类型、密钥、本端和对端点对点IP以及目标网络;在数据中心路由器上进行对称配置。这种配置方式支持VPC作为中心节点与多数据中心连接,形成星型拓扑,实现灵活的网络互联。

混合云组网中GRE隧道的优势:

  • 配置简单,不需要复杂的VPN设备
  • 支持多种云平台
  • 可以实现本地数据中心与云资源的无缝集成

4. 扩展网络跳数限制

某些路由协议(如RIP)有跳数限制,通常限制在15跳。通过在网络中使用GRE隧道可以隐藏一部分跳数,从而扩大网络的工作范围。GRE隧道对中间网络设备来说是"一跳",但实际上可能跨越了多个物理网络设备。

5. 连接不连续子网

使用GRE隧道可以将不连续的子网连接起来,实现跨越广域网的VPN。例如,两个地理位置分散的部门需要使用相同的IP子网,可以通过GRE隧道连接,使它们在逻辑上处于同一个网络中。

|----------|------------------|------------------|------------------------|
| 应用场景 | 主要需求 | GRE优势 | 配置要点 |
| 企业分支互联 | 安全、可靠地连接分支机构 | 支持多种协议、与IPSec结合 | 配置GRE over IPSec、静态路由 |
| IPv6过渡 | 在IPv4网络中传输IPv6流量 | 协议无关性、支持IPv6全部功能 | 配置IPv6 over IPv4 GRE隧道 |
| 混合云组网 | 连接本地数据中心与云资源 | 配置简单、跨平台支持 | 配置GRE隧道连接VPC与本地网络 |
| 扩展跳数限制 | 突破协议跳数限制 | 隐藏中间网络跳数 | 在适当位置配置GRE隧道 |
| 连接不连续子网 | 连接地理分散的相同子网 | 逻辑上连接不同物理网络 | 配置GRE隧道连接相同子网 |

(二)GRE配置注意事项与故障排查

在华为设备上配置GRE隧道时,需要注意多个方面以确保隧道正常建立和运行。以下是GRE配置的注意事项和常见问题排查方法。

1. GRE配置注意事项

  • 源接口选择:隧道的源接口不能指定为自身的Tunnel接口,但可以指定为其他隧道的Tunnel接口。对于使用三维Tunnel接口的GRE(集中式GRE),创建Tunnel接口时,Tunnel接口的槽位号必须与源端接口绑定的隧道业务板的槽位号保持一致,若不一致将导致GRE隧道无法成功建立。
  • 路由可达性:配置前需确保源接口和目的接口之间路由可达,这是GRE隧道建立的基础条件。源端设备和目的端设备上都必须存在经过Tunnel转发的路由,需要进行GRE封装的报文才能正确转发。
  • MTU配置:GRE封装会增加报文长度(通常增加24字节),如果报文长度超过接口MTU,可能会导致分片或报文丢弃。对于IPv4 GRE承载IPv6报文的情况,如果报文长度超过接口MTU,不支持MTU分片,报文会被丢弃。建议将GRE隧道的MTU设置为1476字节,避免分片问题。
  • Keepalive配置:当使能GRE隧道的Keepalive功能时,可能会存在由于产品ACL资源不足导致Tunnel接口频繁出现Up和Down的现象。建议在配置此功能时同时使能接口的control-flap功能,以减少对设备和网络稳定性的影响。

2. 常见问题及排查方法

  • 隧道接口状态为Down
    • 检查两端Tunnel接口封装模式是否一致
    • 检查两端Tunnel接口是否配置了IP地址,且互为源、目的IP地址
    • 检查Destination是否存在路由,Destination一定要在设备上有路由可达
    • 如果Tunnel口在震荡,查看Destination的路由出接口是否还是Tunnel,GRE不允许自己的Destination的路由出接口还是GRE Tunnel
  • MTU相关问题
    • 对于IPv4 GRE隧道不使能PATHMTU
    • 如果IPV4 GRE隧道使能PATHMTU且需要承载IPV6报文,则检查IPV4 GRE隧道中间节点转发接口的IPV4 MTU配置,避免出现IPV4 MTU小于1312的情况
    • 对于IPv6 GRE隧道,需检查IPV6 GRE隧道中间节点转发接口的IPV6 MTU配置,避免出现IPV6 MTU小于1332的情况
  • GRE Key配置问题
    • 部分华为设备支持配置GRE Key作为安全机制,用于防止接收非法GRE报文
    • 两端设备必须配置相同密钥才能建立隧道
    • 若设备固件版本较旧,可能不支持该命令,建议升级至支持GRE Key的软件版本
  • GRE over IPSec配置问题
    • ACL应该匹配的是GRE封装后的公网IP头,而不是原始数据包或隧道接口地址
    • 常见错误包括:源目地址颠倒、使用隧道接口地址、过于宽松的匹配规则等
    • 修复配置后,需要重置相关会话以使更改生效

3. 故障排查流程

当GRE隧道出现问题时,可以按照以下流程进行排查:

  1. 检查接口物理状态

display interface brief

如果物理状态为Down,排查接口配置问题。

  1. 检查Tunnel接口状态

display interface tunnel interface-number

查看Tunnel接口状态、封装协议、源地址和目的地址等配置。

  1. 检查路由配置

display ip routing-table

确认路由表中存在通过Tunnel接口转发的路由条目。

  1. 测试连通性

ping -a source-ip-address destination-ip-addresstraceroute destination-ip-address

测试公网连通性和通过隧道的端到端连通性。

  1. 检查安全策略

display security-policy

确认安全策略允许GRE流量(协议号47)通过。

  1. 检查Keepalive状态

display keepalive packets count

查看GRE隧道接口发送给对端以及从对端接收的Keepalive报文数量。

通过系统性的排查,可以快速定位和解决GRE隧道配置中的问题,确保隧道正常工作。

相关推荐
二哈赛车手1 小时前
新人笔记---继图片搜索功能后续以及AI网络搜索功能一些经验与踩坑点,吐槽一下自己在做这方面的崩溃瞬间
java·网络·人工智能·spring boot·笔记·spring
米丘1 小时前
HTTP 传输层 TCP 三次握手 / 四次挥手
前端·网络协议·http
酿情师1 小时前
区块链网络与跨链操作03:矿池网络协议
网络·网络协议·区块链
jingling5552 小时前
Flutter | 商城项目鸿蒙(OpenHarmony)适配实战
android·开发语言·前端·flutter·华为·harmonyos
小雨下雨的雨2 小时前
房产登记交易系统鸿蒙PC Electron框架技术实现详解
前端·华为·electron·harmonyos·鸿蒙·鸿蒙系统
cc4422bb2 小时前
bgp联邦
网络
草莓熊Lotso2 小时前
【Linux网络】深入理解 HTTP 协议(三):静态资源服务、状态码与重定向实战
linux·运维·服务器·网络·c++·http
y = xⁿ2 小时前
HTTP 和 HTTPS 的区别
网络协议·http·https
2501_919749032 小时前
鸿蒙 Flutter 实战:package_info_plus 10.1.0 适配 3.27-ohos 全流程
flutter·华为·harmonyos