解決 Linux NAT ip_conntrack: table full 的方法

转自:http://cha.homeip.net/blog/archives/2005/06/_linux_nat_ip_c.html


原本 Linux NAT 用得好好的, 沒想到幾天前卻出現了無法上網的情況, 而系統記錄也出現了大量這樣的訊息:

ip_conntrack: table full, dropping packet.

後來才知道, Linux NAT 的 ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發生這種問題.

解決方法 (1): 加大 ip_conntrack_max 值

查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max

寫入理想的數值 (每一個 ip_conntrack buffer 會佔用 292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個效果是暫時的, 如果要每次開機都使用新的數值, 需將上述指令寫入 /etc/rc.d/rc.local
或是在 /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值

解決方法 (2): 降低 ip_conntrack timeout 時間

重設 ip_conntrack_tcp_timeout_established (原值: 432000, 單位: 秒)
指令: echo "數值" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
例如: echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

開機自動設置的作法同方法(1).

其他相關指令:

查看目前 ip_conntrack buffer 使用狀況
指令: grep conn /proc/slabinfo

結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)

ip_conntrackthe cache name
3024the number of currently active objects
4090the total number of available objects
384the size of each object in bytes
409the number of pages with at least one active object
409the total number of allocated pages
1the 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

結果實例:

196 192.168.0.102
      4 192.168.0.134
      2 59.58.158.176
      2 192.168.0.157
      2 192.168.0.152

由此可知, 192.168.0.102 佔用了絕大多數的 buffer, 推斷這個 IP 的 User 可能使用了 P2P 軟體.

 cut命令

#cut -d '分隔字符' -f fields
参数
-d: 后面接分隔字符,与-f一起使用
-f: 依据-d的分隔字符将一段信息分割成为数据,用-f取取第几段的意思
-c: 以字符(characters)的单位取出固定字符的区间

cat /etc/passwd | cut -d ':' -f 1

fannyzhu
samfu
renazhuang
wendyzeng
pennyzeng
www
lisachen
lanazou

cat /etc/passwd | cut -d ':' -f 6

/mnt/hdc1/fannyzhu
/mnt/hdc1/samfu
/mnt/hdc1/renazhuang
/mnt/hdc1/wendyzeng
/mnt/hdc1/pennyzeng
/home/www
/mnt/hdc1/lisachen
/home/lanazou


uniq命令

uniq命令

文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。
语法:
uniq [选项] 文件

说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
该命令各选项含义如下:
- c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
- d 只显示重复行。
- u 只显示文件中不重复的各行。
- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
- f n 与- n相同,这里n是字段数。
- s n 与+n相同,这里n是字符数。



/proc/slabinfo文件
Linux Kernel將常用的Kernel Object放在cache裡。
/proc/slabinfo裡面的資料就是這些object cache的使用情形。
cat /proc/slabinfo的內容如下:
kmem_cache 59 78 100 2 2 1
ip_fib_hash 10 113 32 1 1 1
ip_conntrack 0 0 352 0 0 1
....
依序是
name
currently active objects
total number of available objects
size of each object
number of pages with at least one active objects
total number of allocated pages.
number of pages per slab are given



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值