上个实验介绍了GRE over IPsec,就是GRE在IPsec之上,在报文封装的时候先封装GRE,再封装IPsec,从报文结构上看起来就是一个IPsec封装的报文,看不到GRE封装的痕迹,是用IPsec保护GRE隧道。

今天在上个实验基础上做一下IPsec over GRE实验,也就是GRE在IPsec之上,在报文封装的时候先封装IPsec,再封装GRE。因为GRE是不加密的,所以今天从报文结构上看,应该是可以看到外层封装GRE隧道、内层封装IPsec隧道的报文结构的,不能说用GRE隧道保护IPsec隧道了,应该是用GRE隧道转发IPsec报文了。

组网需求

RT2和RT4分别连接IPv4私有网络SUBNET 1和SUBNET 5。这两个私有网络使用相同的私网地址192.168.1.0/24。通过在RT2和RT4之间建立IPsec隧道,实现两个相同私有网络的加密互访,并对通过GRE隧道转发IPsec加密报文。

组网拓扑

GRE over IPsec,IPsec不服,要求IPsec over GRE_封装


配置步骤

开头提到,IPsec over GRE,在报文封装的时候先封装IPsec,再封装GRE,是用GRE隧道转发IPsec报文。

1、相比于上个实验,我们要修改访问控制列表需匹配数据的原始范围,把IPsec的保护数据流更改为两端互访的数据流量;

2、为了对网络间传输的数据先进行IPsec封装,再进行GRE封装,需要配置IPsec隧道的对端IP地址为GRE隧道的接口地址;

3、再把流量丢进GRE隧道就可以了,也就是将IPsec应用到GRE隧道接口上。

怎么样,听起来是不是也很简单?直接看看配置吧!

RT2

#

 sysname RT2

#

interface GigabitEthernet0/0

ip address 192.168.1.2 255.255.255.0

 proxy-arp enable

#

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

 gre key 123321

 gre checksum

 ipsec apply policy ipsecogre

#

 ip route-static 34.1.1.0 24 23.1.1.3

 ip route-static 192.168.1.4 32 Tunnel0

 ip route-static 192.168.1.5 32 Tunnel0

#

acl advanced 3400

 rule 0 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.1.0 0.0.0.255

#

ipsec transform-set TRAN

 esp encryption-algorithm 3des-cbc

 esp authentication-algorithm sha1

#

ipsec policy ipsecogre 10 isakmp

 transform-set TRAN

 security acl 3400

 remote-address 1.1.1.4

#

ike keychain key

 pre-shared-key address 1.1.1.4 255.255.255.0 key simple ipsecogre

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.1.4 255.255.255.0

 proxy-arp enable

#

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

 gre key 123321

 gre checksum

 ipsec apply policy ipsecogre

#

 ip route-static 23.1.1.0 24 34.1.1.3

 ip route-static 192.168.1.1 32 Tunnel0

 ip route-static 192.168.1.2 32 Tunnel0

#

acl advanced 3400

 rule 0 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.1.0 0.0.0.255

#

ipsec transform-set TRAN

 esp encryption-algorithm 3des-cbc

 esp authentication-algorithm sha1

#

ipsec policy ipsecogre 10 isakmp

 transform-set TRAN

 security acl 3400

 remote-address 1.1.1.2

#

ike keychain key

 pre-shared-key address 1.1.1.2 255.255.255.0 key simple ipsecogre

配置说明

1、删除物理接口上的IPsec策略;

2、修改ACL匹配流量为两端的私网地址;

3、修改IKE预共享密钥的对端地址和密钥;

4、创建新的IPsec策略,对端地址为对端GRE隧道地址;

4、在GRE隧道接口上应用IPsec策略。

验证配置

查看RT4设备Tunnel口状态。

GRE over IPsec,IPsec不服,要求IPsec over GRE_封装_02


可以看到有几个相对关键的指标项:

1、MTU为1468字节,跟GRE over IPsec相同;

2、隧道keepalive功能未开启,开启命令如下:

GRE over IPsec,IPsec不服,要求IPsec over GRE_AH_03


3、隧道TTL值为255;

4、GRE over IPv4隧道中安全功能key已设置,密钥为123321;

5、GRE over IPv4隧道中安全功能checksum已设置。

使用display ike sa命令,可以看到第一阶段的SA正常建立。

GRE over IPsec,IPsec不服,要求IPsec over GRE_封装_04


使用display ipsec sa命令可以看到IPsec SA的建立情况。

GRE over IPsec,IPsec不服,要求IPsec over GRE_IPsec_05


可以看到,IPsec封装在内层,MTU是1412字节;GRE封装在外层,MTU是1468字节。那这次最后会是多少呢?

验证隧道MTU

GRE over IPsec,IPsec不服,要求IPsec over GRE_IPsec_06


可以发现,实际能通过的最大报文大小也是1384字节,跟GRE over IPsec相同。抓个包分析一下。

GRE over IPsec,IPsec不服,要求IPsec over GRE_封装_07


这个地方我们捋一下,报文的封装结构应该是[以太网包头][外层IPv4包头] [GRE封装] [ESP报文头] [内层IPv4包头] [ICMP报文] [ESP-T校验字段]。

反过来看,内层数据报文IPsec封装后长度为1464字节,比1384字节的数据长80字节,[ESP报文头] [内层IPv4包头] [ICMP报文] [ESP-T校验字段] 段长度为1444字节,比业务报文还要长60字节;单独使用IPsec封装时,ESP封装的数据长度为1476字节,比业务报文的1400字节长76字节。这次少了16字节,问题出在哪了呢?看来后面要和上次的问题一起验证一下了。

验证两端同子网

现在已经知道两端相同子网互通也是没有问题了。但是单独的IPsec实验不能查看traceroute路径,GRE over IPsec就可以,那这次我们看一下IPsec over GRE可不可以?

GRE over IPsec,IPsec不服,要求IPsec over GRE_AH_08


很棒,traceroute路径显示和上次一样,原来使用IPsec over GRE也可以解决,那是不是可以理解为用了GRE隧道就能解决这个问题?

总结

1、IPsec over GRE就是用GRE隧道保护IPsec隧道,从报文结构看起来和GRE报文比较像,但是因为内层封装的是IPsec报文,所以外层显示还是ESP报文。可以看到GRE隧道里面还套了一层IPsec隧道,最终的MTU也是1384字节,和GRE over IPsec相同;

2、不管是先封装GRE隧道,还是先封装IPsec隧道,都可以看到内层报文的traceroute路径,提高了实用性;

3、因为先封装IPsec隧道,所以在调整保护流量时,还是要和单独使用IPsec隧道一样,调整ACL的兴趣流,配置比GRE over IPsec要麻烦。其实,这个麻烦是相对而言的,只是配置ACL要指定两端的网段,并且还是反掩码,而路由则是目的网段和下一跳;

4、补充了上次的遗留问题,IPsec over GRE实际能通过的最大报文大小为1384字节,ESP封装字段的长度为1444字节,比业务报文长60字节;单独使用IPsec封装时,ESP封装的数据长度为1476字节,比业务报文的1400字节长76字节。上次多余的4个字节哪里去了?这次少了16字节,问题又出在哪里呢?