GRE VPN(Generic Routing Encapsulation)即通用路由封装协定,是对某些网路层协定(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网路层协定(如IP)中传输。
GRE是VPN(Virtual Private Network)的第三层隧道协定,即在协定层之间採用了一种被称之为Tunnel(隧道)的技术。
基本介绍
- 中文名:通用路由封装协定
- 外文名:Generic Routing Encapsulation
- 简称:GRE VPN
- 特点:GRE是一个标準协定,能够实施QOS
GRE的特点
- GRE是一个标準协定
- 支持多种协定和多播
- 能够用来创建弹性的VPN
- 支持多点隧道
- 能够实施QOS
GRE的缺点
- 缺乏加密机制
- 没有标準的控制协定来保持GRE隧道(通常使用协定和keepalive)
- 隧道很消耗CPU
- 出现问题要进行DEBUG很困难
- MTU和IP分片是一个问题
GRE协定栈
GRE的协定栈,如下图:

GRE包封装格式
GRE的包封装格式,如下图:

常见GRE载荷协定号
如下图:

IP over IP 的GRE封装
GRE over IPv4典型配置举例(路由套用)

GRE VPN基本配置
- 创建虚拟Tunnel接口
[H3C]interface tunnelnumber - 指定Tunnel的源端
[H3C-Tunnel0]source{ip-addr/interface-type/interface-num} - 指定Tunnel的目的端
[H3C-Tunnel0]destinationip-address - 设定Tunnel接口的网路地址
[H3C-Tunnel0]ip addressip-address mask - 配置通关Tunnel的路由
GRE over IPv4典型配置举例(路由套用)
组网需求
路由器Router A和路由器Router B之间通过Internet相连。运行IP协定的私有网路的两个子网Group 1和Group 2,通过在两台路由器之间使用GRE建立隧道实现互联。
路由器Router A和路由器Router B之间通过Internet相连。运行IP协定的私有网路的两个子网Group 1和Group 2,通过在两台路由器之间使用GRE建立隧道实现互联。
组网图
GRE over IPv4套用组网图
GRE over IPv4套用组网图

配置步骤
配置路由器Router A
# 配置接口Ethernet1/1。
<RouterA> system-view
[RouterA] interface ethernet 1/1
[RouterA-Ethernet1/1] ip address 10.1.1.1 255.255.255.0
[RouterA-Ethernet1/1] quit
# 配置接口Serial2/0(隧道的实际物理接口)。
[RouterA] interface serial 2/0
[RouterA-Serial2/0] ip address 1.1.1.1 255.255.255.0
[RouterA-Serial2/0] quit
# 创建Tunnel0接口。
[RouterA] interface tunnel 0
# 配置Tunnel0接口的IP位址。
[RouterA-Tunnel0] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel封装模式。
[RouterA-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial2/0的IP位址)。
[RouterA-Tunnel0] source 1.1.1.1
# 配置Tunnel0接口的目的地址(Router B的Serial2/1的IP位址)。
[RouterA-Tunnel0] destination 2.2.2.2
[RouterA-Tunnel0] quit
# 配置从Router A经过Tunnel0接口到Group 2的静态路由。
[RouterA] ip route-static 10.1.3.0 255.255.255.0 tunnel 0
配置路由器Router B
# 配置接口Ethernet1/1。
<RouterB> system-view
[RouterB] interface ethernet 1/1
[RouterB-Ethernet1/1] ip address 10.1.3.1 255.255.255.0
IPv4Group 2IPv4Group 1Eth1/110.1.1.1/24Eth1/110.1.3.1/24Tunnel010.1.2.1/24S2/01.1.1.1/24S2/12.2.2.2/24IPv4 networkGRE tunnelTunnel010.1.2.2/24Router ARouter B
[RouterB-Ethernet1/1] quit
# 配置接口Serial2/1(隧道的实际物理接口)。
[RouterB] interface serial 2/1
[RouterB-Serial2/1] ip address 2.2.2.2 255.255.255.0
[RouterB-Serial2/1] quit
# 创建Tunnel0接口。
[RouterB] interface tunnel 0
# 配置Tunnel0接口的IP位址。
[RouterB-Tunnel0] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel封装模式。
[RouterB-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial2/1的IP位址)。
[RouterB-Tunnel0] source 2.2.2.2
# 配置Tunnel0接口的目的地址(Router A的Serial2/0的IP位址)。
[RouterB-Tunnel0] destination 1.1.1.1
[RouterB-Tunnel0] quit
# 配置从Router B经过Tunnel0接口到Group 1的静态路由。
[RouterB] ip route-static 10.1.1.0 255.255.255.0 tunnel 0
配置路由器Router A
# 配置接口Ethernet1/1。
<RouterA> system-view
[RouterA] interface ethernet 1/1
[RouterA-Ethernet1/1] ip address 10.1.1.1 255.255.255.0
[RouterA-Ethernet1/1] quit
# 配置接口Serial2/0(隧道的实际物理接口)。
[RouterA] interface serial 2/0
[RouterA-Serial2/0] ip address 1.1.1.1 255.255.255.0
[RouterA-Serial2/0] quit
# 创建Tunnel0接口。
[RouterA] interface tunnel 0
# 配置Tunnel0接口的IP位址。
[RouterA-Tunnel0] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel封装模式。
[RouterA-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial2/0的IP位址)。
[RouterA-Tunnel0] source 1.1.1.1
# 配置Tunnel0接口的目的地址(Router B的Serial2/1的IP位址)。
[RouterA-Tunnel0] destination 2.2.2.2
[RouterA-Tunnel0] quit
# 配置从Router A经过Tunnel0接口到Group 2的静态路由。
[RouterA] ip route-static 10.1.3.0 255.255.255.0 tunnel 0
配置路由器Router B
# 配置接口Ethernet1/1。
<RouterB> system-view
[RouterB] interface ethernet 1/1
[RouterB-Ethernet1/1] ip address 10.1.3.1 255.255.255.0
IPv4Group 2IPv4Group 1Eth1/110.1.1.1/24Eth1/110.1.3.1/24Tunnel010.1.2.1/24S2/01.1.1.1/24S2/12.2.2.2/24IPv4 networkGRE tunnelTunnel010.1.2.2/24Router ARouter B
[RouterB-Ethernet1/1] quit
# 配置接口Serial2/1(隧道的实际物理接口)。
[RouterB] interface serial 2/1
[RouterB-Serial2/1] ip address 2.2.2.2 255.255.255.0
[RouterB-Serial2/1] quit
# 创建Tunnel0接口。
[RouterB] interface tunnel 0
# 配置Tunnel0接口的IP位址。
[RouterB-Tunnel0] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel封装模式。
[RouterB-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial2/1的IP位址)。
[RouterB-Tunnel0] source 2.2.2.2
# 配置Tunnel0接口的目的地址(Router A的Serial2/0的IP位址)。
[RouterB-Tunnel0] destination 1.1.1.1
[RouterB-Tunnel0] quit
# 配置从Router B经过Tunnel0接口到Group 1的静态路由。
[RouterB] ip route-static 10.1.1.0 255.255.255.0 tunnel 0