重启后保留 nf_conntrack_max

重启后保留 nf_conntrack_max

/proc有两个 nf_conntrack_max 条目:

/proc/sys/net/netfilter/nf_conntrack_max
/proc/sys/net/nf_conntrack_max

似乎指向相同的值,因为更改一个也会更改另一个。将这两个都设置为/etc/sysctl.conf

net.netfilter.nf_conntrack_max=65528
net.ipv4.netfilter.ip_conntrack_max=65535

重启后,该值仍为 32764,因此更改不起作用。有人遇到过这种情况吗?我猜这些值是在加载相关模块之前应用的,但希望也许有人已经知道解决方案。

答案1

因为/proc/sys/net/nf_conntrack_max它依赖于模块nf_conntrack。但是系统启动时不会默认加载这个模块。

但如果你跑

iptables -t nat -L

或者

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

该模块将自动加载并设置为您的系统支持的最大数字(如果您的 RAM > 4G,则最大数字为 65536,但在不同的系统中会有所不同。)您可以将其设置为更大的数字(例如 6553600)/etc/sysctl.conf)。

解决方案

在文件末尾添加一行/etc/modules

nf_conntrack

该模块将在系统启动时加载并sysctl执行。

答案2

因为它应该是:

net.netfilter.nf_conntrack_max = 65535

现在你可以设置它而不需要重新启动:sysctl -p /etc/sysctl.conf

答案3

我不使用 Ubuntu,但以 CentOS 的思维模式思考这个问题,我得出了和你一样的假设—— sysctl 应用得太早了。一些搜索显示,这是一个自 2006 年以来提交了错误

看起来,将另一个符号链接放入优先级 > S40 以再次运行 procps init 脚本可能会满足您的需要。根据错误摘要,看起来需要对 Ubuntu sysctl 方法进行一些重新架构(而且,有趣的是,这个错误被分配给了某个不知道它被分配并且无法提供帮助的人)。

答案4

Ethan Xu 的回复是一个解决方案,但如果你不想在启动时加载 nf_conntrack,你可以nf_conntrack_max稍后在模块加载时进行设置,根据 sysctl 的记录并已在systemd 问题

# /etc/udev/rules.d/24-nf_conntrack_max.rules

ACTION=="add", SUBSYSTEM=="module", KERNEL=="nf_conntrack", \
  RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/netfilter/nf_conntrack_max"
# /etc/sysctl.d/24-nf_conntrack_max.conf
net.netfilter.nf_conntrack_max=6553600

相关内容