问题描述
在一台服务器上重启iptables服务后,经过一段时间出现服务器丢包问题,看系统日志出现报错:
nf_conntrack是啥
Linux内核中有一个内核模块nf_conntrack用于做连接跟踪,当iptables添加了nat相关规则时此模块会被自动启用。
顾名思义这个模块维护了一个连接跟踪表,当iptables做网络地址转换(nat)或设置一些跟连接状态(state)相关的规则时,此模块会被自动启用。该模块生效后,需要对部分参数做优化,如:
-
net.netfilter.nf_conntrack_max: 连接跟踪表最大值,超出后会导致操作系统会丢包。默认为65535,优化至6553500
-
net.netfilter.nf_conntrack_tcp_timeout_established: 已建立连接的最大超时时间,配置过大可能会导致更容易被攻击,无效链接挂起太多,连接跟踪表更容易被打满。默认为43200秒,优化至3600秒
为什么重启iptables后会有问题?
严格来讲不是重启iptables后会有问题,而是重新加载nf_conntrack内核模块后会有问题。
系统参数仅在系统启动时加载一次,这导致内核模块被反复加载时,并不会重新生效系统内核的配置。
如何解决?
考虑如下几个方案。
方案一 修改iptables配置
iptable