故障描述:
两端防火墙IPSec配置完全正确(一边为Fortigate),隧道也能正常建立,但总会因为未知原因断开。说起来这个问题处理起来不复杂,但是原因极难发现,也不会在日志或抓包信息里体现
问题处理:
这是近期在实际生产环境中出现的问题,两端IPSec配置正确,隧道也正常启动,但一段时间后会自动断开,手动来回更改配置,尝试发起连接后隧道又能正常起来
由于是Fortiagte和第三方防火墙建立的IPSec,初步怀疑硬件兼容性问题,尝试更改加密方式,秘钥生存时间等配置后未能解决
后在测试中发现一个现象,在IPSec传输大文件时达到一定数据量一定会断开,经过多方资料查询发现了真相,先见下图:
Fortiagte的官方Cookbook中这句话揭示了真相,运营商有可能会阻挡或限制UDP500或UDP4500的连接
首先UDP500和4500都是IPSec协商的报文,以下摘抄一段说明:
UDP 500 是ISAKMP互联网安全关联和钥匙管理协议的服务端口
(UDP 500 是Internet Security Association and Key Management Protocol (ISAKMP)端口号)
UDP 4500是UDP-encapsulated ESP and IKE端口号
如果中间设备有nat的话使用到端口UDP4500
简单来讲,在当前的常规场景中,主动模式一般默认会使用UDP500,野蛮模式默认会使用UDP4500
找到问题后,先尝试修改IKE端口,由于Fortigate从7.0版本开始支持手动指定ike-port,当前环境无法进行升级,同时需要两端同时进行修改,所以该方法暂时弃用
最后将IPSec协商由主动模式改为野蛮模式后,IPSec稳定运行,问题解决
处理方法总结
- 将IPSec两端的防火墙设备的IKE端口更改为非默认端口
- 将IPSec两端的协商模式由主动模式改为野蛮模式