Fortigate IPSEC隧道建立异常:Debug Flow结果解析求助
IPsec隧道建立问题:Fortigate debug flow结果解析
我正尝试在A、B两个站点间建立IPSEC隧道,A位于NAT之后作为发起端,B为响应端,两端均通过配置向导完成隧道配置。观察到A向B发送500/udp端口的数据包,但B无响应,于是在B上执行debug flow操作,输出结果如下:
1 2023/09/04 13:04:51 vd-root:0 received a packet(proto=17, A-IP-ADDRESS:46575->B-IP-ADDRESS:500) tun_id=0.0.0.0 from wan2. 2 2023/09/04 13:04:51 allocate a new session-24b1a8ef, tun_id=0.0.0.0 3 2023/09/04 13:04:51 in-[wan2], out-[] 4 2023/09/04 13:04:51 len=0 5 2023/09/04 13:04:51 result: skb_flags-02000000, vid-0, ret-no-match, act-accept, flag-00000000 6 2023/09/04 13:04:51 find a route: flag=84000000 gw-B-IP-ADDRESS via root 7 2023/09/04 13:04:51 in-[wan2], out-[], skb_flags-02000000, vid-0 8 2023/09/04 13:04:51 gnum-100017, check-ffffffbffc02b5d4 9 2023/09/04 13:04:51 after check: ret-no-match, act-accept, flag-00000000, flag2-00000000 10 2023/09/04 13:04:51 in-[wan2], out-[], skb_flags-02000000, vid-0 11 2023/09/04 13:04:51 gnum-100011, check-ffffffbffc02c540 12 2023/09/04 13:04:51 after check: ret-no-match, act-drop, flag-00000000, flag2-00000000 13 2023/09/04 13:04:51 gnum-100001, check-ffffffbffc02b5d4 14 2023/09/04 13:04:51 checked gnum-100001 policy-1, ret-no-match, act-accept 15 2023/09/04 13:04:51 checked gnum-100001 policy-2, ret-no-match, act-accept 16 2023/09/04 13:04:51 checked gnum-100001 policy-3, ret-no-match, act-accept 17 2023/09/04 13:04:51 checked gnum-100001 policy-4, ret-matched, act-accept 18 2023/09/04 13:04:51 ret-matched 19 2023/09/04 13:04:51 policy-4 is matched, act-drop 20 2023/09/04 13:04:51 gnum-100001 check result: ret-matched, act-drop, flag-08010001, flag2-00000000 21 2023/09/04 13:04:51 after check: ret-matched, act-drop, flag-08010001, flag2-00000000 22 2023/09/04 13:04:51 iprope_in_check() check failed on policy 4, drop
我能理解第14至18行的内容——Fortigate为该流量匹配了policy-4。第17行显示ret-matched且act-accept,按道理流量应被放行,但第19行却显示policy-4已匹配,但执行动作是丢弃。
这是怎么回事?我是否误解了输出结果?我期望IPSEC流量能匹配到正确的策略。
问题解析与解决建议
这是Fortigate debug flow输出的典型细节:第17行的act-accept是单条策略规则检查时的临时动作,最终执行的动作会结合IPsec模块的附加检查结果,并非最终动作。
从输出第22行的iprope_in_check() check failed on policy 4可以明确,问题出在IPsec预检查环节,而非策略规则本身:
- 检查policy-4的配置方向:确认它是针对「A发起→B响应」的IPsec策略,还是「B发起→A响应」的反向策略。如果是后者,虽然源目IP匹配,但IPsec会话的发起方不匹配,会触发丢弃。
- 验证策略的实际动作与附加配置:即使debug显示
act-accept,若策略配置了隐藏的丢弃逻辑(比如IPsec策略的auto-negotiate选项不匹配,或者关联的VPN模板配置错误),也会导致预检查失败。 - 开启NAT穿越功能:由于A位于NAT之后,B端必须开启IPsec网关的
NAT traversal选项,否则无法正确识别来自A的NAT后IPsec初始化包。 - 核对对等体配置:确认B端IPsec网关的对等体地址是A的NAT后公网IP,而非A的内网IP。
简言之,第17行的act-accept只是策略规则的匹配动作,而iprope_in_check是IPsec模块的专属检查,失败后会覆盖之前的动作,最终执行丢弃。
内容的提问来源于stack exchange,提问作者tjlds
相关产品推荐
相关产品推荐

