Sysctl - Параметры ядра Linux

Sysctl - Параметры ядра Linux

Данная страница описывает настройку параметров ядра Linux в VyOS через интерфейс sysctl. Параметры ядра позволяют изменять поведение системы на низком уровне для оптимизации производительности, безопасности и функциональности сети.

Обзор

Что такое sysctl

Sysctl - это механизм для модификации параметров ядра Linux во время работы системы (runtime) без перезагрузки. В VyOS sysctl используется для:

  • Оптимизации сетевой производительности (буферы TCP/UDP, backlog, congestion control)
  • Усиления безопасности (защита от spoofing, SYN flood, ICMP redirects)
  • Настройки IPv4/IPv6 (forwarding, routing, multicast)
  • Управления памятью (swappiness, cache pressure, OOM behavior)
  • Файловой системы (максимум открытых файлов, inotify limits)
  • Kernel behavior (panic, core dumps, randomization)

Архитектура sysctl в VyOS

VyOS Configuration
       |
       v
/opt/vyatta/etc/config/scripts/
       |
       v
/etc/sysctl.d/99-vyos.conf
       |
       v
/proc/sys/* (kernel runtime parameters)

Важно:

  • Параметры sysctl в VyOS сохраняются в конфигурации и применяются при каждой загрузке
  • Изменения применяются немедленно после commit без перезагрузки
  • Не редактируйте /etc/sysctl.conf или /proc/sys/* вручную - используйте VyOS конфигурацию
  • VyOS автоматически генерирует /etc/sysctl.d/99-vyos.conf из своей конфигурации

Структура параметров sysctl

Параметры sysctl организованы в иерархическую структуру:

/proc/sys/
├── net/                    # Сетевые параметры
│   ├── ipv4/              # IPv4 настройки
│   ├── ipv6/              # IPv6 настройки
│   ├── core/              # Общие сетевые параметры
│   └── netfilter/         # Netfilter/iptables
├── vm/                     # Виртуальная память
├── fs/                     # Файловая система
├── kernel/                 # Ядро системы
└── dev/                    # Устройства

Базовая конфигурация

Синтаксис команды

set system sysctl parameter <parameter-name> value <value>

Формат параметра:

  • Точечная нотация: net.ipv4.ip_forward
  • Слэш нотация (в /proc/sys/): /proc/sys/net/ipv4/ip_forward
  • В VyOS используется только точечная нотация

Основные примеры

Включение IP forwarding для роутера

# IPv4 forwarding (обязательно для роутера)
set system sysctl parameter net.ipv4.ip_forward value 1

# IPv6 forwarding
set system sysctl parameter net.ipv6.conf.all.forwarding value 1

commit
save

Отключение ICMP redirects (безопасность)

# Запретить принимать ICMP redirects
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0

# Запретить отправлять ICMP redirects
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0

commit
save

Защита от IP spoofing (Reverse Path Filtering)

# Strict mode (рекомендуется для большинства случаев)
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1

commit
save

Увеличение размеров TCP буферов

# Минимальный, базовый и максимальный размеры (в байтах)
set system sysctl parameter net.ipv4.tcp_rmem value '4096 87380 16777216'
set system sysctl parameter net.ipv4.tcp_wmem value '4096 65536 16777216'

commit
save

Категории параметров sysctl

1. Сетевые параметры IPv4 (net.ipv4.*)

IP Forwarding и Routing

# Включить IP forwarding (необходимо для роутера)
set system sysctl parameter net.ipv4.ip_forward value 1

# Разрешить нелокальный bind (для failover/VRRP)
set system sysctl parameter net.ipv4.ip_nonlocal_bind value 1

# Динамический выбор локального порта
set system sysctl parameter net.ipv4.ip_local_port_range value '1024 65535'

TCP Performance Tuning

TCP Window Scaling:

# Включить window scaling (RFC 1323)
set system sysctl parameter net.ipv4.tcp_window_scaling value 1

# Размеры буферов TCP read
set system sysctl parameter net.ipv4.tcp_rmem value '4096 87380 16777216'

# Размеры буферов TCP write
set system sysctl parameter net.ipv4.tcp_wmem value '4096 65536 16777216'

# Максимальный размер буфера (16 MB)
set system sysctl parameter net.core.rmem_max value 16777216
set system sysctl parameter net.core.wmem_max value 16777216

TCP Congestion Control:

# Алгоритм congestion control (bbr, cubic, reno)
set system sysctl parameter net.ipv4.tcp_congestion_control value 'bbr'

# Доступные алгоритмы
set system sysctl parameter net.ipv4.tcp_allowed_congestion_control value 'bbr cubic reno'

TCP Keepalive:

# Время до начала keepalive проверок (секунды)
set system sysctl parameter net.ipv4.tcp_keepalive_time value 600

# Интервал между keepalive пробами
set system sysctl parameter net.ipv4.tcp_keepalive_intvl value 60

# Количество попыток keepalive
set system sysctl parameter net.ipv4.tcp_keepalive_probes value 3

TCP Timestamps:

# Включить TCP timestamps (RFC 1323)
set system sysctl parameter net.ipv4.tcp_timestamps value 1

TCP Fast Open:

# Включить TCP Fast Open (TFO)
# 1 = client, 2 = server, 3 = both
set system sysctl parameter net.ipv4.tcp_fastopen value 3

TCP Security Parameters

SYN Flood Protection:

# Включить SYN cookies (защита от SYN flood)
set system sysctl parameter net.ipv4.tcp_syncookies value 1

# Максимум SYN backlog
set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 8192

# Количество SYN retries
set system sysctl parameter net.ipv4.tcp_syn_retries value 2
set system sysctl parameter net.ipv4.tcp_synack_retries value 2

TCP Reuse and Recycle:

# Разрешить повторное использование TIME-WAIT сокетов
set system sysctl parameter net.ipv4.tcp_tw_reuse value 1

# Время жизни orphan соединений (секунды)
set system sysctl parameter net.ipv4.tcp_fin_timeout value 30

# Максимум orphan sockets
set system sysctl parameter net.ipv4.tcp_max_orphans value 65536

ICMP Parameters

# Игнорировать ICMP echo requests (ping)
set system sysctl parameter net.ipv4.icmp_echo_ignore_all value 0

# Игнорировать broadcast ping
set system sysctl parameter net.ipv4.icmp_echo_ignore_broadcasts value 1

# Ограничение rate ICMP ответов (для защиты от flood)
set system sysctl parameter net.ipv4.icmp_ratelimit value 100

# Запретить ICMP redirects (безопасность)
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0

# Запретить source routing
set system sysctl parameter net.ipv4.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv4.conf.default.accept_source_route value 0

Reverse Path Filtering (Anti-Spoofing)

# rp_filter modes:
# 0 = disabled
# 1 = strict mode (recommended for most cases)
# 2 = loose mode (for asymmetric routing)

# Strict mode (проверяет обратный маршрут)
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1

# Loose mode (для сложной топологии с несимметричным роутингом)
# set system sysctl parameter net.ipv4.conf.all.rp_filter value 2

ARP Parameters

# Время жизни ARP записей (секунды)
set system sysctl parameter net.ipv4.neigh.default.gc_stale_time value 120

# Таблица ARP - thresholds
set system sysctl parameter net.ipv4.neigh.default.gc_thresh1 value 128
set system sysctl parameter net.ipv4.neigh.default.gc_thresh2 value 512
set system sysctl parameter net.ipv4.neigh.default.gc_thresh3 value 1024

2. Сетевые параметры IPv6 (net.ipv6.*)

IPv6 Forwarding

# Включить IPv6 forwarding
set system sysctl parameter net.ipv6.conf.all.forwarding value 1
set system sysctl parameter net.ipv6.conf.default.forwarding value 1

IPv6 Security

# Запретить IPv6 router advertisements
set system sysctl parameter net.ipv6.conf.all.accept_ra value 0
set system sysctl parameter net.ipv6.conf.default.accept_ra value 0

# Запретить IPv6 redirects
set system sysctl parameter net.ipv6.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv6.conf.default.accept_redirects value 0

# Запретить source routing
set system sysctl parameter net.ipv6.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv6.conf.default.accept_source_route value 0

IPv6 Autoconfiguration

# Отключить IPv6 autoconf (для статической конфигурации)
set system sysctl parameter net.ipv6.conf.all.autoconf value 0
set system sysctl parameter net.ipv6.conf.default.autoconf value 0

Полное отключение IPv6 (если не используется)

set system sysctl parameter net.ipv6.conf.all.disable_ipv6 value 1
set system sysctl parameter net.ipv6.conf.default.disable_ipv6 value 1
set system sysctl parameter net.ipv6.conf.lo.disable_ipv6 value 1

3. Core Network Parameters (net.core.*)

Network Buffers

# Максимальный размер receive buffer
set system sysctl parameter net.core.rmem_max value 16777216

# Максимальный размер send buffer
set system sysctl parameter net.core.wmem_max value 16777216

# Default receive buffer
set system sysctl parameter net.core.rmem_default value 262144

# Default send buffer
set system sysctl parameter net.core.wmem_default value 262144

# Размер буфера для оптимизации памяти
set system sysctl parameter net.core.optmem_max value 25165824

Network Device Queue

# Максимальная длина очереди пакетов для обработки
set system sysctl parameter net.core.netdev_max_backlog value 5000

# Бюджет на обработку пакетов за один poll
set system sysctl parameter net.core.netdev_budget value 600

Somaxconn

# Максимальный backlog для listen() системного вызова
# Важно для высоконагруженных веб-серверов
set system sysctl parameter net.core.somaxconn value 4096

4. Virtual Memory (vm.*)

Swappiness

# Агрессивность использования swap (0-100)
# 0 = минимум swap, 100 = активно использовать swap
# Рекомендуется: 10 для серверов, 60 для desktop

set system sysctl parameter vm.swappiness value 10

Cache Pressure

# Давление на освобождение кэша (0-100)
# Меньше значение = больше кэша сохраняется
set system sysctl parameter vm.vfs_cache_pressure value 50

Dirty Memory

# Процент памяти для dirty pages перед началом записи
set system sysctl parameter vm.dirty_ratio value 10

# Процент памяти для background записи
set system sysctl parameter vm.dirty_background_ratio value 5

# Время жизни dirty data (centiseconds = 1/100 секунды)
set system sysctl parameter vm.dirty_expire_centisecs value 3000

# Интервал wakeup pdflush для записи (centiseconds)
set system sysctl parameter vm.dirty_writeback_centisecs value 500

OOM (Out of Memory) Killer

# OOM killer behavior
# 0 = kernel tries to avoid killing
# 1 = kernel kills process more aggressively
# 2 = kernel panics on OOM

set system sysctl parameter vm.panic_on_oom value 0

# Переоценка OOM score
set system sysctl parameter vm.oom_kill_allocating_task value 0

5. File System (fs.*)

File Descriptors

# Максимальное количество открытых файлов (system-wide)
set system sysctl parameter fs.file-max value 2097152

# Максимум inotify watches (для мониторинга файлов)
set system sysctl parameter fs.inotify.max_user_watches value 524288

AIO (Asynchronous I/O)

# Максимум асинхронных IO requests
set system sysctl parameter fs.aio-max-nr value 1048576

6. Kernel Parameters (kernel.*)

Kernel Panic

# Автоматическая перезагрузка после panic (секунды)
# 0 = не перезагружаться
set system sysctl parameter kernel.panic value 10

# Panic при kernel oops
set system sysctl parameter kernel.panic_on_oops value 1

Core Dumps

# Шаблон имени core dump файла
set system sysctl parameter kernel.core_pattern value '/tmp/core-%e-%p-%t'

PID Max

# Максимальный PID (Process ID)
set system sysctl parameter kernel.pid_max value 65536

SysRq

# Включить SysRq magic keys (для аварийного управления)
# 1 = enabled, 0 = disabled
set system sysctl parameter kernel.sysrq value 1

Address Space Layout Randomization (ASLR)

# ASLR для защиты от эксплойтов
# 0 = disabled
# 1 = random stack/vdso/heap
# 2 = full randomization (recommended)
set system sysctl parameter kernel.randomize_va_space value 2

Примеры конфигураций для типовых сценариев

Сценарий 1: Базовая безопасность (Security Hardening)

Настройка параметров безопасности для защиты от типовых атак.

configure

# === IPv4 Security ===

# Включить IP forwarding для роутера
set system sysctl parameter net.ipv4.ip_forward value 1

# Защита от IP spoofing (Reverse Path Filtering)
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1

# Запретить source routing
set system sysctl parameter net.ipv4.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv4.conf.default.accept_source_route value 0

# Запретить ICMP redirects
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0
set system sysctl parameter net.ipv4.conf.all.secure_redirects value 0
set system sysctl parameter net.ipv4.conf.default.secure_redirects value 0

# Игнорировать broadcast ping
set system sysctl parameter net.ipv4.icmp_echo_ignore_broadcasts value 1

# Игнорировать bogus ICMP error responses
set system sysctl parameter net.ipv4.icmp_ignore_bogus_error_responses value 1

# SYN flood protection
set system sysctl parameter net.ipv4.tcp_syncookies value 1
set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 8192

# Логировать martian packets (impossible addresses)
set system sysctl parameter net.ipv4.conf.all.log_martians value 1
set system sysctl parameter net.ipv4.conf.default.log_martians value 1

# === IPv6 Security ===

# Запретить IPv6 router advertisements
set system sysctl parameter net.ipv6.conf.all.accept_ra value 0
set system sysctl parameter net.ipv6.conf.default.accept_ra value 0

# Запретить IPv6 redirects
set system sysctl parameter net.ipv6.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv6.conf.default.accept_redirects value 0

# Запретить IPv6 source routing
set system sysctl parameter net.ipv6.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv6.conf.default.accept_source_route value 0

# === Kernel Security ===

# Address Space Layout Randomization
set system sysctl parameter kernel.randomize_va_space value 2

# Ограничить доступ к kernel logs
set system sysctl parameter kernel.dmesg_restrict value 1

# Ограничить доступ к kernel pointers
set system sysctl parameter kernel.kptr_restrict value 2

commit
save
exit

Сценарий 2: High-Performance TCP Tuning

Оптимизация для высокопроизводительных сетевых приложений (1 Gbps+ links).

configure

# === TCP Buffer Sizes ===

# Увеличенные TCP буферы для высокоскоростных каналов
# Формат: min default max (в байтах)

# TCP receive buffer (4KB, 128KB, 64MB)
set system sysctl parameter net.ipv4.tcp_rmem value '4096 131072 67108864'

# TCP write buffer (4KB, 128KB, 64MB)
set system sysctl parameter net.ipv4.tcp_wmem value '4096 131072 67108864'

# Maximum socket buffer sizes
set system sysctl parameter net.core.rmem_max value 67108864
set system sysctl parameter net.core.wmem_max value 67108864
set system sysctl parameter net.core.rmem_default value 262144
set system sysctl parameter net.core.wmem_default value 262144

# === TCP Performance ===

# TCP window scaling (RFC 1323)
set system sysctl parameter net.ipv4.tcp_window_scaling value 1

# TCP timestamps (RFC 1323)
set system sysctl parameter net.ipv4.tcp_timestamps value 1

# SACK (Selective Acknowledgement)
set system sysctl parameter net.ipv4.tcp_sack value 1

# TCP Fast Open
set system sysctl parameter net.ipv4.tcp_fastopen value 3

# BBR congestion control (best for high-speed links)
set system sysctl parameter net.ipv4.tcp_congestion_control value 'bbr'
set system sysctl parameter net.core.default_qdisc value 'fq'

# === Connection Handling ===

# Повторное использование TIME-WAIT сокетов
set system sysctl parameter net.ipv4.tcp_tw_reuse value 1

# Уменьшить FIN timeout
set system sysctl parameter net.ipv4.tcp_fin_timeout value 15

# Увеличить максимум orphan sockets
set system sysctl parameter net.ipv4.tcp_max_orphans value 131072

# === Network Queue ===

# Увеличить backlog для обработки пакетов
set system sysctl parameter net.core.netdev_max_backlog value 10000

# Увеличить listen backlog
set system sysctl parameter net.core.somaxconn value 8192

# === TCP SYN Queue ===

set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 16384

# === Local Port Range ===

set system sysctl parameter net.ipv4.ip_local_port_range value '10000 65535'

commit
save
exit

Сценарий 3: Оптимизация памяти для роутера

Настройка параметров виртуальной памяти для сетевого устройства.

configure

# === Swappiness ===

# Минимизировать использование swap
set system sysctl parameter vm.swappiness value 10

# === Cache Pressure ===

# Сохранять больше кэша в памяти
set system sysctl parameter vm.vfs_cache_pressure value 50

# === Dirty Memory ===

# Настройка записи dirty pages
set system sysctl parameter vm.dirty_ratio value 10
set system sysctl parameter vm.dirty_background_ratio value 5
set system sysctl parameter vm.dirty_expire_centisecs value 3000
set system sysctl parameter vm.dirty_writeback_centisecs value 500

# === OOM Killer ===

# Не делать panic при OOM
set system sysctl parameter vm.panic_on_oom value 0

# Минимум свободной памяти (KB)
set system sysctl parameter vm.min_free_kbytes value 65536

commit
save
exit

Сценарий 4: Увеличение лимитов файловых дескрипторов

Для роутеров с большим количеством одновременных соединений (BGP, VPN, NAT).

configure

# === File Descriptors ===

# Максимум открытых файлов (system-wide)
set system sysctl parameter fs.file-max value 2097152

# === Network Connection Tracking ===

# Увеличить conntrack max (если используется NAT/Firewall)
# Примечание: это модуль netfilter, требует модуля nf_conntrack
set system sysctl parameter net.netfilter.nf_conntrack_max value 524288

# === Inotify ===

# Увеличить лимиты inotify (для мониторинга файлов)
set system sysctl parameter fs.inotify.max_user_watches value 524288
set system sysctl parameter fs.inotify.max_user_instances value 512

commit
save
exit

Примеры для облачных платформ

Пример 1: Yandex Cloud - High-Performance TCP для Cloud Workloads

Оптимизация VyOS в Yandex Cloud для высокопроизводительной обработки трафика между VM.

configure

# === Description ===
# Конфигурация для VyOS в Yandex Cloud
# Оптимизация для высокоскоростных внутренних соединений (до 10 Gbps)
# Улучшение latency и throughput для cloud workloads

# === Basic Forwarding ===

set system sysctl parameter net.ipv4.ip_forward value 1
set system sysctl parameter net.ipv6.conf.all.forwarding value 1

# === TCP Performance для Cloud ===

# Увеличенные буферы для высокой пропускной способности
set system sysctl parameter net.ipv4.tcp_rmem value '4096 131072 67108864'
set system sysctl parameter net.ipv4.tcp_wmem value '4096 131072 67108864'
set system sysctl parameter net.core.rmem_max value 67108864
set system sysctl parameter net.core.wmem_max value 67108864

# BBR congestion control (оптимально для облачных сетей)
set system sysctl parameter net.ipv4.tcp_congestion_control value 'bbr'
set system sysctl parameter net.core.default_qdisc value 'fq'

# TCP Fast Open для уменьшения latency
set system sysctl parameter net.ipv4.tcp_fastopen value 3

# Оптимизация TCP window
set system sysctl parameter net.ipv4.tcp_window_scaling value 1
set system sysctl parameter net.ipv4.tcp_timestamps value 1
set system sysctl parameter net.ipv4.tcp_sack value 1

# === Connection Management ===

# Быстрое переиспользование сокетов
set system sysctl parameter net.ipv4.tcp_tw_reuse value 1
set system sysctl parameter net.ipv4.tcp_fin_timeout value 15

# Увеличенные лимиты соединений
set system sysctl parameter net.ipv4.tcp_max_orphans value 131072
set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 16384

# === Network Queue для Cloud NIC ===

# Увеличение backlog (важно для burst трафика в cloud)
set system sysctl parameter net.core.netdev_max_backlog value 10000
set system sysctl parameter net.core.somaxconn value 8192

# === Security для Yandex Cloud ===

# Reverse Path Filtering (strict mode)
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1

# SYN flood protection
set system sysctl parameter net.ipv4.tcp_syncookies value 1

# Запретить ICMP redirects
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0

# === Memory для Cloud VM ===

# Минимизировать swap (cloud VMs обычно имеют достаточно RAM)
set system sysctl parameter vm.swappiness value 10

# Оптимизация dirty pages
set system sysctl parameter vm.dirty_ratio value 10
set system sysctl parameter vm.dirty_background_ratio value 5

# === File Descriptors для Cloud Services ===

set system sysctl parameter fs.file-max value 2097152

commit
save
exit

Проверка применения параметров в Yandex Cloud:

# Проверка BBR congestion control
sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control

# Проверка буферов
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem

# Мониторинг TCP статистики
netstat -s | grep -i tcp

# Проверка queue длины
ip -s link show eth0

Пример 2: VK Cloud - Security Hardening для DMZ роутера

Усиленная безопасность для VyOS в VK Cloud, работающего как edge router в DMZ.

configure

# === Description ===
# VyOS Edge Router в VK Cloud DMZ
# Максимальная безопасность для защиты от внешних угроз
# Оптимизация для обработки mixed trusted/untrusted traffic

# === Basic Routing ===

set system sysctl parameter net.ipv4.ip_forward value 1

# === Strict Security - IP Spoofing Protection ===

# Reverse Path Filtering - strict mode
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1

# Запретить source routing (защита от routing attacks)
set system sysctl parameter net.ipv4.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv4.conf.default.accept_source_route value 0

# === ICMP Security ===

# Запретить ICMP redirects
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0
set system sysctl parameter net.ipv4.conf.all.secure_redirects value 0
set system sysctl parameter net.ipv4.conf.default.secure_redirects value 0

# Игнорировать broadcast ping (smurf attack protection)
set system sysctl parameter net.ipv4.icmp_echo_ignore_broadcasts value 1

# Игнорировать bogus ICMP responses
set system sysctl parameter net.ipv4.icmp_ignore_bogus_error_responses value 1

# Rate limit ICMP responses
set system sysctl parameter net.ipv4.icmp_ratelimit value 100

# === SYN Flood Protection ===

# Включить SYN cookies
set system sysctl parameter net.ipv4.tcp_syncookies value 1

# Увеличить SYN backlog
set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 8192

# Уменьшить SYN retries (быстрее отбрасывать атаки)
set system sysctl parameter net.ipv4.tcp_syn_retries value 2
set system sysctl parameter net.ipv4.tcp_synack_retries value 2

# === Connection Limits для DMZ ===

# Ограничить orphan sockets
set system sysctl parameter net.ipv4.tcp_max_orphans value 65536

# Быстрое закрытие соединений
set system sysctl parameter net.ipv4.tcp_fin_timeout value 20

# === Logging и Monitoring ===

# Логировать martian packets (подозрительные адреса)
set system sysctl parameter net.ipv4.conf.all.log_martians value 1
set system sysctl parameter net.ipv4.conf.default.log_martians value 1

# === IPv6 Security (если используется) ===

# Запретить IPv6 router advertisements
set system sysctl parameter net.ipv6.conf.all.accept_ra value 0
set system sysctl parameter net.ipv6.conf.default.accept_ra value 0

# Запретить IPv6 redirects
set system sysctl parameter net.ipv6.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv6.conf.default.accept_redirects value 0

# Если IPv6 не используется - отключить полностью
# set system sysctl parameter net.ipv6.conf.all.disable_ipv6 value 1
# set system sysctl parameter net.ipv6.conf.default.disable_ipv6 value 1

# === Kernel Security ===

# Address Space Layout Randomization (полная)
set system sysctl parameter kernel.randomize_va_space value 2

# Ограничить доступ к kernel logs (неавторизованным пользователям)
set system sysctl parameter kernel.dmesg_restrict value 1

# Скрыть kernel pointers
set system sysctl parameter kernel.kptr_restrict value 2

# Panic и перезагрузка при критических ошибках
set system sysctl parameter kernel.panic value 10
set system sysctl parameter kernel.panic_on_oops value 1

# === Network Performance (сбалансированное с безопасностью) ===

# Умеренные буферы
set system sysctl parameter net.ipv4.tcp_rmem value '4096 87380 16777216'
set system sysctl parameter net.ipv4.tcp_wmem value '4096 65536 16777216'
set system sysctl parameter net.core.rmem_max value 16777216
set system sysctl parameter net.core.wmem_max value 16777216

# Backlog для обработки
set system sysctl parameter net.core.netdev_max_backlog value 5000
set system sysctl parameter net.core.somaxconn value 4096

# === Connection Tracking для Firewall/NAT ===

# Увеличить conntrack table для NAT
set system sysctl parameter net.netfilter.nf_conntrack_max value 524288

# Timeout для conntrack (более агрессивный для DMZ)
set system sysctl parameter net.netfilter.nf_conntrack_tcp_timeout_established value 3600

commit
save
exit

Проверка безопасности в VK Cloud:

# Проверка rp_filter (должен быть 1)
sysctl net.ipv4.conf.all.rp_filter

# Проверка SYN cookies
sysctl net.ipv4.tcp_syncookies

# Проверка ICMP redirects (должны быть 0)
sysctl net.ipv4.conf.all.accept_redirects
sysctl net.ipv4.conf.all.send_redirects

# Проверка martian packet logging
sysctl net.ipv4.conf.all.log_martians

# Мониторинг SYN flood атак
netstat -s | grep -i syn

# Мониторинг conntrack использования
conntrack -C
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

Пример 3: Multi-Cloud VPN Gateway (Yandex + VK Cloud)

Конфигурация для VyOS, работающего как VPN шлюз между Yandex Cloud и VK Cloud.

configure

# === Description ===
# Multi-cloud VPN Gateway
# Оптимизация для VPN туннелей (IPsec/WireGuard)
# Балансировка производительности и безопасности

# === Forwarding ===

set system sysctl parameter net.ipv4.ip_forward value 1
set system sysctl parameter net.ipv6.conf.all.forwarding value 1

# === VPN Specific - PMTU Discovery ===

# Включить PMTU discovery (важно для VPN)
set system sysctl parameter net.ipv4.ip_no_pmtu_disc value 0

# === TCP Optimizations для VPN ===

# MTU probing для TCP (автоматическое определение MTU)
set system sysctl parameter net.ipv4.tcp_mtu_probing value 1

# TCP buffers (умеренные для VPN overhead)
set system sysctl parameter net.ipv4.tcp_rmem value '4096 87380 33554432'
set system sysctl parameter net.ipv4.tcp_wmem value '4096 65536 33554432'
set system sysctl parameter net.core.rmem_max value 33554432
set system sysctl parameter net.core.wmem_max value 33554432

# === Congestion Control для VPN ===

# BBR для лучшей работы через туннели
set system sysctl parameter net.ipv4.tcp_congestion_control value 'bbr'
set system sysctl parameter net.core.default_qdisc value 'fq'

# === Security (Moderate для VPN) ===

# Loose rp_filter для VPN туннелей (asymmetric routing)
set system sysctl parameter net.ipv4.conf.all.rp_filter value 2
set system sysctl parameter net.ipv4.conf.default.rp_filter value 2

# SYN flood protection
set system sysctl parameter net.ipv4.tcp_syncookies value 1
set system sysctl parameter net.ipv4.tcp_max_syn_backlog value 8192

# Запретить ICMP redirects
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0

# === IPsec Specific ===

# Отключить ICMP redirects на VPN интерфейсах
# (будет применено на конкретных интерфейсах через конфигурацию)

# === Performance для IPsec ===

# Увеличить backlog для обработки зашифрованного трафика
set system sysctl parameter net.core.netdev_max_backlog value 10000
set system sysctl parameter net.core.somaxconn value 8192

# === Memory Optimization ===

set system sysctl parameter vm.swappiness value 10
set system sysctl parameter vm.vfs_cache_pressure value 50

# === Connection Limits ===

set system sysctl parameter net.ipv4.tcp_max_orphans value 131072
set system sysctl parameter fs.file-max value 2097152

commit
save
exit

Команды проверки и мониторинга

Просмотр текущих значений sysctl

# Показать все параметры sysctl
sysctl -a

# Показать конкретный параметр
sysctl net.ipv4.ip_forward

# Показать все параметры в категории
sysctl -a | grep net.ipv4
sysctl -a | grep vm

# Прямое чтение из /proc/sys
cat /proc/sys/net/ipv4/ip_forward

Просмотр VyOS конфигурации sysctl

# Показать все настроенные параметры sysctl в VyOS
show configuration system sysctl

# Показать в формате set commands
show configuration commands | match sysctl

# Показать конкретный параметр
show configuration system sysctl parameter net.ipv4.ip_forward

Применение параметров вручную (временно)

# Применить параметр без изменения конфигурации (до перезагрузки)
sudo sysctl -w net.ipv4.ip_forward=1

# Применить из файла
sudo sysctl -p /etc/sysctl.d/99-vyos.conf

# Загрузить все конфигурации sysctl
sudo sysctl --system

Мониторинг сетевой производительности

# TCP статистика
netstat -s | grep -i tcp

# Показать retransmits
ss -ti

# Показать congestion control algorithm в использовании
ss -ti | grep -i cubic
ss -ti | grep -i bbr

# Проверка buffer sizes для активных соединений
ss -m

# Мониторинг backlog
ss -l | grep -i listen

Проверка буферов и очередей

# Текущие размеры буферов
sysctl net.core.rmem_max
sysctl net.core.wmem_max
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem

# Статистика сетевых очередей
ip -s link show eth0

# Backlog статистика
cat /proc/net/netstat | grep -i tcpext

# Conntrack статистика (если используется)
conntrack -C
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

Мониторинг памяти

# Использование памяти
free -h

# Swappiness текущее значение
sysctl vm.swappiness

# Статистика swap
vmstat 1 5

# Dirty pages статистика
cat /proc/meminfo | grep -i dirty
sysctl vm.dirty_ratio
sysctl vm.dirty_background_ratio

# OOM killer logs
dmesg | grep -i oom
journalctl -k | grep -i oom

Проверка файловых дескрипторов

# Текущее использование file descriptors (system-wide)
cat /proc/sys/fs/file-nr

# Максимум file descriptors
sysctl fs.file-max

# File descriptors по процессам
lsof | wc -l

# Top процессы по открытым файлам
lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

Устранение неполадок (Troubleshooting)

Проблема 1: Параметр sysctl не применяется после commit

Симптомы:

  • Команда show configuration system sysctl показывает параметр
  • sysctl <parameter> показывает старое значение
  • Параметр не применяется в /proc/sys/

Диагностика:

# Проверить конфигурацию VyOS
show configuration system sysctl parameter net.ipv4.ip_forward

# Проверить текущее значение
sysctl net.ipv4.ip_forward

# Проверить сгенерированный файл
cat /etc/sysctl.d/99-vyos.conf | grep ip_forward

# Проверить логи
journalctl -xe | grep sysctl

Возможные причины:

  1. Некорректное имя параметра
# Неправильно (underscores вместо dots)
set system sysctl parameter net_ipv4_ip_forward value 1

# Правильно
set system sysctl parameter net.ipv4.ip_forward value 1
  1. Параметр не существует в текущем ядре
# Проверить доступность параметра
ls -la /proc/sys/net/ipv4/ | grep ip_forward
  1. Модуль ядра не загружен
# Некоторые параметры требуют модулей
# Например, nf_conntrack для conntrack параметров
lsmod | grep nf_conntrack

# Загрузить модуль если нужно
sudo modprobe nf_conntrack

Решение:

# 1. Исправить конфигурацию
configure
delete system sysctl parameter <incorrect-parameter>
set system sysctl parameter <correct-parameter> value <value>
commit
save
exit

# 2. Применить вручную для немедленного эффекта
sudo sysctl -w net.ipv4.ip_forward=1

# 3. Перезагрузить (если параметр критичен)
sudo reboot

Проблема 2: Производительность сети не улучшилась после изменения буферов

Симптомы:

  • TCP буферы увеличены в sysctl
  • Пропускная способность остается низкой
  • Latency не улучшается

Диагностика:

# Проверить примененные параметры
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.core.rmem_max
sysctl net.core.wmem_max

# Проверить автотюнинг
sysctl net.ipv4.tcp_moderate_rcvbuf

# Мониторинг активных соединений
ss -ti | head -20

# Проверить congestion control
sysctl net.ipv4.tcp_congestion_control

# Статистика ретрансмитов
netstat -s | grep -i retrans

# Проверить NIC ring buffers
ethtool -g eth0

Возможные причины:

  1. net.core.rmem_max / wmem_max меньше чем tcp_rmem / tcp_wmem максимумы
# Проблема: tcp_rmem max = 67108864, но rmem_max = 212992
sysctl net.ipv4.tcp_rmem  # 4096 87380 67108864
sysctl net.core.rmem_max  # 212992

# Решение: увеличить core limits
configure
set system sysctl parameter net.core.rmem_max value 67108864
set system sysctl parameter net.core.wmem_max value 67108864
commit
save
  1. Congestion control не оптимизирован
# BBR может быть недоступен
sysctl net.ipv4.tcp_available_congestion_control

# Если BBR не в списке, использовать cubic
configure
set system sysctl parameter net.ipv4.tcp_congestion_control value 'cubic'
commit
save
  1. QDisc не оптимизирован для BBR
# Для BBR требуется fq qdisc
sysctl net.core.default_qdisc

configure
set system sysctl parameter net.core.default_qdisc value 'fq'
commit
save
  1. NIC offloading отключен
# Проверить offloading
ethtool -k eth0 | grep offload

# Включить если выключен
sudo ethtool -K eth0 tso on
sudo ethtool -K eth0 gso on
sudo ethtool -K eth0 gro on

Проблема 3: Система не загружается после изменения kernel параметров

Симптомы:

  • VyOS не загружается или kernel panic
  • Система зависает при загрузке
  • Невозможно войти в систему

Решение через GRUB rescue:

  1. Загрузиться в single user mode:
# При загрузке нажать 'e' в GRUB menu
# Добавить к строке linux:
linux ... single init=/bin/bash

# Загрузиться
  1. Откатить изменения:
# Remount filesystem в read-write
mount -o remount,rw /

# Удалить проблемный параметр из конфигурации
# Отредактировать /config/config.boot
vi /config/config.boot

# Найти и удалить строку с проблемным sysctl параметром

# Или удалить весь sysctl конфиг
rm -f /etc/sysctl.d/99-vyos.conf

# Перезагрузить
reboot
  1. Альтернатива: загрузиться с предыдущей конфигурации:
# При загрузке VyOS выбрать предыдущий commit из boot menu
# VyOS автоматически откатится к предыдущей рабочей конфигурации

Профилактика:

# Всегда тестировать критичные изменения перед save
configure
set system sysctl parameter <parameter> value <value>
commit

# НЕ ДЕЛАТЬ save сразу!
# Тестировать работоспособность

# Если все работает - сохранить
save

# Если проблемы - откатить
rollback

Проблема 4: Conntrack table переполняется (NAT/Firewall)

Симптомы:

  • Сообщение “nf_conntrack: table full, dropping packet”
  • Новые соединения не устанавливаются
  • Intermittent connectivity issues

Диагностика:

# Проверить текущее использование conntrack
conntrack -C

# Проверить максимум
cat /proc/sys/net/netfilter/nf_conntrack_max

# Проверить kernel logs
dmesg | grep -i conntrack
journalctl -k | grep -i conntrack

# Статистика conntrack
cat /proc/net/nf_conntrack | wc -l

Решение:

configure

# Увеличить nf_conntrack_max
set system sysctl parameter net.netfilter.nf_conntrack_max value 524288

# Увеличить hashsize (требует перезагрузки модуля)
# hashsize обычно = nf_conntrack_max / 4

# Уменьшить timeout для established соединений (более агрессивно)
set system sysctl parameter net.netfilter.nf_conntrack_tcp_timeout_established value 3600

# Уменьшить timeout для TIME_WAIT
set system sysctl parameter net.netfilter.nf_conntrack_tcp_timeout_time_wait value 30

commit
save
exit

# Для немедленного эффекта
sudo sysctl -w net.netfilter.nf_conntrack_max=524288

Увеличение hashsize (требует перезагрузки):

# Добавить параметр модуля
sudo vi /etc/modprobe.d/nf_conntrack.conf

# Добавить:
options nf_conntrack hashsize=131072

# Перезагрузить модуль (осторожно! Сбросит все существующие соединения)
sudo rmmod nf_conntrack
sudo modprobe nf_conntrack

# Или перезагрузить систему
sudo reboot

Проблема 5: OOM Killer убивает процессы

Симптомы:

  • Система убивает процессы при нехватке памяти
  • В логах сообщения “Out of memory: Kill process”
  • Непредсказуемое поведение системы

Диагностика:

# Проверить логи OOM killer
dmesg | grep -i oom
journalctl -k | grep -i oom

# Проверить использование памяти
free -h

# Проверить swap
swapon --show

# Проверить OOM параметры
sysctl vm.panic_on_oom
sysctl vm.oom_kill_allocating_task

# Процессы с высоким OOM score
cat /proc/*/oom_score | sort -n | tail -10

