Ansible-Roles/roles/rocky9/tasks/tcp_tune.yml
2026-07-13 09:40:52 +03:00

263 lines
13 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TCP syncookies - технология, позволяющая не забивать
# TCP стек, пока TCP сессия полностью не установится.
# Защита на случай TCP Syn атак
# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить.
# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
- name: Set net.ipv4.tcp_syncookies
ansible.posix.sysctl:
name: net.ipv4.tcp_syncookies
value: 0
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер буфера сокетов TCP/UDP.
# Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется
# даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).
# Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра
# /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию)
# составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько
# меньший, нежели определяет принятое по умолчанию значение tcp_app_win.
# Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума,
# заданного в файле /proc/sys/net/core/rmem_max. При “статическом” выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.
# На приём TCP пакетов
- name: Set net.ipv4.tcp_rmem
ansible.posix.sysctl:
name: net.ipv4.tcp_rmem
value: 4096 8388608 16777216
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# На передачу TCP пакетов
- name: Set net.ipv4.tcp_wmem
ansible.posix.sysctl:
name: net.ipv4.tcp_wmem
value: 4096 4194394 16777216
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Для TCP протокола в целом
- name: Set net.ipv4.tcp_mem
ansible.posix.sysctl:
name: net.ipv4.tcp_mem
value: 8388608 12582912 16777216
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Для UDP протокола в целом
- name: Set net.ipv4.udp_mem
ansible.posix.sysctl:
name: net.ipv4.udp_mem
value: 8388608 12582912 16777216
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
- name: Set net.ipv4.udp_rmem_min
ansible.posix.sysctl:
name: net.ipv4.udp_rmem_min
value: 16384
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
- name: Set net.ipv4.udp_wmem_min
ansible.posix.sysctl:
name: net.ipv4.udp_wmem_min
value: 16384
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать.
- name: Set net.core.netdev_max_backlog
ansible.posix.sysctl:
name: net.core.netdev_max_backlog
value: 500000
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента.
- name: Set net.ipv4.tcp_max_syn_backlog
ansible.posix.sysctl:
name: net.ipv4.tcp_max_syn_backlog
value: 5480000
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Увеличим возможное количество сокетов в состоянии TIME_WAIT.
- name: Set net.ipv4.tcp_max_tw_buckets
ansible.posix.sysctl:
name: net.ipv4.tcp_max_tw_buckets
value: 5480000
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.
- name: Set net.ipv4.tcp_tw_reuse
ansible.posix.sysctl:
name: net.ipv4.tcp_tw_reuse
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT DEPRICATRED
# - ansible.posix.sysctl:
# name: net.ipv4.tcp_tw_recycle
# value: 1
# state: present
# sysctl_file: /etc/sysctl.d/02-tcp.conf
# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной.
# Партнер может не закрыть это соединение никогда.
- name: Set net.ipv4.tcp_fin_timeout
ansible.posix.sysctl:
name: net.ipv4.tcp_fin_timeout
value: 3
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной
# пропускной способности некоторых сетей
- name: Set net.ipv4.tcp_sack
ansible.posix.sysctl:
name: net.ipv4.tcp_sack
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP.
- name: Set net.ipv4.tcp_synack_retries
ansible.posix.sysctl:
name: net.ipv4.tcp_synack_retries
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle).
- name: Set net.ipv4.tcp_max_orphans
ansible.posix.sysctl:
name: net.ipv4.tcp_max_orphans
value: 65536
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне.
- name: Set net.ipv4.tcp_orphan_retries
ansible.posix.sysctl:
name: net.ipv4.tcp_orphan_retries
value: 0
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE.
# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек)
- name: Set net.ipv4.tcp_keepalive_time
ansible.posix.sysctl:
name: net.ipv4.tcp_keepalive_time
value: 600
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Интервал, с которым слать keepalive пакеты (в сек)
- name: Set net.ipv4.tcp_keepalive_intvl
ansible.posix.sysctl:
name: net.ipv4.tcp_keepalive_intvl
value: 20
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# После скольки неудачных пробах считать соединение разорванным
- name: Set net.ipv4.tcp_keepalive_probes
ansible.posix.sysctl:
name: net.ipv4.tcp_keepalive_probes
value: 2
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Запрещаем технологию slow start (малый размер окна) в TCP подключениях,
# в которых долгое время не было трафика.
- name: Set net.ipv4.tcp_slow_start_after_idle
ansible.posix.sysctl:
name: net.ipv4.tcp_slow_start_after_idle
value: 0
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений.
- name: Set net.ipv4.ip_local_port_range
ansible.posix.sysctl:
name: net.ipv4.ip_local_port_range
value: 2000 65000
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок.
- name: Set net.ipv4.tcp_timestamps
ansible.posix.sysctl:
name: net.ipv4.tcp_timestamps
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных.
# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC.
# Включён по умолчанию в linux ядре начиная с версии 2.6.19
# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал
- name: Set net.ipv4.tcp_congestion_control
ansible.posix.sysctl:
name: net.ipv4.tcp_congestion_control
value: bbr
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Параметр определяет дисциплину обработки очередей
# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR
- name: Set net.core.default_qdisc
ansible.posix.sysctl:
name: net.core.default_qdisc
value: "fq"
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Не сохранять результаты измерений TCP соединения в кеше при его закрытии
- name: Set net.ipv4.tcp_no_metrics_save
ansible.posix.sysctl:
name: net.ipv4.tcp_no_metrics_save
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь
# пакетов при передаче в рамках TCP подключения)
- name: Set net.ipv4.tcp_window_scaling
ansible.posix.sysctl:
name: net.ipv4.tcp_window_scaling
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Защита от TIME_WAIT атак.
- name: Set net.ipv4.tcp_rfc1337
ansible.posix.sysctl:
name: net.ipv4.tcp_rfc1337
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес.
- name: Set net.ipv4.icmp_echo_ignore_broadcasts
ansible.posix.sysctl:
name: net.ipv4.icmp_echo_ignore_broadcasts
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Не отвечаем на ошибочно сформированные сообщения.
- name: Set net.ipv4.icmp_ignore_bogus_error_responses
ansible.posix.sysctl:
name: net.ipv4.icmp_ignore_bogus_error_responses
value: 1
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
# Максимальное число открытых сокетов, ждущих соединения.
# Максимум в CentOS 7
- name: Set net.core.somaxconn
ansible.posix.sysctl:
name: net.core.somaxconn
value: 65535
state: present
sysctl_file: /etc/sysctl.d/02-tcp.conf
- name: Set net.netfilter.nf_conntrack_max
ansible.posix.sysctl:
name: net.netfilter.nf_conntrack_max
value: 524288
state: present
sysctl_file: /etc/sysctl.d/02-udp.conf
- name: Set net.netfilter.nf_conntrack_udp_timeout
ansible.posix.sysctl:
name: net.netfilter.nf_conntrack_udp_timeout
value: 10
state: present
sysctl_file: /etc/sysctl.d/02-udp.conf
- name: Set net.netfilter.nf_conntrack_udp_timeout_stream
ansible.posix.sysctl:
name: net.netfilter.nf_conntrack_udp_timeout_stream
value: 30
state: present
sysctl_file: /etc/sysctl.d/02-udp.conf