12-GRE配置
本章节下载: 12-GRE配置 (214.84 KB)
GRE(Generic Routing Encapsulation,通用路由封装)协议用来对任意一种网络层协议(如IPv6)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络(如IPv4)中传输。封装前后数据报文的网络层协议可以相同,也可以不同。封装后的数据报文在网络中传输的路径,称为GRE隧道。GRE隧道是一个虚拟的点到点的连接,其两端的设备分别对数据报文进行封装及解封装。
图1-1 GRE封装后的报文格式
· 净荷数据(Payload packet):需要封装和传输的数据报文。净荷数据的协议类型,称为乘客协议(Passenger Protocol)。乘客协议可以是任意的网络层协议。
· GRE头(GRE header):采用GRE协议对净荷数据进行封装所添加的报文头,包括封装层数、版本、乘客协议类型、校验和信息、Key信息等内容。添加GRE头后的报文称为GRE报文。对净荷数据进行封装的GRE协议,称为封装协议(Encapsulation Protocol)。
· 传输协议的报文头(Delivery header):在GRE报文上添加的报文头,以便传输协议对GRE报文进行转发处理。传输协议(Delivery Protocol或者Transport Protocol)是指负责转发GRE报文的网络层协议。设备支持IPv4和IPv6两种传输协议:当传输协议为IPv4时,GRE隧道称为GRE over IPv4隧道;当传输协议为IPv6时,GRE隧道称为GRE over IPv6隧道。
本系列交换机仅支持GRE over IPv4隧道。
图1-2 IPv6协议网络通过GRE隧道互连
下面以图1-2的网络为例说明IPv6协议的报文通过GRE隧道穿越IPv4网络进行传输的过程。
(1) Device A从连接IPv6 network 1的接口收到IPv6报文后,查找路由表判定此报文需要通过GRE隧道模式的Tunnel接口(本例中为Tunnel0)转发,并将报文发给相应的Tunnel接口。
(2) GRE隧道模式的Tunnel接口收到此IPv6报文后,先在报文前封装上GRE头,再封装上IPv4头。IPv4头中的源地址为隧道的源端地址(本例中为Device A的FortyGigE1/0/1接口的IP地址),目的地址为隧道的目的端地址(本例中为Device B的FortyGigE1/0/1接口的IP地址)。
(3) Device A根据封装的IPv4头中的目的地址查找路由表,将封装后的IPv4报文通过GRE隧道的实际物理接口(FortyGigE1/0/1)转发出去。
(4) 封装后的IPv4报文通过GRE隧道到达隧道的目的端设备Device B后,由于报文的目的地是本设备,且IPv4头中的协议号为47(表示封装的报文为GRE报文),Device B将此报文交给GRE协议进行解封装处理。
(5) GRE协议先剥离掉此报文的IPv4头,再对报文进行处理,处理通过后再剥离掉报文的GRE头,将报文交给IPv6协议进行后续的转发处理。
GRE收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE后设备的数据转发效率有一定程度的下降。
与GRE相关的协议规范有:
· RFC 1701:Generic Routing Encapsulation (GRE)
· RFC 1702:Generic Routing Encapsulation over IPv4 networks
· RFC 2784:Generic Routing Encapsulation (GRE)
· RFC 2890:Key and Sequence Number Extensions to GRE
配置Tunnel接口前的准备工作:
· 在创建Tunnel接口前,需要先配置全局类型VLAN接口资源预留。每创建一个Tunnel接口,需要预留两个全局类型VLAN接口资源。关于全局类型VLAN接口资源预留的详细介绍,请参见“二层技术-以太网交换配置指导”中的“VLAN”。
· 配置Tunnel接口时,封装后的报文不能根据目的地址和路由表进行第二次三层转发,需要将封装后的报文发送给业务环回组,由业务环回组将报文回送给转发模块后,再进行三层转发。因此,需要创建tunnel类型的业务环回组,以实现隧道报文的接收和发送。关于业务环回组的创建和配置,请参见“二层技术-以太网交换配置指导”中的“业务环回组”。
配置GRE over IPv4隧道时,需要注意:
· 隧道两端必须都配置隧道的源端地址和目的端地址,且本端配置的源端地址(目的端地址)应该与对端配置的目的端地址(源端地址)相同。
· 在同一台设备上,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
· 如果封装前报文的目的地址与Tunnel接口的地址不在同一个网段,则必须配置通过Tunnel接口到达报文目的地址的路由,以便需要进行封装的报文能正常转发。用户可以配置静态路由,指定到达报文目的地址的路由出接口为本端Tunnel接口;也可以配置BGP或OSPF动态路由,在Tunnel接口、与私网相连的接口上分别使能BGP或OSPF动态路由协议,由BGP或OSPF动态路由协议来建立通过Tunnel接口转发的路由表项。在隧道的两端都要进行此项配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“静态路由”、“BGP”和“OSPF”。
· 在Tunnel接口上配置的隧道目的端地址不能与Tunnel接口的地址在同一网段。
· 关于Tunnel接口的详细介绍以及Tunnel接口下更多配置命令的详细介绍,请参见“三层技术-IP业务配置指导”中的“隧道”。
配置全局类型的VLAN接口资源预留 |
reserve-vlan-interface vlan-interface-id1 [ to vlan-interface-id2 ] global |
缺省情况下,没有任何预留VLAN接口资源 |
创建业务环回组,并指定其业务类型为Tunnel |
service-loopback group number type tunnel |
缺省情况下,不存在业务环回组 |
进入二层以太网接口视图 |
interface interface-type interface-number |
- |
将端口加入业务环回组 |
port service-loopback group number |
缺省情况下,端口不属于任何业务环回组 |
退回系统视图 |
quit |
- |
创建模式为GRE over IPv4隧道的Tunnel接口,并进入该Tunnel接口视图 |
interface tunnel interface-number mode gre |
缺省情况下,设备上不存在任何Tunnel接口 |
设置Tunnel接口的IPv4地址或IPv6地址 |
IPv4地址的配置方法,请参见“三层技术-IP业务配置指导”中的“IP地址” IPv6地址的配置方法,请参见“三层技术-IP业务配置指导”中的“IPv6基础” |
缺省情况下,Tunnel接口上没有设置IPv4地址和IPv6地址 乘客协议为IPv4时,需要配置Tunnel接口的IPv4地址;乘客协议为IPv6时,需要配置Tunnel接口的IPv6地址 |
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IPv4地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IPv4地址 |
||
缺省情况下,没有设置隧道的目的端地址 隧道的目的端地址是对端从GRE隧道上接收报文的实际物理接口的地址,该地址将作为封装后隧道报文的目的IPv4地址 |
||
(可选)开启GRE的keepalive功能,并配置keepalive报文发送周期及最大发送次数 |
缺省情况下,GRE的keepalive功能处于关闭状态 |
|
(可选)配置丢弃含有IPv4兼容IPv6地址的IPv6报文 |
缺省情况下,不会丢弃含有IPv4兼容IPv6地址的IPv6报文 |
在完成上述配置后,在任意视图下执行display命令可以显示配置后GRE的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除Tunnel接口的统计信息。
表1-2 GRE显示和维护
显示Tunnel接口的相关信息(本命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“隧道”) |
display interface [ tunnel ] [ brief [ down ] ] display interface [ tunnel [ number ] ] [ brief [ description ] ] |
显示Tunnel接口的IPv6相关信息(本命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“IPv6基础”) |
|
清除Tunnel接口的统计信息(本命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“隧道”) |
Switch A和Switch B分别连接IPv4私有网络Group 1和Group 2。这两个私有网络都使用私网地址,且属于同一个VPN。通过在Switch A和Switch B之间建立GRE隧道,实现两个私有网络的互联。
图1-3 GRE over IPv4隧道应用组网图
在开始下面的配置之前,假设设备各接口的地址都已配置完毕,并且Switch A和Switch B之间路由可达。
# 配置全局类型的预留VLAN 3001和VLAN 3002接口资源。
<SwitchA> system-view
[SwitchA] reserve-vlan-interface 3001 to 3002 global
# 创建业务环回组1,并配置服务类型为Tunnel。
[SwitchA] service-loopback group 1 type tunnel
# 将接口FortyGigE1/0/3加入业务环回组1。
[SwitchA] interface FortyGigE 1/0/3
[SwitchA-FortyGigE1/0/3] port service-loopback group 1
[SwitchA-FortyGigE1/0/3] quit
# 创建Tunnel1接口,并指定隧道模式为GRE over IPv4隧道。
[SwitchA] interface tunnel 1 mode gre
# 配置Tunnel1接口的IP地址。
[SwitchA-Tunnel1] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel1接口的源端地址(Switch A的Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] source vlan-interface 101
# 配置Tunnel1接口的目的端地址(Switch B的Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] destination 2.2.2.2
[SwitchA-Tunnel1] quit
# 配置从Switch A经过Tunnel1接口到Group 2的静态路由。
[SwitchA] ip route-static 10.1.3.0 255.255.255.0 tunnel 1
# 配置全局类型的预留VLAN 3001和VLAN 3002接口资源。
<SwitchB> system-view
[SwitchB] reserve-vlan-interface 3001 to 3002 global
# 创建业务环回组1,并配置服务类型为Tunnel。
[SwitchB] service-loopback group 1 type tunnel
# 将接口FortyGigE1/0/3加入业务环回组1。
[SwitchB] interface FortyGigE 1/0/3
[SwitchB-FortyGigE1/0/3] port service-loopback group 1
[SwitchB-FortyGigE1/0/3] quit
# 创建Tunnel1接口,并指定隧道模式为GRE over IPv4隧道。
[SwitchB] interface tunnel 1 mode gre
# 配置Tunnel1接口的IP地址。
[SwitchB-Tunnel1] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel1接口的源端地址(Switch B的Vlan-interface101的IP地址)。
[SwitchB-Tunnel1] source vlan-interface 101
# 配置Tunnel1接口的目的端地址(Switch A的Vlan-interface101的IP地址)。
[SwitchB-Tunnel1] destination 1.1.1.1
[SwitchB-Tunnel1] quit
# 配置从Switch B经过Tunnel1接口到Group 1的静态路由。
[SwitchB] ip route-static 10.1.1.0 255.255.255.0 Tunnel 1
# 查看Switch A的Tunnel接口状态。
[SwitchA] display interface tunnel 1
Tunnel1
Current state: UP
Line protocol state: UP
Description: Tunnel1 Interface
Bandwidth: 64kbps
Maximum Transmit Unit: 1476
Internet Address is 10.1.2.1/24 Primary
Tunnel source 1.1.1.1, destination 2.2.2.2
Tunnel keepalive disabled
Tunnel TTL 255
Tunnel protocol/transport GRE/IP
GRE key disabled
Checksumming of GRE packets disabled
Last clearing of counters: Never
Last 300 seconds input rate: 0 bytes/sec, 0 bits/sec, 0 packets/sec
Last 300 seconds output rate: 0 bytes/sec, 0 bits/sec, 0 packets/sec
Input: 0 packets, 0 bytes, 0 drops
Output: 0 packets, 0 bytes, 0 drops
# 查看Switch B的Tunnel接口状态。
[SwitchB] display interface tunnel 1
Tunnel1
Current state: UP
Line protocol state: UP
Description: Tunnel1 Interface
Bandwidth: 64kbps
Maximum Transmit Unit: 1476
Internet Address is 10.1.2.2/24 Primary
Tunnel source 2.2.2.2, destination 1.1.1.1
Tunnel keepalive disabled
Tunnel TTL 255
Tunnel protocol/transport GRE/IP
GRE key disabled
Checksumming of GRE packets disabled
Last clearing of counters: Never
Last 300 seconds input rate: 0 bytes/sec, 0 bits/sec, 0 packets/sec
Last 300 seconds output rate: 0 bytes/sec, 0 bits/sec, 0 packets/sec
Input: 0 packets, 0 bytes, 0 drops
Output: 0 packets, 0 bytes, 0 drops
# 从Switch B可以Ping通Switch A上Vlan-interface100的地址。
[SwitchB] ping -a 10.1.3.1 10.1.1.1
Ping 10.1.1.1 (10.1.1.1) from 10.1.3.1: 56 data bytes, press CTRL_C to break
56 bytes from 10.1.1.1: icmp_seq=0 ttl=255 time=11.000 ms
56 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=1.000 ms
56 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.000 ms
56 bytes from 10.1.1.1: icmp_seq=3 ttl=255 time=0.000 ms
56 bytes from 10.1.1.1: icmp_seq=4 ttl=255 time=0.000 ms
--- Ping statistics for 10.1.1.1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/2.400/11.000/4.317 ms
GRE的配置相对比较简单,但要注意配置的一致性,大部分的错误都可以使用调试命令debugging gre和debugging tunnel定位。这里仅就一种错误进行分析。
如图1-4所示,Tunnel两端接口配置正确且Tunnel两端可以ping通,但Host A和Host B之间却无法ping通。
图1-4 GRE排错示例
出现该故障的原因可能是Device A或Device C上没有到达对端网络的路由。
(1) 在Device A和Device C分别执行display ip routing-table命令,观察在Device A是否有经过Tunnel0接口到10.2.0.0/16的路由;在Device C是否有经过Tunnel0接口到10.1.0.0/16的路由。
(2) 如果不存在上述路由,则在系统视图下使用ip route-static命令添加静态路由。以Device A为例,配置如下:
[DeviceA] ip route-static 10.2.0.0 255.255.0.0 tunnel 0
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!