Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161360
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-11 10:24
文章分类

全部博文(51)

文章存档

2018年(3)

2017年(22)

2016年(9)

2015年(17)

我的朋友

分类: 网络与安全

2017-11-09 17:14:04

Iptables---ip_conntrack的解析

ip_conntrack 是Linux NAT一个跟踪连接条目的模块记录着允许的跟踪连接条目ip_conntrack 模块会记录 tcp 通讯协议的 established connection 记录, 而且预设 timeout 时间长达五天 (432,000 秒).所以局域网中当有人使用p2p类的软件就很容易使ip_conntrack达到最大值...也由此造成:

ip_conntrack: table full, dropping packet.  的错误提示..网关丢弃数据包..网络中断.. 

具体解决办法如下二种:

1.加大ip_conntrack_max设定值
  #modprobe ip_conntrack 需提前加载ip_conntrack模块
  #echo "986400" > /proc/sys/net/ipv4/ip_conntrack_max 数值具体多大应计算得出
开机使用新数值..有三种办法:
  除vi /etc/rc.local外亦有:
  #vi /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 986400
  #sysctl -w net.ipv4.ip_conntrack_max=986400

 

2.减小ip_conntrack timeout 的时限 默认5天即432000s

  ip_conntrack_tcp_timeout_established 值默认432000s 即5天
  #echo "3600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
  开机使用同于上例
  #vi /etc/sysctl.conf 加入: net.ipv4.ip_tcp_timeout_established = 3600
  #sysctl -w net.ipv4.ip_tcp_timeout_established=3600


  另:通过ip_conntrack buffer 使用状况查出局域网中进行p2p下载的主机

  查看目前 ip_conntrack buffer 使用状况 
    #grep conn /proc/slabinfo

  结果实例: ip_conntrack 5918 8140 384 10 1:tunables 54 27 0:slabdata 814 814 0 (各值说明如下)

    ip_conntrack the cache name
    5918 the number of currently active objects
    8140 the total number of available objects
    384 the size of each object in bytes
    814 the number of pages with at least one active object
    814 the total number of allocated pages
    1 the number of pages per slab are given

  man slabinfo 可查询详细说明.

  查出目前 ip_conntrack 记录最多的前五名 IP
    #cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c |

      sort -nr | head -n 5

  结果实例:

   2987 192.168.1.30
    334 192.168.1.52
    166 192.168.1.56
     99 192.168.1.43
     84 192.168.1.46

  由此可知, 192.168.1.30占用了绝大多数的ip_connect buffer,推断这个IP的User可能使用了P2P软件

 

  推荐一个清除某IP链接的方法:通过过滤ip_conntrack表得到ESTABLISHED状态过多的ip,用hping工具将这些ip从表中清理掉...

   下载: 
  安装: ./configure;make;make install

  hping清理IP链接脚本:(此脚本修改链接状态为closed)

    #!/bin/sh

      if [ -z $1 ] ; then
              echo "NO INPUT IP"
              exit
      fi
      grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line; do

      S_IP=`echo $line | awk '{print substr($5,5)}'`
      S_SOCK=`echo $line | awk '{print substr($7,7)}'`
      D_IP=`echo $line | awk '{print substr($6,5)}'`
      D_SOCK=`echo $line | awk '{print substr($8,7)}'`
      echo "$S_IP:$S_SOCK $D_IP:$D_SOCK" 
      hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 > /home/huaying/1.log 2>&1 & 
      done

 

  对于具体p2p下载产生链接数及ip_connect_max具体设置数值大小推荐以下范文,感兴趣的朋友可以看看...

 

附:linux NAT 性能优化常用设置...
  #echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range
  #echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush
  #echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  #echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
  #echo "1048576" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
  #echo "1" > /proc/sys/net/ipv4/ip_forward
  #echo "268435456" >/proc/sys/kernel/shmall
  #echo "536870912" >/proc/sys/kernel/shmmax
  #echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
  #echo "1024" > /proc/sys/net/ipv4/neigh/default/gc_thresh1
  #echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2
  #echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3
  #echo "52428800" > /proc/sys/net/ipv4/route/max_size
  #echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
  #echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
阅读(567) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~