我/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