安全地增加 ip_conntrack_max ?

Nei*_*eil 11 networking iptables

我经常在日志中看到以下内容:

内核:ip_conntrack:表已满,正在丢弃数据包。

目前,我将 ip_conntrack_max 设置为 65536(默认为 RHEL5)。

记住内存使用情况,我可以安全地增加多少这个值?我在这个盒子上有 4GB 内存。这台机器的功能之一是作为静态内容服务器,这可能解释了高连接数,也意味着我希望尽可能多地保留用于缓存的操作系统内存。

另外,以下两者有什么区别?/proc/sys/net/ipv4/netfilter/ip_conntrack_max /proc/sys/net/ipv4/ip_conntrack_max

我应该编辑哪个?

谢谢!

Jac*_*zny 12

首先,问自己一个问题:您的设置是否需要连接跟踪?如果它只是一个服务器并且防火墙/NAT 在其他地方完成,那么您可能可以一起禁用 conntrack。

其次,检查您的 conntrack 条目是否有意义。有时,由于某些网络或防火墙配置错误,conntrack 表充满了垃圾。通常这些是从未完全建立的连接的条目。例如,当服务器收到传入的连接 SYN 数据包时,可能会发生这种情况,但服务器的回复总是在网络的某个地方丢失。

我唯一有一个“ip_conntrack: table full”消息并且需要增加 ip_conntrack_max 的机器(而不是固定配置),其中路由器为相当大的网络(数千个端点)执行 NAT。

如果您知道需要 conntrack 并且它确实需要比实际更大,请增加数字直到您不再收到“表已满”消息。并观察内存使用情况。

可以在 /proc/slabinfo 文件中找到有关 conntrack 对象的内存分配的一些统计信息。


Bri*_*Ess 7

带有“netfilter”的路径是引用相同设置的旧方式。您可以编辑任一文件。

# cat /proc/sys/net/ipv4/ip_conntrack_max  
655360
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
655360
# echo 655361 > /proc/sys/net/ipv4/ip_conntrack_max
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
655361