Print

GRE的KeepLive中的会话

2小时前 发表

组网及说明


两个PC如图,隧道的封装地址如图,各接口的安全域如图

假设只从10.10.10.1    ping   10.10.20.1

此时的安全策略配置:






问题描述

背景测试一:


此时10.10.10.1    ping   10.10.20.1 的会话

内层的会话:源域是trust,目的接口是tunnel口的Tun域



外层GRE的会话:

发包的源接口是tunnel 口,但是安全域用的是Local(原本应该是Tun域的);目的接口是出公网的接口Untrust


总结ping过程的会话过程理解如下图,分为两段;段一内层,段二外层




背景测试二:


假设把设备上刚刚创建的会话清理掉,也就是说没有可匹配的8.8.8.0网段的会话;

此时在FW2上增加一个KeepLive的检测机制:


此时FW1上debug看:

<H3C> *Apr 29 20:11:41:865 2022 H3C FILTER/7/PACKET: -COntext=1; The packet is denied. Src-ZOne=Untrust, Dst-ZOne=Local;If-In=GigabitEthernet1/0/1(2), If-Out=InLoopBack0(1284); Packet Info:Src-IP=8.8.8.2, Dst-IP=8.8.8.1, VPN-Instance=, Src-MacAddr=9a8f-d5e7-0505,Src-Port=0, Dst-Port=0, Protocol=GRE(47), Application=other(1), SecurityPolicy=11, Rule-ID=1. 

说明外网主动过来的报文没有放通安全域

此时在防火墙FW1上放通:


但是此时还是会有策略拒绝的日志:

 *Apr 29 20:11:41:865 2022 H3C FILTER/7/PACKET: -COntext=1; The packet is denied. Src-ZOne=tun, Dst-ZOne=Untrust;If-In=Tunnel0(1286), If-Out=GigabitEthernet1/0/1(2); Packet Info:Src-IP=8.8.8.1, Dst-IP=8.8.8.2, VPN-Instance=,Src-Port=0, Dst-Port=0, Protocol=GRE(47), Application=other(1), ACL=none, Rule-ID=none.  

结论:KeepLive报文正向实从Untrust---->loopBack口;反向Tunnel----->Untrust;

情况一:keepLive的会话应该是这个样子的:

第一个回包被丢了:


接下来的报文我们防火墙回应,把回包的接口安全域刷新了:

后续的报文回包直接命中会话跳过安全策略检查,然后直接回包,所以统计上只显示有一个丢包;

总结看keeplive的发包中的会话如下:

收包:红线;发包:蓝线。




过程分析


测试一:

如果是先10.10.10.1  ping  10.10.20.1(也就是说没有配置keeplive),然后ping开始以后,在再FW2配置keeplive 5 5

此时的外层会话是这样子的:

解释:ping包正常匹配这个会话,和没有keeplive是一致的;然后增加了keeplive以后;

keeplive的发包8.8.8.2---->8.8.8.1命中会话的回包方向,(The packet is permitted. Src-ZOne=Untrust, Dst-ZOne=Local;If-In=GigabitEthernet1/0/1(2), If-Out=InLoopBack0(1284);)

Keeplive的回包8.8.8.1---->8.8.8.2命中回包的发包方向,(  Src-ZOne=tun, Dst-ZOne=Untrust;If-In=Tunnel0(1286), If-Out=GigabitEthernet1/0/1(2);)

此时Keeplive报文一个也不丢;





测试二:如果是先开始的Keeplive报文,然后再10.1  ping 20.1

没ping之前的会话:

首先FW1收到keepLive的第一个报文,然后回包被丢:


 *Apr 29 23:49:30:004 2022 H3C FILTER/7/PACKET: -COntext=1; The packet is permitted. Src-ZOne=Untrust, Dst-ZOne=Local;If-In=GigabitEthernet1/0/1(2), If-Out=InLoopBack0(1284); Packet Info:Src-IP=8.8.8.2, Dst-IP=8.8.8.1, VPN-Instance=, Src-MacAddr=9a8f-d5e7-0505,Src-Port=0, Dst-Port=0, Protocol=GRE(47), Application=other(1), SecurityPolicy=11, Rule-ID=1. 


 *Apr 29 23:49:30:004 2022 H3C FILTER/7/PACKET: -COntext=1; The packet is denied. Src-ZOne=tun, Dst-Zone=Untrust;If-In=Tunnel0(1286), If-Out=GigabitEthernet1/0/1(2); Packet Info:Src-IP=8.8.8.1, Dst-IP=8.8.8.2, VPN-Instance=,Src-Port=0, Dst-Port=0, Protocol=GRE(47), Application=other(1), ACL=none, Rule-ID=none. 

然后会话:(此时已经刷新了接口,参考下图和背景测试一、只丢了一个包)



此时再开始ping,ping的外层会话也走了keeplive的会话,不刷新;(按道理说ping单独发包时候,8.8.8.1到8.2,接口是Tunnel,安全域是Local,但是此时也匹配上了)





解决方法

不涉及