Тюнинг nf_conntrack

В этой статье я приведу пример оптимизации параметров nf_conntrack для высоконагруженного NAT сервера.

Сначала посмотрим текущее и максимальное количество отслеживаемых соединений (максимальное обычно 524288):

/sbin/sysctl net.netfilter.nf_conntrack_count
/sbin/sysctl net.netfilter.nf_conntrack_max

Увеличим максимальное значение и hashsize (у меня обычно hashsize=nf_conntrack_max/8):

/sbin/sysctl -w net.netfilter.nf_conntrack_max=4194304
echo "524288" > /sys/module/nf_conntrack/parameters/hashsize

Чтобы изменение не сбросилось после перезапуска системы, укажем в /etc/sysctl.conf:

net.netfilter.nf_conntrack_max = 4194304

А также hashsize в /etc/rc.local:

echo "524288" > /sys/module/nf_conntrack/parameters/hashsize

Теперь посмотрим текущие значения timeout:

sysctl -a | grep conntrack | grep timeout

По умолчанию обычно такие значения:

net.netfilter.nf_conntrack_generic_timeout = 600
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000 # 5days
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180

На высоконагруженных серверах желательно немного уменьшить значения timeout, особенно при DDOS атаках, либо отключить nf_conntrack если он не нужен и сервер не используется для NAT, например изменим некоторые timeout до таких значений (закомментированные строки я оставил без изменения):

net.netfilter.nf_conntrack_generic_timeout=60
net.netfilter.nf_conntrack_icmp_timeout=10
#net.netfilter.nf_conntrack_tcp_timeout_close=10
net.netfilter.nf_conntrack_tcp_timeout_close_wait=20
net.netfilter.nf_conntrack_tcp_timeout_established=600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
#net.netfilter.nf_conntrack_tcp_timeout_last_ack=30
#net.netfilter.nf_conntrack_tcp_timeout_max_retrans=300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=60
net.netfilter.nf_conntrack_tcp_timeout_time_wait=60
#net.netfilter.nf_conntrack_tcp_timeout_unacknowledged=300
#net.netfilter.nf_conntrack_udp_timeout=30
net.netfilter.nf_conntrack_udp_timeout_stream=60

Чтобы применить изменения в файле /etc/sysctl.conf, выполним команду:

sysctl -p

Еще документация:
https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

Смотрите также мои статьи:

Оставьте комментарий

Добавить комментарий