Решение:

configure

# Не делать panic при OOM (позволить убить процесс)
set system sysctl parameter vm.panic_on_oom value 0

# Увеличить swappiness если нужен swap
set system sysctl parameter vm.swappiness value 30

# Увеличить min_free_kbytes (резервировать больше памяти)
set system sysctl parameter vm.min_free_kbytes value 131072

commit
save
exit

Добавление swap (если недостаточно RAM):

# Создать swap файл (1GB)
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo chmod 600 /swap
sudo mkswap /swap
sudo swapon /swap

# Сделать постоянным
sudo vi /etc/fstab
# Добавить:
/swap none swap sw 0 0

Лучшие практики (Best Practices)

1. Тестирование изменений

Всегда тестируйте перед сохранением:

configure

# Внести изменения
set system sysctl parameter <parameter> value <value>

# Применить
commit

# ТЕСТИРОВАТЬ СИСТЕМУ!
# Проверить:
# - Работоспособность сети
# - Доступность сервисов
# - Производительность
# - Логи на ошибки

# Если все работает - сохранить
save

# Если проблемы - откатить
rollback

2. Документирование изменений

Используйте commit comments:

configure
set system sysctl parameter net.ipv4.tcp_rmem value '4096 131072 67108864'
commit comment "Increased TCP receive buffers for high-speed 10G link - Ticket #12345"
save

