设置 net.netfilter.nf_conntrack_buckets 的正确位置在哪里?

设置 net.netfilter.nf_conntrack_buckets 的正确位置在哪里?

我目前正在尝试在启动时设置 net.netfilter.nf_conntrack_buckets。我最初假设这可以通过 sysctl.conf 来完成,但 net.netfilter.nf_conntrack_buckets(和其他 net.netfilter 配置)根本没有应用。将 sysctl -p 添加到 rc.local 允许应用除 net.netfilter.nf_conntrack_buckets 之外的所有 net.netfilter 配置。我还要注意,尝试使用 sysctl -w 从终端设置它会导致“错误:密钥‘net.netfilter.nf_conntrack_buckets’上的权限被拒绝”

# This should be applied at boot
net.netfilter.nf_conntrack_max=1966080
net.netfilter.nf_conntrack_buckets=245760

哪里是做这件事的正确地方?

答案1

我认为 sysctl 参数仅供查看。您需要使用/sys/module/nf_conntrack/parameters/hashsize界面进行运行时更改,并使用hashsize模块选项在初始模块加载期间进行设置。

你可能希望/etc/modprobe.d/文件中的一个条目看起来像这样:

options nf_conntrack hashsize=XXXXX

答案2

进一步回答 Andrew B 的问题:

由于某种原因,RHEL 文档建议将可执行的 shell 脚本放入,其名称类似于nf_conntrack_hashsize.modulesextension /etc/sysconfig/modules。我不知道为什么。内容看起来如下:

#!/bin/sh
exec /sbin/modprobe nf_conntrack hashsize=262144

答案3

您需要将一个名为 localhost 的文件放在 /etc/modprobe.d/ 目录中。

在此文件中,添加以下行(值是示例):

options nf_conntrack hashsize=333333

现在,更快的解决方案是重新启动,另一个选择是尝试重新加载 nf_conntrack 内核模块,这有点困难,因为它与其他正在运行的模块相连。

使用以下命令检查结果:

cat /sys/module/nf_conntrack/parameters/hashsize

相关内容