正在加载...
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]

Linux NAT ip_conntrack: table full

[ 2011/07/02 18:05 | by selboo ]
Web服务器用了一段时间,随意间使用dmesg命令后竟然发现了一些奇怪的内核日志,如下:
ip_conntrack: table full, dropping packet.

后来才知道, Linux TCP 的 ip_conntrack 模块会记录 tcp 通讯协议的 established connection 记录, 而且默认 timeout 时间长达五天 (432,000 秒), 由于Web站点使用memcached因此怀疑一些TCP链接从来就没有释放过,所以导致这种问题。

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

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

写入理想的数值 (每一个 ip_conntrack buffer 会占用 292 Bytes)
指令: echo "数值" > /proc/sys/
首先去 http://www.ipdeny.com/ipblocks/ 下载对应的国家IP地址端

写个脚本循环导入即可。

[code]#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com

COUNTRY = "cn"
IPTABLES = /sbin/iptables
EGREP = /bin/egrep

if [ "$(id -u)" != "0" ]; then
   echo "you must be root" 1>&2
   exit 1
fi

resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t m
Tags: ,

iptables 端口转发

[ 2010/08/02 19:07 | by selboo ]
*nat
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j SNAT --to-source 172.20.3.114

-A PREROUTING -d 192.168.6.114 -p tcp -m tcp --dport 3725 -j DNAT --to-destination 210.51.173.102:1521
访问192.168.6.114:3725的访问  他的目的地址都修改成210.51.173.102:1521
-A POSTROUTING -d 210.51.173.102 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.6.114
所有目的地址是210.51.173.102:1521  他的源地址都修改成192.168.6.114

阅读全文
iptables 相关概念

匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
接受(accept):和丢弃相反,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
阅读全文
Oct 22 22:11:59 ha2 kernel: printk: 160 messages suppressed.
Oct 22 22:11:59 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:11:59 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:03 ha2 kernel: printk: 514 messages suppressed.
Oct 22 22:12:03 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:08 ha2 kernel: printk: 255 messages suppressed.
Oct 22 22:12:08 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:12 ha2 kernel: printk: 498 messages suppressed.
Oct 22 22:12:12 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:17 ha2 kernel: printk: 876 messages suppressed.
Oct 22 22:12:17 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:22 ha2 kernel: printk: 924 messages suppressed.
Oct 22 22:12:22 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:27 ha2 kernel: printk: 936 messages suppressed.
Oct 22 22:12:27 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:32 ha2 kernel: printk: 959 messages suppressed.
Oct 22 22:12:32 ha2 kernel: ip_conntrack: table full, dropping packet.
Oct 22 22:12:37 ha2 kernel: printk: 898 messages suppressed.
Oct 22 22:12:37 ha2 kernel: ip_conntrack: table full, dropping packet.

查看系统ip_conntrack_max大小
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
32768

这个值太小了

增大其值

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max=6553600
net.ipv4.netfilter.ip_conntrack_max=6553600
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

sysctl -p

让其生效
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]