Ведите changelog:

# Просмотр истории изменений
show system commit
show system commit diff 5

3. Постепенное внедрение

Не меняйте все параметры сразу:

# Плохо: 50 параметров одновременно
# Невозможно определить причину проблемы

# Хорошо: поэтапное внедрение
# Шаг 1: Безопасность (rp_filter, syn_cookies)
# Тест
# Шаг 2: TCP буферы
# Тест
# Шаг 3: Congestion control
# Тест

4. Baseline измерения

Измеряйте ДО и ПОСЛЕ:

# Baseline перед изменениями
iperf3 -c server -t 60 > before.txt
netstat -s > netstat-before.txt

# Внести изменения sysctl

# Тест после изменений
iperf3 -c server -t 60 > after.txt
netstat -s > netstat-after.txt

# Сравнить результаты
diff netstat-before.txt netstat-after.txt

5. Резервное копирование конфигурации

Backup перед критичными изменениями:

# Сохранить текущую конфигурацию
save /config/backup-before-sysctl-$(date +%Y%m%d).config

# Просмотр доступных backup
ls -lh /config/backup-*

# Восстановление из backup (если нужно)
load /config/backup-before-sysctl-20250115.config
commit
save

6. Специфические параметры для сценариев

Не используйте универсальный конфиг для всех сценариев:

