美文网首页
nf_conntrack丢包解决方案

nf_conntrack丢包解决方案

作者: Sonic_Ma | 来源:发表于2019-06-21 12:03 被阅读0次

    nf_conntrack: table full, dropping packet 解决方案

    一、概述

    ​ nf_conntrack一般存放在/proc/net目录下,当防火墙关闭时,这个目录不会出现。防火墙打开后,nf_conntrack出现在/proc/net目录下面。

    查看nf_conntrack(nf_conntrack为防火墙记录用户连接的状态连接表)

    cat nf_conntrack
    ipv4     2 tcp      6 86 TIME_WAIT src=10.16.104.60 dst=10.0.32.107 sport=36226 dport=22 src=10.0.32.107 dst=10.16.104.60 sport=22 dport=36226 [ASSURED] mark=0 zone=0 use=2
    

    二、解决方案

    1、关闭防火墙

    systemd stop iptables
    systemd disable iptables
    

    切记:在防火墙关闭状态下,不要通过iptables指令(比如 iptables -nL)来查看当前状态!因为这样会导致防火墙被启动,而且规则为空。虽然不会有任何拦截效果,但所有连接状态都会被记录,浪费资源且影响性能 并可能导致防火墙主动丢包!

    2、内核参数优化

    2.1、状态跟踪表

    理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)

    以64G的操作系统为例,CONNTRACK_MAX = 6410241024*1024/16384/2 = 2097152

    sysctl –w net.netfilter.nf_conntrack_max = 2097152
    
    2.2、哈希表

    哈希表大小通常为总表的1/8,最大为1/2。

    CONNTRACK_BUCKETS = CONNTRACK_MAX / 8

    同样以64G的操作系统,哈希最佳范围是 262144 ~ 1048576 。

    运行状态中通过 sysctl net.netfilter.nf_conntrack_buckets 进行查看,通过文件 /sys/module/nf_conntrack/parameters/hashsize 进行设置。

    或者新建 /etc/modprobe.d/iptables.conf ,重新加载模块才生效:

    options nf_conntrack hashsize = 262144
    
    2.3、完整参数
    net.nf_conntrack_max = 1048576
    net.netfilter.nf_conntrack_max = 1048576
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_established = 3600
    

    3、使用裸表

    添加“不跟踪”标识。如下示例更适合桌面系统或随意性强的服务器。因为它开启了连接的状态机制,方便和外部通信。

    修改 /etc/sysconfig/iptables 文件:

    #raw表
    iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT
    iptables -t raw -A PREROUTING -p tcp -m multiport --dport 80,81,82 -j NOTRACK
    iptables -t raw -A PREROUTING -p tcp -m multiport --sport 80,81,82 -j NOTRACK
    

    4、删除nf_conntrack模块

    对所有连接都关闭跟踪,不跟踪任何连接状态。不过规则就限制比较严谨,进出都需要显式申明。

    lsmod | grep nf_conntrack
    modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state
    modprobe -r nf_conntrack
    

    相关文章

      网友评论

          本文标题:nf_conntrack丢包解决方案

          本文链接:https://www.haomeiwen.com/subject/plkyqctx.html