linux – TCP Keepalive和防火墙杀死空闲会话
在客户站点中,网络团队在客户端和服务器之间添加了防火墙.这导致空闲连接在大约40分钟的空闲时间后断开连接.网络人员说防火墙没有任何空闲连接超时,但事实是空闲连接被破坏了.
为了解决这个问题,我们首先使用tcp_keepalive_time = 300,tcp_keepalive_intvl = 300和tcp_keepalive_probes = 30000来配置启用TCP keepalive的服务器(Linux机器).这有效,并且连接可以存活数天或更长时间.但是,我们还希望服务器检测死客户端并终止连接,因此我们将设置更改为time = 300,intvl = 180,probes = 10,认为如果客户端确实存在,则服务器将每隔300秒进行一次探测(5分钟),客户端将使用ACK进行响应,这将阻止防火墙将其视为空闲连接并将其终止.如果客户端已经死了,经过10次探测后,服务器将中止连接.令我们惊讶的是,闲置但活着的连接在大约40分钟之后就像以前一样被杀死. 在客户端运行的Wireshark在服务器和客户端之间根本没有显示keepalive,即使在服务器上启用了keepalive也是如此. 这可能会发生什么? 如果服务器上的keepalive设置是time = 300,我希望如果客户端处于活动状态但空闲,服务器将每隔300秒发送一次keepalive探测并保持连接,如果客户端已经死了,它将在300秒后发送一个,然后每180秒发送9个探测器,然后终止连接.我对吗? 一种可能性是防火墙以某种方式拦截来自服务器的keepalive探测器并且未能将它们传递给客户端,并且它获得探测的事实使得它认为连接是活动的.这是防火墙的常见行为吗?我们不知道涉及哪种防火墙. 服务器是Teradata节点,连接是从Teradata客户端实用程序到数据库服务器,服务器端的端口1025,但是我们看到SSH连接存在同样的问题,所以我们认为它会影响所有TCP连接. 解决方法
状态防火墙检查数据包并确认连接是否处于活动状态.
我相信防火墙也应该像计算机一样对设置进行微调. 默认情况下,许多防火墙仅保持空闲连接打开60分钟,但这一时间可能会因供应商而异. 一些供应商将具有TCP拦截,TCP状态旁路和死连接检测等功能,可以处理像您这样的特殊情况. 其他选项是使用与服务器上相同的参数配置防火墙本身,以确保一切都是一致的. 在cisco防火墙上,您可以使用以下命令进行配置.
你有多个参数根据你的需要. 我建议与管理防火墙的团队交谈,根据您的需要调整时间或检查功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |