| 
 理解nf_conntrack和调整nf_conntrack_max  nf_conntrack 工作在 3 层,支持 IPv4 和 IPv6,而 ip_conntrack 只支持 IPv4。目前,大多的 ip_conntrack_* 已被 nf_conntrack_* 取代,很多 ip_conntrack_* 仅仅是个 alias,原先的 ip_conntrack 的 /proc/sys/net/ipv4/netfilter/ 依然存在,但是新的 nf_conntrack 在 /proc/sys/net/netfilter/ 中,这个应该是做个向下的兼容: 
   
复制代码 
代码如下:  
 
$ pwd 
/proc/sys/net/ipv4/netfilter 
$ ls 
ip_conntrack_buckets ip_conntrack_tcp_loose ip_conntrack_tcp_timeout_syn_recv 
ip_conntrack_checksum ip_conntrack_tcp_max_retrans ip_conntrack_tcp_timeout_syn_sent 
ip_conntrack_count ip_conntrack_tcp_timeout_close ip_conntrack_tcp_timeout_syn_sent2 
ip_conntrack_generic_timeout ip_conntrack_tcp_timeout_close_wait ip_conntrack_tcp_timeout_time_wait 
ip_conntrack_icmp_timeout ip_conntrack_tcp_timeout_established ip_conntrack_udp_timeout 
ip_conntrack_log_invalid ip_conntrack_tcp_timeout_fin_wait ip_conntrack_udp_timeout_stream 
ip_conntrack_max ip_conntrack_tcp_timeout_last_ack 
ip_conntrack_tcp_be_liberal ip_conntrack_tcp_timeout_max_retrans 
$ pwd 
/proc/sys/net/netfilter 
$ ls 
nf_conntrack_acct nf_conntrack_tcp_timeout_close 
nf_conntrack_buckets nf_conntrack_tcp_timeout_close_wait 
nf_conntrack_checksum nf_conntrack_tcp_timeout_established 
nf_conntrack_count nf_conntrack_tcp_timeout_fin_wait 
nf_conntrack_events nf_conntrack_tcp_timeout_last_ack 
nf_conntrack_events_retry_timeout nf_conntrack_tcp_timeout_max_retrans 
nf_conntrack_expect_max nf_conntrack_tcp_timeout_syn_recv 
nf_conntrack_generic_timeout nf_conntrack_tcp_timeout_syn_sent 
nf_conntrack_icmp_timeout nf_conntrack_tcp_timeout_time_wait 
nf_conntrack_log_invalid nf_conntrack_tcp_timeout_unacknowledged 
nf_conntrack_max nf_conntrack_udp_timeout 
nf_conntrack_tcp_be_liberal nf_conntrack_udp_timeout_stream 
nf_conntrack_tcp_loose nf_log/ 
conntrack_tcp_max_retrans
  
查看当前的连接数: 
   
复制代码 
代码如下:  
 
# grep ip_conntrack /proc/slabinfo 
ip_conntrack 38358 64324 304 13 1 : tunables 54 27 8 : slabdata 4948 4948 216
  
查出目前 ip_conntrack 的排名: 
   
复制代码 
代码如下:  
 
$ cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
  
nf_conntrack/ip_conntrack 跟 nat 有关,用来跟踪连接条目,它会使用一个哈希表来记录 established 的记录。nf_conntrack 在 2.6.15 被引入,而 ip_conntrack 在 2.6.22 被移除,如果该哈希表满了,就会出现: 
   
复制代码 
代码如下:  
 
nf_conntrack: table full, dropping packet
  
解决此问题有如下几种思路。  
1.不使用 nf_conntrack 模块 
首先要移除 state 模块,因为使用该模块需要加载 nf_conntrack。确保 iptables 规则中没有出现类似 state 模块的规则,如果有的话将其移除: 
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT  
注释 /etc/sysconfig/iptables-config 中的: 
  
   
复制代码 
代码如下:  
IPTABLES_MODULES="ip_conntrack_netbios_ns"  
 
移除 nf_conntrack 模块:  
   
复制代码 
代码如下:  
 
$ sudo modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state 
$ sudo modprobe -r nf_conntrack
  
<p style="margin: 13px 0px; padding: 0px; line-height: 25px; color: rgb(68, 68, 68); font-family: Simsun; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">现在 /proc/net/ 下面应该没有 nf_conntrack 了。 |