ip_conntrack table full dropping packet解决方案

默北 Linux 运维案例526,434字数 1476阅读4分55秒阅读模式

当我们开启iptables后,会有这么个现象发生,丢包。ping的话会断断续续的丢包,ifconfig 会看到网卡dropped:XXX一直在增加,messages日志有以下内容:

iptables文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

ip_conntrack表满导致的,iptables开启后会加载ip_conntrack模块,来跟踪包。默认情况下ip_conntrack_max大小为65536。文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

iptables导致ftp列表失败一例参见:pureftp读取目录列表失败解决文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

查看ip_conntrack最大大小:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

# cat /proc/sys/net/ipv4/ip_conntrack_max

查看当前ip_conntrack大小:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

# wc -l /proc/net/ip_conntrack

解决方法:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

1. 更改ip_conntrack大小文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

# /etc/sysctl.conf 
net.ipv4.netfilter.ip_conntrack_max = 6553600
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 12
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
# sysctl -p  使其生效

这种解决方案,需要在每次iptables重启后,都要执行一遍sysctl -p, 也可以将sysctl -p写入到iptables启动脚本中。 不过ip_conntrack满的隐患还是存在的。文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

2. 不加载ip_conntrack模块文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

修改 /etc/sysconfig/iptables-config配置文件文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

# vim /etc/sysconfig/iptables-config 
IPTABLES_MODULES=""

/etc/sysconfig/iptables 不要配置状态的规则, 如:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

设置了这些后,如果有设置方案1中内核参数,执行sysctl -p会报以下错误的:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established" is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait" is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait" is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait" is an unknown key文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

这种情况是因为没有加载ip_conntrack模块导致的。 这不正是我想要的么?文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

来看下是否加载了ip_conntrack模块:文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

iptables文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

推荐使用方案2。文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

如需转载请注明出处:ip_conntrack table full dropping packet解决方案  https://www.ttlsa.com/html/2303.html文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/ 文章源自运维生存时间-https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 13/08/2013 10:09:07
  • 转载请务必保留本文链接:https://www.ttlsa.com/linux/ip_conntrack-table-full-dropping-packet-solution/
  • iptables
  • ip_conntrack
  • ip_conntrack_max
  • ip_conntrack_table
评论  5  访客  4
    • Jinnery
      Jinnery 9

      楼主,用过这个方法吗: http://hi.baidu.com/farmerluo/item/f49bbdc0e390a52dee4665bb

      • Jinnery
        Jinnery 9

        centos 6.5 默认已经是空了 IPTABLES_MODULES=""。 那在使用State 规则。会有什么影响吗

        • Jinnery
          Jinnery 9

          你好,请问。为什么不能配置状态的规则呢。

          • fa
            fa 1

            很好

          评论已关闭!