СценарийПриоритетыКлючевые параметры
Edge Router (DMZ)Безопасностьrp_filter=1, syn_cookies=1, log_martians=1
Core RouterПроизводительностьtcp_rmem/wmem (large), bbr, netdev_max_backlog
VPN GatewayТуннелированиеtcp_mtu_probing=1, rp_filter=2, ip_no_pmtu_disc=0
NAT GatewayConntracknf_conntrack_max (large), tcp_tw_reuse=1
Lab/TestingМониторингlog_martians=1, tcp_timestamps=1

7. Мониторинг после внедрения

Установите мониторинг ключевых метрик:

# Скрипт мониторинга sysctl параметров
#!/bin/bash
# /config/scripts/monitor-sysctl.sh

echo "=== Critical sysctl parameters ==="
echo "IP Forwarding: $(sysctl -n net.ipv4.ip_forward)"
echo "SYN Cookies: $(sysctl -n net.ipv4.tcp_syncookies)"
echo "RP Filter: $(sysctl -n net.ipv4.conf.all.rp_filter)"
echo "Conntrack Max: $(sysctl -n net.netfilter.nf_conntrack_max)"
echo "Conntrack Current: $(conntrack -C)"
echo "TCP Retransmits: $(netstat -s | grep -i retrans)"

8. Осторожность с опасными параметрами

