Когда я только начинала разворачивать свои первые VPS, честно говоря, файл
/etc/sysctl.conf
sysctl
sysctl
Что такое sysctl?
sysctl
Значения переменных можно увидеть и поменять на лету. Это особенно важно, когда ты хочешь оптимизировать сервер под свою задачу — будь то высоконагруженный API, VPN-туннель или просто безопасный SSH-доступ.
Где живут параметры sysctl?
Основной файл конфигурации — это:
/etc/sysctl.conf
Также система может загружать параметры из:
/etc/sysctl.d/*.conf
А если хочется что-то быстро протестировать:
sudo sysctl -w net.ipv4.ip_forward=1
Этот параметр включит маршрутизацию между интерфейсами, и сразу же, без ребута. Но после перезагрузки он слетит, если не прописать его в
sysctl.conf
Почему важно настраивать sysctl?
Настройки ядра напрямую влияют на:
- пропускную способность сети (,
net.core.rmem_max
);net.core.wmem_max
- безопасность (,
net.ipv4.conf.all.accept_source_route
);kernel.kptr_restrict
- стабильность при DDoS-атаках ();
net.ipv4.tcp_syncookies
- работу NAT и VPN ();
net.ipv4.ip_forward
- поведение TCP-соединений (,
net.ipv4.tcp_fin_timeout
).net.ipv4.tcp_tw_reuse
Если ты работаешь с VPS и держишь, например, свой VPN-сервер, или пробрасываешь трафик через туннель, тебе обязательно нужно зайти в
sysctl
Проверка текущих значений
Чтобы посмотреть текущее значение переменной, вводим:
sysctl net.ipv4.tcp_syncookies
А если хотим посмотреть всё, что связано с TCP:
sysctl -a | grep tcp
Можно быстро выгрузить все параметры и сохранить:
sysctl -a > sysctl-before.txt
Очень удобно сравнивать с «после».
Пример настроек для повышения безопасности и производительности
Вот пример, который я использую на одном из своих публичных серверов (где работает WireGuard и DNS over HTTPS):
# Сеть net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.log_martians = 1 # TCP оптимизация net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_window_scaling = 1 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # Защита kernel.kptr_restrict = 2 fs.protected_symlinks = 1 fs.protected_hardlinks = 1
После внесения изменений применяю:
sudo sysctl -p
Если всё ок — сразу чувствуешь прирост в стабильности, особенно на активных соединениях.
Настройка под WireGuard, VPN и маршрутизацию
Если вы используете WireGuard VPN на VPS, не забудьте включить IP-переадресацию:
net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1
Без этого туннель просто не будет маршрутизировать трафик.
Файл /etc/sysctl.conf
vs sysctl -w
/etc/sysctl.conf
sysctl -w
Важно понимать:
sysctl -w
sudo nano /etc/sysctl.conf
Потом сохраняем и:
sudo sysctl -p
Личный опыт
На одном из проектов, где мы держим mini-K3s кластер на VPS для микросервисов, неправильно выставленный
tcp_tw_reuse
sysctl
С тех пор я внимательно отслеживаю любые изменения в
sysctl.conf
Отдельно про net.ipv4.tcp_syncookies
Это буквально спасение от SYN-флуд атак. Если у вас открыт порт (например, веб или SSH), включите это:
net.ipv4.tcp_syncookies = 1
Сервер будет корректно обрабатывать фальшивые соединения, не тратя память.
Частые ошибки
- ❌ Ошибка: поставили , но не применили
ip_forward = 1
. → Не работает VPN.sysctl -p
- ❌ Ошибка: добавили , но не проверили
tcp_tw_reuse
. → Порты забиваются.tcp_fin_timeout
- ❌ Ошибка: изменили параметр через , но забыли сохранить в файл. → После ребута всё пропало.
sysctl -w
Итого в сухом остатке
sysctl
net.ipv4.conf.default.rp_filter
Если вы держите сервер под VPN, прокси, git или просто под веб-приложение — настройте
sysctl
Чек-лист sysctl
по задачам
sysctl
VPN-сервер (WireGuard/OpenVPN/IPSec)
net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
Обязательно проверяй: работает ли маршрут и пробрасывается ли NAT.
Web-сервер (Nginx/Apache/Node.js)
net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_tw_reuse = 1
Сильно повышает отказоустойчивость под нагрузкой и при DDoS.
Git-сервер (Gitea, GitBucket, bare repo)
fs.inotify.max_user_watches = 1048576 fs.file-max = 2097152 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 10
Важно для большого количества одновременных соединений и операций git push/pull.
Monitoring & Logging (Zabbix, ELK, Prometheus)
vm.max_map_count = 262144 fs.file-max = 2097152 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
Обязательные параметры, если используешь Elasticsearch или Logstash.
Kubernetes / K3s / Контейнеры
net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 vm.overcommit_memory = 1
Без этого K3s и kube-proxy могут работать некорректно.
Забирай бонус
Миграция бесплатна, а за оплату года — ещё месяц сверху.