小编Car*_*rra的帖子

TCP Keepalive 和防火墙杀死空闲会话

在客户站点,网络团队在客户端和服务器之间添加了防火墙。这会导致空闲连接在大约 40 分钟的空闲时间后断开连接。网络人说防火墙没有任何空闲连接超时,但事实是空闲连接被破坏了。

为了解决这个问题,我们首先在服务器(一台 Linux 机器)上配置了 TCP keepalives,tcp_keepalive_time=300、tcp_keepalive_intvl=300 和 tcp_keepalive_probes=30000。这是有效的,并且连接可以持续数天或更长时间。但是,我们也希望服务端检测死客户端并杀死连接,所以我们将设置更改为time=300,intvl=180,probes=10,认为如果客户端确实是活着的,那么服务端会每300s探测一次(5 分钟),客户端会以 ACK 响应,这将使防火墙不会将其视为空闲连接并杀死它。如果客户端死机,则在 10 次探测后,服务器将中止连接。令我们惊讶的是,空闲但活动的连接在大约 40 分钟后像以前一样被杀死。

在客户端运行的 Wireshark 显示服务器和客户端之间根本没有保持连接,即使在服务器上启用了保持连接。

这里会发生什么?

如果服务器上的 keepalive 设置是 time=300,intvl=180,probes=10,我希望如果客户端活着但空闲,服务器将每 300 秒发送一次 keepalive 探测并保持连接,如果客户端死了,它会在 300 秒后发送一个,然后每 180 秒再发送 9 个探测,然后再终止连接。我对吗?

一种可能性是防火墙以某种方式拦截了来自服务器的保活探测,但未能将它们传递给客户端,并且它获得探测的事实使其认为连接处于活动状态。这是防火墙的常见行为吗?我们不知道涉及哪种防火墙。

服务器是一个 Teradata 节点,连接是从 Teradata 客户端实用程序到数据库服务器的,服务器端的端口为 1025,但是我们看到 SSH 连接存在同样的问题,因此我们认为它会影响所有 TCP 连接。

linux firewall keepalive

10
推荐指数
1
解决办法
3万
查看次数

标签 统计

firewall ×1

keepalive ×1

linux ×1