Параметры, которые могут сломать систему:

# ОПАСНО: Отключение IP forwarding на роутере
# set system sysctl parameter net.ipv4.ip_forward value 0

# ОПАСНО: Отключение всех ICMP (может сломать PMTU discovery)
# set system sysctl parameter net.ipv4.icmp_echo_ignore_all value 1

# ОПАСНО: kernel.panic = 0 (система зависнет при panic вместо reboot)
# set system sysctl parameter kernel.panic value 0

# ОПАСНО: vm.swappiness = 100 (постоянный swap, деградация производительности)
# set system sysctl parameter vm.swappiness value 100

9. Соответствие требованиям безопасности

Стандарты безопасности (CIS, NIST):

# Минимальный набор для compliance
configure

# CIS Benchmark - Network Parameters
set system sysctl parameter net.ipv4.conf.all.send_redirects value 0
set system sysctl parameter net.ipv4.conf.default.send_redirects value 0
set system sysctl parameter net.ipv4.conf.all.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.default.accept_redirects value 0
set system sysctl parameter net.ipv4.conf.all.accept_source_route value 0
set system sysctl parameter net.ipv4.conf.default.accept_source_route value 0
set system sysctl parameter net.ipv4.icmp_echo_ignore_broadcasts value 1
set system sysctl parameter net.ipv4.icmp_ignore_bogus_error_responses value 1
set system sysctl parameter net.ipv4.conf.all.rp_filter value 1
set system sysctl parameter net.ipv4.conf.default.rp_filter value 1
set system sysctl parameter net.ipv4.tcp_syncookies value 1
set system sysctl parameter net.ipv4.conf.all.log_martians value 1

