配置GRE隧道
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种协议的网络中传输,而异种报文传输的通道称为Tunnel。
应用环境
骨干网中一般采用单一网络协议(例如IPv4)进行数据报文传输,但是不同的非骨干网上可能会使用不同网络协议(例如:IP、IPv6、IPX等)进行数据报文传输。由于骨干网与非骨干网使用的协议不同,这样将导致非骨干网之间无法通过骨干网传输数据报文。GRE协议通过实现一种协议封装另一种协议来解决这个问题。
当删除Tunnel接口后,该接口上的所有配置也将被删除。
前置任务
在配置GRE之前,需完成以下任务:
实现源接口和目的接口之间路由可达。
配置绑定GRE协议的接口
对应的源接口或者源地址所在接口上需要配置绑定GRE隧道协议,只有这些接口上绑定了GRE隧道协议,GRE隧道才能使用这些接口传输GRE封装的报文。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令ip address ip-address { mask | mask-length },配置接口的IP地址。
- (可选)执行命令target-board slot-number [ backup slave-slot-number ],配置隧道源接口到隧道业务板的映射。
当GRE使用三维Tunnel接口(集中式GRE),必须先配置本命令,才能执行binding tunnel gre命令在接口上绑定GRE协议。这样当源地址为此接口的隧道收到报文时,才能送到相应的隧道业务板进行处理。设备上没配置该命令,标识Tunnel端口需要使用一维模式。
当设备上配置多块隧道业务板时,可以选择参数backup slave-slot-number参数指定备份隧道业务板配置GRE隧道的1:1保护功能,增强GRE业务的可靠性。配置GRE隧道的1:1保护功能后,必须在主用和备用隧道业务板上配置两条同源同宿的GRE隧道。当主板上的隧道工作时,备板上的隧道不工作。当主板上的隧道故障时,业务切换到备板上的隧道。
- 执行命令binding tunnel gre,配置在接口上绑定GRE隧道协议。
- quit,退出接口视图。
- 执行命令commit,提交配置。
配置Tunnel接口
创建Tunnel接口后,需要指定封装方式为GRE、设置Tunnel接口的源地址或源接口、设置Tunnel接口的目的端地址。此外为使隧道支持动态路由协议,还要配置Tunnel接口的IP地址。
背景信息
GRE隧道是通过隧道两端的Tunnel接口建立的,所以需要在隧道两端的设备上分别配置Tunnel接口。对于GRE隧道的接口,需要指定其协议类型为GRE、源地址或源接口、目的地址。如果接口需要通过动态路由发布,还需要指定IP地址。
配置隧道的源接口时,需要注意:隧道的源接口不能指定为自身的Tunnel接口,但可以指定为其他隧道的Tunnel接口。
MTU值仅对设备本身发送报文时,经过GRE封装的报文有效,对于设备收到的报文进行GRE封装转发时,MTU值不生效。
Tunnel接口配置的目的地址不可达或指向本Tunnel接口。
Tunnel接口配置的源接口状态为Down。
Tunnel接口配置的IP地址不合法。
Tunnel接口配置了Keepalive功能,检测到隧道对端不可达。
在隧道两端的路由器上进行如下配置。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface tunnel interface-number,创建Tunnel接口,并进入Tunnel接口视图。
对于使用三维Tunnel接口的GRE(集中式GRE)情况下,创建Tunnel接口时,Tunnel接口的槽位号必须与作为源端接口所绑定的隧道业务板的槽位号保持一致。若配置成不一致,将导致GRE隧道无法成功建立。
- (可选)执行命令description text,配置Tunnel描述信息。
- 执行命令tunnel-protocol gre,将Tunnel封装为GRE隧道。
- 执行命令source { ip-address | ifName | ifTypeifNum },设置Tunnel接口的源地址或源接口。
对应的源接口或者源地址所在接口上需要配置binding tunnel gre命令绑定GRE隧道协议。只有这些接口上绑定了GRE隧道协议,GRE隧道才能使用这些接口传输GRE封装的报文。
- 执行命令destination [ vpn-instance vpn-instance-name ] ip-address,设置Tunnel接口的目的端地址。
在创建Tunnel接口后,需要指定隧道的源端地址和目的端地址。
- (可选)执行命令mtu mtu,配置接口的MTU。
- (可选)执行命令tunnel pathmtu enable,使能Tunnel隧道的路径MTU学习功能。
对于已经使用peer path-mtu auto-discovery命令使能路径MTU功能的BGP节点,如果节点之间使用GRE类型的隧道作为建立连接的路径,则可以在Tunnel接口上使能路径MTU学习功能,从而避免封装BGP消息的TCP报文在传输时被多次分片,提高BGP消息的传输效率。
- 指定Tunnel接口的IP地址。为使隧道支持动态路由协议,还要配置Tunnel接口的网络地址。Tunnel接口的网络地址可以不是公网地址。隧道两端的网络地址应该位于同一网段。请选择如下方法之一:
执行命令ip address ip-address { mask | mask-length } [ sub ],配置Tunnel接口的IPv4地址。
执行命令ip address unnumbered interface interface-type interface-number,配置Tunnel接口借用IPv4地址。
- (可选)执行命令target reassemble board slot-id [ backup slave-slot-id ],配置Tunnel接口到隧道业务板的映射,使得GRE分片报文统一到该隧道业务板上进行重组。
对于使用一维Tunnel接口的GRE(分布式GRE),在GRE报文在隧道传输的过程中如果报文被分片了(譬如中间链路存在多条链路负载分担转发报文的场景),则需要在出隧道的设备上配置报文重组业务板,使得所有分片报文在同一单板上进行重组。
target reassemble board命令仅对分布式GRE生效。 - 执行命令quit,退出Tunnel接口视图。
- (可选)执行命令global-gre forward-mode { through | loopback },配置分布式GRE隧道的转发模式,该配置将对所有GRE隧道生效。
用户可以根据业务需求选择配置合适的转发模式:
- 软件环回模式(through):该模式下设备的报文转发性能较高,但不能同时实现下行HQoS功能。
- 硬件环回模式(loopback):该模式相对软件环回模式转发性能折半,但是可同时配置下行HQoS。
本命令仅对分布式GRE生效。
- 执行命令commit,提交配置。
配置Tunnel的路由
在源端设备和目的端设备上都必须存在经过Tunnel转发的路由,需要进行GRE封装的报文才能正确转发。经过Tunnel接口的路由可以是静态路由,也可以是动态路由。
背景信息
配置静态路由时,源端设备和目的端设备都需要配置:此路由目的地址不是Tunnel的目的地址,也不是对端Tunnel接口的地址,而是未进行GRE封装的报文的原始目的地址,出接口是本端Tunnel接口。
配置动态路由协议时,在Tunnel接口和与私网相连的路由器接口上都要使能该动态路由协议。并且,配置去往Tunnel目的端实际接口地址的路由时,为保证能够选择正确的路由,应注意Tunnel接口不能作为该路由的下一跳。
例如,在图3-1中,对于DeviceA而言,Tunnel1的源端物理接口为DeviceA的interface1,目的端物理接口为DeviceC的interface2。如果使用动态路由协议,则Tunnel接口和接入PC的接口上都需要配置动态路由协议,并且路由表中去往DeviceC的interface2网段的出接口不能是Tunnel1。
实际配置时,隧道接口和公网物理接口需要采用不同类型的路由协议或者同类型协议的不同进程,避免Tunnel接口被选为去往Tunnel目的端物理地址的路由出接口,同时可避免用户报文通过物理接口转发,而不是通过隧道转发。
在隧道两端的路由器上进行如下配置:
(可选)使能Keepalive功能
使用GRE隧道的Keepalive功能,在业务模块选择承载隧道时,可防止选择对端不可达的GRE隧道,避免造成数据丢失。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface tunnel interface-number,进入Tunnel接口视图。
- 执行命令keepalive [ period period [ retry-times retry-times ] ],使能GRE的Keepalive功能。
GRE隧道的Keepalive功能是单向的。如果希望使两端都具备Keepalive功能,需在两端都使能GRE隧道的Keepalive功能。对端是否支持Keepalive功能不影响本端的Keepalive功能。但建议在隧道两端都使能Keepalive功能。
在配置隧道策略,选择GRE作为VPN隧道前,先使能GRE隧道的Keepalive功能,可防止VPN选择对端不可达的GRE隧道,避免造成数据丢失。因为:
在没有使能Keepalive功能的情况下,即使对端不可达,本端Tunnel接口状态也可能为Up。
使能本端的Keepalive后,如果对端不可达,本端的Tunnel接口状态会被置为Down。因此,如果对端不可达,本端VPN就不会选择该GRE隧道,避免造成数据丢失。
- 执行命令commit,提交配置。
(可选)配置GRE的安全选项
通过配置GRE的安全选项,可以增强GRE隧道的安全性。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface tunnel interface-number,进入Tunnel接口视图。
- 执行命令gre key { simple key-number-simple | [ cipher ] key-number-cipher },设置Tunnel接口的识别关键字。如果在隧道两端设置识别关键字,则必须指定相同的识别关键字或隧道两端都不设置识别关键字:
simple key-number-simple:指定输入简单口令(整数)形式的识别关键字。
key-number-cipher:指定输入简单口令(整数)形式或密文形式的识别关键字。
- 执行命令commit,提交配置。