前面用两篇文章介绍了GRE(Generic Routing Encapsulation,通用路由封装)协议,分别是()和()。首先回顾一下:
GRE协议用来对某种协议(如IP、MPLS、以太网)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络(如IP)中传输。封装前后数据报文的网络层协议可以相同,也可以不同。封装后的数据报文在网络中传输的路径,称为GRE隧道。GRE隧道是一个虚拟的点到点的连接,其两端的设备分别对数据报文进行封装及解封装。
先配置一个简单的“GRE over IPv4隧道”实验。
组网需求
RT2和RT4分别连接IPv4私有网络SUBNET 1和SUBNET 5。这两个私有网络都使用私网地址。通过在RT2和RT4之间建立GRE隧道,实现两个私有网络的互联。
组网拓扑
配置步骤
GRE的配置比较简单,一般只有两步:
1、配置GRE隧道。配置隧道接口地址,并指定隧道接口的源目端地址即可。
2、配置路由将流量引到隧道接口。
各设备配置命令如下:
RT2
# sysname RT2 # interface GigabitEthernet0/0 ip address 192.168.1.2 255.255.255.0 # interface GigabitEthernet0/1 ip address 23.1.1.2 255.255.255.0 # interface Tunnel0 mode gre ip address 1.1.1.2 255.255.255.0 source 23.1.1.2 destination 34.1.1.4 # ip route-static 34.1.1.0 24 23.1.1.3 ip route-static 192.168.5.0 24 Tunnel0
RT-ISP
# interface GigabitEthernet0/0 ip address 34.1.1.3 255.255.255.0 # interface GigabitEthernet0/1 ip address 23.1.1.3 255.255.255.0
RT4
# sysname RT4 # interface GigabitEthernet0/0 ip address 192.168.5.4 255.255.255.0 # interface GigabitEthernet0/1 ip address 34.1.1.4 255.255.255.0 # interface Tunnel0 mode gre ip address 1.1.1.4 255.255.255.0 source 34.1.1.4 destination 23.1.1.2 # ip route-static 23.1.1.0 24 34.1.1.3 ip route-static 192.168.1.0 24 Tunnel0
验证配置
查看RT2设备Tunnel口状态。
可以看到有几个相对关键的指标项:
1、MTU为1476字节;
2、隧道keepalive功能未开启,开启命令如下:
3、隧道TTL值为255;
4、GRE over IPv4隧道中安全功能key未设置,开启命令如下。如果开启,需要保证两端配置相同;
5、GRE over IPv4隧道中安全功能checksum未设置,开启命令如下;
6、除上述机箱之外,还可以设置封装后隧道报文的DF(Don’t Fragment,不分片)标志。命令为:
tunnel dfbit enable
验证一下MTU。
可以发现,实际能通过的最大报文大小为1444字节。抓个包分析一下。
可以看到报文的封装结构为[以太网包头][外层IPv4包头][GRE封装][内层IPv4包头][ICMP报文],其中[外层IPv4包头]长度为20字节,[GRE封装]长度为8字节,[内层IPv4包头]长度为20字节。得益于没有加密,我们可以清楚看到每层报文的数据结构,[内层IPv4包头]和[外层IPv4包头]封装结构完全一致。ICMP数据段长度为1444字节,封装8字节ICMP报文头,再封装20字节[内层IPv4包头],总长度正好1472字节。
这里我额外增加了校验和的配置,可以看到[GRE封装]中校验和相关字段的差异。
验证KEY加密
因为没有加密,所以能看到完整的数据报文,那设置GRE KEY能不能对数据进行加密呢?
配置一下,发现这个KEY只能是数字。