文档

在Alibaba Cloud Linux 2实例中使用NAT存在TCP连接超时的情况

更新时间:

问题描述

在符合如下条件的Alibaba Cloud Linux 2实例中,使用NAT之后在特定情况下,存在TCP连接超时1秒的情况,需要使用内核热补丁修复该问题。

  • 镜像:Alibaba Cloud Linux 2.1903 LTS 64位

  • 内核:kernel-4.19.91-25.1.al7及之前的内核版本

  • iptables的NAT表中配置了目标为REDIRECT的防火墙规则。

当TCP连接超时后,且运行conntrack -S命令后,insert_failed数值和TCP连接超时次数呈正相关关系,出现如下调用栈信息。

cpu=0  found=291259242 invalid=3597 ignore=10555395 insert=0 insert_failed=4899 drop=4899 early_drop=0 error=0 search_restart=6395 
cpu=1  found=288942703 invalid=50582 ignore=7855948 insert=0 insert_failed=4957 drop=4957 early_drop=0 error=0 search_restart=6824 
cpu=2  found=273178723 invalid=3255 ignore=10286468 insert=0 insert_failed=4575 drop=4575 early_drop=0 error=0 search_restart=6008 
cpu=3  found=252860473 invalid=3410 ignore=8206217 insert=0 insert_failed=4282 drop=4282 early_drop=0 error=0 search_restart=6586

问题原因

当应用程序同时发起多条TCP连接请求时,大量TCP报文经过NAT表并有概率获取到重复的端口。Conntrack模块在确认阶段发现端口存在重复的情况,丢弃了相关的TCP报文。

解决方案

说明
  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

当遇到该问题时,您可以参考以下方案处理:

  1. 登录ECS实例,详情请参见连接方式概述

  2. 执行以下命令,确认系统内核版本适用此方案。

    uname -r

    系统显示类似如下。

    4.19.91-18.al7.x86_64
  3. 请根据系统内核版本,选择以下对应的解决方法:

    • 对于kernel-4.19.91-22.2.al7(不含)之前的版本

      1. 执行以下命令,将操作系统版本更新至最新的内核版本。

        yum update kernel
      2. 更新内核版本之后,需重启生效,请执行以下命令,重启服务器。

        reboot
    • 对于kernel-4.19.91-25.1.al7(含)之前的版本,可通过安装内核热补丁解决,安装命令如下。

      yum install -y kernel-hotfix-7776300-`uname -r | awk -F"-" '{print $NF}'`

适用于

  • 云服务器ECS

  • 本页导读 (1)
文档反馈