Linux系统ping默认DNS地址时出现“sendmsg: Operation not permitted”错误

Linux系统ping默认DNS地址时出现“sendmsg: Operation not permitted”错误

贡献者:

KB小秘书

 · 

更新时间:2019-08-07 15:32:28

提示: 这是一篇由阿里云ACE开发者(Alibaba Cloud Engineer)贡献,针对特定用户问题发布的文章。文档的内容以原稿呈现,阿里云对于文档内容不做任何形式的承诺。阿里云有权在未经通知的情形下对文档内容做出任何形式的修改。

问题描述

  1. 访问网站慢,ping默认DNS地址显示如下。
    QQ???20160210164149.png
  2. ping本地回环地址显示如下。
    ping: sendmsg: Operation not permitted
  3. 系统负载不高,网络线路通畅,资料库无死锁进程。系统日志出现大量信息,如下所示。
    kernel: printk: xxxx messages suppressed.
  4. 使用dmesg排查后发现大量以下信息,如下所示。
    TCP: drop open request from 202.X.X.100/62751
    printk: 78 messages suppressed.

 

问题原因

问题可能出在TCP/IP连接上,IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip-sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满。

 

解决方案

  1. 加大ip_conntrack_max值,执行如下命令,查出原本的ip_conntrack_max值。
    cat /proc/sys/net/ipv4/ip_conntrack_max
  2. 参考如下命令,写入理想的数值,每一个ip_conntrack buffer会占用292Bytes,此为临时配置。
    echo "[$Num]" >/proc/sys/net/ipv4/ip_conntrack_max
    注:[$Num]的值以实际环境为准。
  3. 如果要每次开机都使用新的数值,可以参照如下3种方式。
    1. 将命令写入/etc/rc.d/rc.local文件。
    2. /etc/sysctl.conf中添加如下配置。
      net.ipv4.ip_conntrack_max =[$Num]
    3. 在系统中执行如下命令。
      sysctl -w net.ipv4.ip_conntrack_max=[$Num]
  4. 参考如下命令,降低ip_conntrack timeout时间,重新设置ip_conntrack_tcp_timeout_established,原值为432000秒。
    echo "[$Num1]" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
    注:[$Num1]的值以实际环境为准。
  5. 参考如下命令,开启tcp_syncookies,重新设置tcp_syncookies,默认值为0。
    echo '1'> /proc/sys/net/ipv4/tcp_syncookies
  6. 经过以上设置后,确认系统日志出现如下所示信息,且没有了“kernel: printk: xxx messages suppressed.”提示,网站访问速度明显提升,说明问题解决。
     kernel: possible SYN flooding on port 80. Sending cookies.

 

适用于

  • 云服务器 ECS
  • 87

    发布KB

  • 595

    回答问题

  • 4

    粉丝数