# Kernel hardening
set system sysctl parameter kernel.randomize_va_space value 2
set system sysctl parameter kernel.dmesg_restrict value 1
set system sysctl parameter kernel.kptr_restrict value 2

commit
save

10. Версионность и совместимость

Учитывайте версию ядра:

# Проверить версию ядра
uname -r

# Некоторые параметры доступны только в новых версиях
# Например, tcp_bbr появился в Linux 4.9+

# Проверить доступность параметра
ls /proc/sys/net/ipv4/tcp_congestion_control

# Проверить доступные congestion control алгоритмы
sysctl net.ipv4.tcp_available_congestion_control

Полезные ресурсы и документация

Официальная документация

TCP/IP Tuning Guides

Security Hardening

Cloud-specific

Заключение

Правильная настройка параметров ядра через sysctl является критически важной частью оптимизации VyOS для конкретных сценариев использования. Основные выводы:

Ключевые принципы:

  1. Понимание параметров: Не изменяйте параметры, не понимая их влияния
  2. Тестирование: Всегда тестируйте изменения перед сохранением в production
  3. Мониторинг: Отслеживайте эффект изменений через метрики
  4. Документирование: Записывайте причины и результаты изменений
  5. Постепенность: Вносите изменения поэтапно, а не все сразу

Приоритеты по сценариям:

Edge Router (DMZ):

  • Безопасность превыше всего (rp_filter, syn_cookies, no redirects)
  • Умеренная производительность
  • Логирование подозрительной активности

High-Performance Core Router:

  • Максимальная пропускная способность (large buffers, BBR, optimized queues)
  • Умеренная безопасность
  • Минимальная latency

VPN Gateway:

  • PMTU discovery для туннелей
  • Loose rp_filter для asymmetric routing
  • Оптимизированный congestion control для encrypted traffic

NAT Gateway:

  • Максимум conntrack entries
  • Fast connection reuse
  • Large file descriptor limits

Рекомендации для облачных платформ:

Yandex Cloud:

  • Используйте BBR для оптимальной производительности
  • Учитывайте burst nature cloud networking
  • Настройте large buffers для высокоскоростных каналов

VK Cloud:

  • Приоритет на security hardening для DMZ роутеров
  • Оптимизация conntrack для NAT workloads
  • Баланс производительности и безопасности

Следуйте лучшим практикам, тестируйте изменения и адаптируйте конфигурацию под свои специфические требования для достижения оптимальной производительности и безопасности VyOS в вашей инфраструктуре.