🛠
Привет, друзья! Сегодня расскажу про одну из моих любимых утилит —
Представьте: процесс висит. Никаких логов. CPU не грузит. Что делать?
✅ Запускаем
Где
📌 Вы сразу увидите системные вызовы, которые делает процесс: может, он ждёт файл, завис на сокете или лочит какой-то ресурс.
Если хотите записать всё в лог:
-
-
💡 А чтобы отследить запуск с нуля (например, подозрительный скрипт):
Очень удобно для анализа поведения сторонних бинарников или скриптов.
Пользуйтесь и делитесь с коллегами —
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
strace
: незаменимый инструмент для отладки зависших процессовПривет, друзья! Сегодня расскажу про одну из моих любимых утилит —
strace
. Она помогает понять, что именно делает (или не делает) ваш процесс.Представьте: процесс висит. Никаких логов. CPU не грузит. Что делать?
✅ Запускаем
strace
:
sudo strace -p <PID>
Где
<PID>
— идентификатор зависшего процесса.📌 Вы сразу увидите системные вызовы, которые делает процесс: может, он ждёт файл, завис на сокете или лочит какой-то ресурс.
Если хотите записать всё в лог:
sudo strace -ff -o debug_log -p <PID>
-
-ff
— создаёт отдельный файл для каждого потока.-
-o
— префикс имени лог-файла (например, debug_log.1234
).💡 А чтобы отследить запуск с нуля (например, подозрительный скрипт):
sudo strace -f -o trace.log ./script.sh
Очень удобно для анализа поведения сторонних бинарников или скриптов.
Пользуйтесь и делитесь с коллегами —
strace
может сэкономить часы диагностики! А вы часто его используете? Напишите в комментах, как он вас выручал 😎#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍7🔥3❤1
⏰ Systemd вместо cron: как настроить таймеры правильно
Привет, друзья! Сегодня покажу, как можно элегантно заменить
💡 Почему лучше, чем cron?
- логи идут через
- удобная отладка:
- можно задать зависимости и условия запуска
🛠 Пример: скрипт бэкапа раз в день
Допустим, у нас есть скрипт
🔹
🔹
📌
📌
🚀 Активация:
Проверить активные таймеры:
Посмотреть логи:
С
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Привет, друзья! Сегодня покажу, как можно элегантно заменить
cron
с помощью systemd
-таймеров. Это удобно, прозрачно и гибко — особенно в серверной среде, где важен контроль над логами, зависимостями и запуском задач.💡 Почему лучше, чем cron?
- логи идут через
journalctl
- удобная отладка:
systemctl status
, list-timers
- можно задать зависимости и условия запуска
🛠 Пример: скрипт бэкапа раз в день
Допустим, у нас есть скрипт
/usr/local/bin/backup.sh
. Создадим два юнит-файла:🔹
backup.service
[Unit]
Description=Daily backup job
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
🔹
backup.timer
[Unit]
Description=Run daily backup
[Timer]
OnCalendar=*-*-* 03:00
Persistent=true
[Install]
WantedBy=timers.target
📌
OnCalendar=*-*-* 03:00
— запуск каждый день в 03:00 📌
Persistent=true
— если сервер был выключен в это время, задача выполнится при следующем старте🚀 Активация:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
Проверить активные таймеры:
systemctl list-timers
Посмотреть логи:
journalctl -u backup.service
С
systemd
всё под контролем! А ты уже пробовал такие таймеры вместо cron
? #Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍11
🔒 Как быстро заблокировать IP через
Иногда нужно срочно отрубить наглого сканера или атакующего IP, но без пересборки всего firewall-правила. Вот как это делается динамически, через
🔹 Шаг 1: создаём таблицу и цепочку (если ещё нет)
🔹 Шаг 2: создаём сет
>
🔹 Шаг 3: добавляем правило на блокировку из сета
🔹 Шаг 4: баним IP с TTL 1 час
💡 Зачем это?
— Блокировка IP на лету, без перезагрузки firewall.
— Удобно использовать в связке со скриптами, fail2ban и даже вручную.
— Работает быстро и безболезненно для остальных правил.
🛑 Best practice: не делай
Сохрани, пригодится для быстрой обороны 🔥
А ты так блочишь IP?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
nftables
без перезапуска правилИногда нужно срочно отрубить наглого сканера или атакующего IP, но без пересборки всего firewall-правила. Вот как это делается динамически, через
nftables
.🔹 Шаг 1: создаём таблицу и цепочку (если ещё нет)
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }
🔹 Шаг 2: создаём сет
blocked_ips
nft add set inet filter blocked_ips { type ipv4_addr \; flags timeout \; }
>
timeout
позволяет задавать TTL для блокировок.🔹 Шаг 3: добавляем правило на блокировку из сета
nft add rule inet filter input ip saddr @blocked_ips drop
🔹 Шаг 4: баним IP с TTL 1 час
nft add element inet filter blocked_ips { 192.0.2.123 timeout 1h }
💡 Зачем это?
— Блокировка IP на лету, без перезагрузки firewall.
— Удобно использовать в связке со скриптами, fail2ban и даже вручную.
— Работает быстро и безболезненно для остальных правил.
🛑 Best practice: не делай
flush ruleset
, если используешь stateful блокировку — можно потерять connection tracking и нарушить трафик.Сохрани, пригодится для быстрой обороны 🔥
А ты так блочишь IP?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍6⚡2
💥 WireGuard: Быстрая настройка через systemd без ifupdown и Netplan
Хочешь минимализм без танцев с бубном? Вот как быстро поднять WireGuard-туннель чисто через systemd — особенно удобно на серверах без NetworkManager.
📌 1. Создай конфиг
⚠️ Убедись, что
📌 2. Активируй через systemd:
👉 Это создаст интерфейс
📌 3. Проверка статуса:
Покажет активные пиры, handshake, трафик и т.д.
💡 Трюк:
Если используешь
🧠 Когда использовать:
– Минималистичные серверы без NM и Netplan
– Контейнеры и чёткие systemd-based системы
– Желание поднять VPN при boot без сторонних скриптов
Сохрани, пригодится 😉
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Хочешь минимализм без танцев с бубном? Вот как быстро поднять WireGuard-туннель чисто через systemd — особенно удобно на серверах без NetworkManager.
📌 1. Создай конфиг
/etc/wireguard/wg0.conf
:
[Interface]
Address = 10.0.0.1/24
PrivateKey = <your_private_key>
ListenPort = 51820
[Peer]
PublicKey = <peer_pub_key>
AllowedIPs = 10.0.0.2/32
⚠️ Убедись, что
chmod 600 wg0.conf
— приватный ключ должен быть защищён.📌 2. Активируй через systemd:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
👉 Это создаст интерфейс
wg0
и применит всё из конфига.📌 3. Проверка статуса:
wg show
Покажет активные пиры, handshake, трафик и т.д.
💡 Трюк:
Если используешь
systemd-networkd
, можешь вместо wg-quick
собрать туннель через .netdev
и .network
— это даёт больше контроля и не требует wg-quick
.🧠 Когда использовать:
– Минималистичные серверы без NM и Netplan
– Контейнеры и чёткие systemd-based системы
– Желание поднять VPN при boot без сторонних скриптов
Сохрани, пригодится 😉
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍8❤🔥1
💡 Как быстро сбросить зависший SSH-сеанс без ожидания таймаута
Иногда SSH-соединение замирает (например, при потере сети), и попытка закрыть его обычным
🔧 Решение: спец-последовательность OpenSSH
Нажми Enter, затем
🔍 Как это работает
👉 Другие полезные комбинации:
-
-
-
⚠️ Работает только в интерактивных SSH-сессиях, не в скриптах.
🧠 Зачем знать:
- Мгновенное закрытие зависших сессий
- Удобно при обрывах VPN/моб. сети
- Не нужен
Сохрани, пригодится в дороге или на выезде 🚀
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Иногда SSH-соединение замирает (например, при потере сети), и попытка закрыть его обычным
Ctrl+C
не работает. Не жди таймаута — есть правильный способ разорвать зависший сеанс.🔧 Решение: спец-последовательность OpenSSH
Нажми Enter, затем
~.
(тильда + точка) — и SSH сразу завершится:
<Enter>~.
🔍 Как это работает
~.
— escape-последовательность, встроенная в OpenSSH-клиент. Работает только в начале новой строки.👉 Другие полезные комбинации:
-
~?
— список доступных escape-команд-
~#
— переслать локальный порт (вручную)-
~&
— фоновый режим⚠️ Работает только в интерактивных SSH-сессиях, не в скриптах.
🧠 Зачем знать:
- Мгновенное закрытие зависших сессий
- Удобно при обрывах VPN/моб. сети
- Не нужен
kill -9
на терминалеСохрани, пригодится в дороге или на выезде 🚀
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍5
⚠️ systemd-networkd и маршруты: частая ошибка с static routes
Если ты настраиваешь сеть через
📄 Пример
🔍 Типичная ошибка:
❌ Без
📌 Зачем и когда это нужно:
— Когда нужно направить часть трафика (например, к VPN или другим подсетям) в обход основного маршрута.
— systemd сам не всегда умеет «додумать», как доставить пакет, если маршрут не полный.
🧪 Проверь после старта:
💡Проверяй
Сохрани, чтобы не отлаживать сеть часами 😬
А ты правильно пишешь
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Если ты настраиваешь сеть через
systemd-networkd
и вручную прописываешь маршруты, будь внимателен: непрописанный gateway может сломать всё подключение.📄 Пример
.network
файла с правильным static route:
[Match]
Name=eth0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.1
🔍 Типичная ошибка:
[Route]
Destination=10.10.0.0/16
❌ Без
Gateway
или PreferredSource
маршрут будет нерабочим или странно себя вести.📌 Зачем и когда это нужно:
— Когда нужно направить часть трафика (например, к VPN или другим подсетям) в обход основного маршрута.
— systemd сам не всегда умеет «додумать», как доставить пакет, если маршрут не полный.
🧪 Проверь после старта:
networkctl status eth0
ip route show dev eth0
💡Проверяй
journalctl -u systemd-networkd
— там видно, почему не применились маршруты.Сохрани, чтобы не отлаживать сеть часами 😬
А ты правильно пишешь
[Route]
?#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍4
🛡️ Быстрая проверка iptables-правил с логированием трафика
Нужно быстро понять, почему пакет не доходит? Добавь временное логирование в iptables — это упростит отладку.
💡 Шаги:
1. Вставь логирующее правило перед DROP:
👉 Меняй
2. Проверь логи (обычно
3. Удалить правило после отладки:
📌 Зачем и когда:
— Удобно при отладке фаервола, особенно при сложных правилах.
— Можно логировать и FORWARD/OUTPUT.
— Не забудь убрать, чтобы не заспамить логи!
💥 Лайфхак: добавь
🧠 Сохрани, пригодится при разборе сетевых траблов.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Нужно быстро понять, почему пакет не доходит? Добавь временное логирование в iptables — это упростит отладку.
💡 Шаги:
1. Вставь логирующее правило перед DROP:
iptables -I INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4
👉 Меняй
-s
и -j
под нужное направление/адрес. 2. Проверь логи (обычно
dmesg
или syslog):
dmesg | grep "DROP DEBUG"
# или
grep "DROP DEBUG" /var/log/syslog
3. Удалить правило после отладки:
iptables -D INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4
📌 Зачем и когда:
— Удобно при отладке фаервола, особенно при сложных правилах.
— Можно логировать и FORWARD/OUTPUT.
— Не забудь убрать, чтобы не заспамить логи!
💥 Лайфхак: добавь
-m limit
чтобы не заливать логи:
-m limit --limit 5/min
🧠 Сохрани, пригодится при разборе сетевых траблов.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍5
🔥 WireGuard через systemd: автоподключение при старте + автоматический рестарт
WireGuard крут, но не всегда подключается сам при перезагрузке. Особенно, если интерфейс поднимается раньше, чем сеть. Решение — systemd-сервис с зависимостями.
📌 Настраиваем правильный автозапуск
1. Создай кастомный systemd unit:
2. Вставь следующее:
3. Перезапусти демон systemd:
4. Включи автозапуск:
5. Проверь статус:
🧠 Зачем это нужно?
-
-
⚠️ Без этого юнита туннель часто не поднимается после ребута на headless-серверах.
💡 Совет: проверь DNS внутри туннеля — в
Сохрани, пригодится 👇
#Linux@linux_odmin #VPN@linux_odmin #Systemd@linux_odmin
👉 @linux_odmin
WireGuard крут, но не всегда подключается сам при перезагрузке. Особенно, если интерфейс поднимается раньше, чем сеть. Решение — systemd-сервис с зависимостями.
📌 Настраиваем правильный автозапуск
1. Создай кастомный systemd unit:
sudo systemctl edit wg-quick@wg0
2. Вставь следующее:
[Unit]
Description=WireGuard via wg-quick for %i
After=network-online.target
Wants=network-online.target
[Service]
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
3. Перезапусти демон systemd:
sudo systemctl daemon-reexec
4. Включи автозапуск:
sudo systemctl enable wg-quick@wg0
5. Проверь статус:
systemctl status wg-quick@wg0
🧠 Зачем это нужно?
-
After=network-online.target
гарантирует, что интерфейс поднимется после появления сети.-
Restart=on-failure
полезен, если туннель может не подняться с первого раза (например, из-за временного недоступного пира).⚠️ Без этого юнита туннель часто не поднимается после ребута на headless-серверах.
💡 Совет: проверь DNS внутри туннеля — в
wg0.conf
можно указать DNS=...
, если используешь resolvconf
или systemd-resolved
.Сохрани, пригодится 👇
#Linux@linux_odmin #VPN@linux_odmin #Systemd@linux_odmin
👉 @linux_odmin
👍4
💡 WireGuard через IPv6-only VPS с доступом к IPv4-сайтам
Если у тебя есть VPS только с IPv6 (например, Hetzner), но нужно обеспечить выход в IPv4-интернет — этот пост для тебя.
🔧 Настраиваем NAT64 + DNS64 через WireGuard
1. Устанавливаем и настраиваем WireGuard на сервере (IPv6-only VPS):
2. Добавляем NAT64 с Tayga:
3. Настраиваем DNS64 (через
Пример настройки
В
4. WireGuard на клиенте:
⚙️ Зачем это?
Так можно использовать дешевый IPv6-only VPS как NAT64-шлюз и обойтись без дорогого IPv4-адреса. Подходит для роутера или ноутбука за CGNAT.
💡 Фишка:
Можно комбинировать с
💥 Сохрани, пригодится
#Linux@linux_odmin #WireGuard@linux_odmin #Сеть@linux_odmin
👉 @linux_odmin
Если у тебя есть VPS только с IPv6 (например, Hetzner), но нужно обеспечить выход в IPv4-интернет — этот пост для тебя.
🔧 Настраиваем NAT64 + DNS64 через WireGuard
1. Устанавливаем и настраиваем WireGuard на сервере (IPv6-only VPS):
apt install wireguard
/etc/wireguard/wg0.conf
:
[Interface]
Address = fd00::1/64
ListenPort = 51820
PrivateKey = <серверный_приватный_ключ>
PostUp = sysctl -w net.ipv6.conf.all.forwarding=1
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <клиентский_публичный_ключ>
AllowedIPs = fd00::2/128
2. Добавляем NAT64 с Tayga:
apt install tayga
/etc/tayga.conf
:
tun-device nat64
ipv4-addr 192.0.2.1
prefix 64:ff9b::/96
mkdir -p /var/spool/tayga
tayga --mktun
ip link set nat64 up
ip addr add 192.0.2.1 dev nat64
ip addr add 64:ff9b::1 dev nat64
ip route add 64:ff9b::/96 dev nat64
3. Настраиваем DNS64 (через
bind9
или unbound
):Пример настройки
unbound
:
apt install unbound
В
unbound.conf
:
module-config: "dns64 validator iterator"
dns64-prefix: 64:ff9b::/96
4. WireGuard на клиенте:
[Interface]
PrivateKey = <клиентский_ключ>
Address = fd00::2/128
[Peer]
PublicKey = <серверный_ключ>
Endpoint = [IPv6-адрес]:51820
AllowedIPs = ::/0
⚙️ Зачем это?
Так можно использовать дешевый IPv6-only VPS как NAT64-шлюз и обойтись без дорогого IPv4-адреса. Подходит для роутера или ноутбука за CGNAT.
💡 Фишка:
Можно комбинировать с
systemd-resolved
или dnsmasq
для более гибкого DNS64.💥 Сохрани, пригодится
#Linux@linux_odmin #WireGuard@linux_odmin #Сеть@linux_odmin
👉 @linux_odmin
👍3
Диагностика “висящих” TCP-соединений: как быстро найти виновника
Когда приложение “подвисает”, а сеть вроде работает — проверь состояние TCP-соединений. Часто помогает ss.
Команда:
Покажет TCP-соединения в TIME-WAIT на 80/443 портах. Много? Возможно, приложение не успевает освобождать сокеты.
А если хочется увидеть, кто держит ESTABLISHED соединения:
Флаг -p покажет PID/имя процесса — удобно для отладки.
Ограничь количество TIME-WAIT через sysctl, если сервер под нагрузкой:
Когда использовать:
– Приложение “висит” при подключении;
– Подозрение на сетевое истощение ресурсов;
– Нужна быстрая отладка без лишнего софта.
Сохрани, пригодится в бою.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Когда приложение “подвисает”, а сеть вроде работает — проверь состояние TCP-соединений. Часто помогает ss.
Команда:
ss -o state time-wait '( sport = :http or sport = :https )'
Покажет TCP-соединения в TIME-WAIT на 80/443 портах. Много? Возможно, приложение не успевает освобождать сокеты.
А если хочется увидеть, кто держит ESTABLISHED соединения:
ss -tp state established
Флаг -p покажет PID/имя процесса — удобно для отладки.
Ограничь количество TIME-WAIT через sysctl, если сервер под нагрузкой:
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=15
Когда использовать:
– Приложение “висит” при подключении;
– Подозрение на сетевое истощение ресурсов;
– Нужна быстрая отладка без лишнего софта.
Сохрани, пригодится в бою.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍4
🔐 Fail2Ban для защиты SSH: настройка за 2 минуты
SSH — первая цель сканеров и брутфорсеров. Один fail2ban-джейл — и атаки больше не проблема.
🛠 Минимальная настройка fail2ban для SSH:
1. Установи fail2ban (если ещё нет):
2. Создай кастомную конфигурацию:
3. Включи и настрой SSH-защиту в
4. Перезапусти fail2ban:
5. Проверка работы:
👀 Что это даёт:
– Блокирует IP после нескольких неудачных попыток входа.
– Автоматическая защита от брутфорса 24/7.
– Простая интеграция с iptables/nftables.
💡 Трюк: Используй
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
SSH — первая цель сканеров и брутфорсеров. Один fail2ban-джейл — и атаки больше не проблема.
🛠 Минимальная настройка fail2ban для SSH:
1. Установи fail2ban (если ещё нет):
apt install fail2ban # Debian/Ubuntu
dnf install fail2ban # RHEL/AlmaLinux
2. Создай кастомную конфигурацию:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
3. Включи и настрой SSH-защиту в
jail.local
:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # или /var/log/secure на RHEL
maxretry = 5
bantime = 1h
findtime = 10m
4. Перезапусти fail2ban:
systemctl restart fail2ban
5. Проверка работы:
fail2ban-client status sshd
👀 Что это даёт:
– Блокирует IP после нескольких неудачных попыток входа.
– Автоматическая защита от брутфорса 24/7.
– Простая интеграция с iptables/nftables.
💡 Трюк: Используй
bantime = 3600m
и recidive
-джейл для агрессивных нарушителей.#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍7
Как быстро сбросить сетевой интерфейс без перезапуска системы
Иногда после правки конфигурации сети нужно *мягко* применить изменения без ребута. Особенно на продакшене.
🔧 Простейший способ — с помощью
Что делают эти команды:
-
-
-
Когда применять:
🔹 После ручной настройки IP через
🔹 После внесения изменений в
🔹 Для быстрой переинициализации интерфейса без влияния на другие службы.
⚡ Трюк: если используется DHCP-клиент (
(первое — release, второе — новый запрос)
Важно:
- Для виртуальных интерфейсов (vlan, bridge) могут быть дополнительные зависимости!
- После
Итог: Безопасный способ быстро перезагрузить сетевой стек локально.
Сохрани, пригодится! 🚀
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Иногда после правки конфигурации сети нужно *мягко* применить изменения без ребута. Особенно на продакшене.
🔧 Простейший способ — с помощью
ip
:
ip link set eth0 down
ip addr flush dev eth0
ip link set eth0 up
Что делают эти команды:
-
set down
— переводит интерфейс в неактивное состояние.-
flush
— очищает IP-адреса интерфейса.-
set up
— активирует интерфейс заново.Когда применять:
🔹 После ручной настройки IP через
ip/ifconfig
; 🔹 После внесения изменений в
/etc/network/interfaces
, Netplan, systemd-networkd и пр.; 🔹 Для быстрой переинициализации интерфейса без влияния на другие службы.
⚡ Трюк: если используется DHCP-клиент (
dhclient
), можно сразу запросить новый IP:
dhclient -r eth0 && dhclient eth0
(первое — release, второе — новый запрос)
Важно:
- Для виртуальных интерфейсов (vlan, bridge) могут быть дополнительные зависимости!
- После
flush
интерфейс теряет все адреса — убедись, что автоматика подтянет их обратно.Итог: Безопасный способ быстро перезагрузить сетевой стек локально.
Сохрани, пригодится! 🚀
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍3
🔧 Быстрая проверка MTU и поиск проблем с фрагментацией в сети
Иногда нестабильная работа приложений или странные задержки в соединении могут быть связаны с неправильным MTU. Как быстро проверить, где «режется» трафик?
Пошагово:
1. Узнайте текущую MTU на интерфейсе:
Ищите строку типа:
2. Проверьте прохождение пакетов с флагом "Don't Fragment":
(1472 + 28 байт заголовков = 1500 MTU)
3. Если получаете
Зачем это нужно:
MTU mismatch приводит к фрагментации, что убивает производительность VPN, TCP и может ронять нестабильные соединения.
Бонус:
Для автоматизации поиска оптимального MTU:
📌 Проверь свою сеть — иногда это решает кучу «магических» проблем!
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Иногда нестабильная работа приложений или странные задержки в соединении могут быть связаны с неправильным MTU. Как быстро проверить, где «режется» трафик?
Пошагово:
1. Узнайте текущую MTU на интерфейсе:
ip link show eth0
Ищите строку типа:
mtu 1500
.2. Проверьте прохождение пакетов с флагом "Don't Fragment":
ping -M do -s 1472 8.8.8.8
(1472 + 28 байт заголовков = 1500 MTU)
3. Если получаете
Frag needed and DF set
, уменьшайте -s
, пока не пройдут пакеты. Например:
ping -M do -s 1464 8.8.8.8
Зачем это нужно:
MTU mismatch приводит к фрагментации, что убивает производительность VPN, TCP и может ронять нестабильные соединения.
Бонус:
Для автоматизации поиска оптимального MTU:
for i in $(seq 1472 -1 1400); do ping -c1 -M do -s $i 8.8.8.8 >/dev/null && echo "MTU=$(($i+28)) OK" && break; done
📌 Проверь свою сеть — иногда это решает кучу «магических» проблем!
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍3
Хотите быстро проверить, через какой интерфейс и IP ваш Linux-сервер выйдет к определённому адресу, без реального подключения?
Решение:
Используйте
Что покажет:
- Какой IP-адрес будет использоваться для исходящего соединения;
- Какой сетевой интерфейс (
- Какой шлюз (
Пример вывода:
Пояснение:
- Полезно для диагностики проблем с маршрутизацией, VPN, балансировкой каналов.
- Проверка без реальной отправки пакетов: не создаёт нагрузку и не требует открытых портов.
Бонус:
Проверить маршрут сразу для нескольких целей:
Важно:
Если у вас настроены policy-based routing (PBR) или VRF, команда тоже отразит их влияние!
Сохрани, пригодится на проде. 🔥
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Решение:
Используйте
ip route get
— лёгкая команда для диагностики маршрутизации:
ip route get 8.8.8.8
Что покажет:
- Какой IP-адрес будет использоваться для исходящего соединения;
- Какой сетевой интерфейс (
dev eth0
и т.д.);- Какой шлюз (
via
) задействован.Пример вывода:
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 0
Пояснение:
- Полезно для диагностики проблем с маршрутизацией, VPN, балансировкой каналов.
- Проверка без реальной отправки пакетов: не создаёт нагрузку и не требует открытых портов.
Бонус:
Проверить маршрут сразу для нескольких целей:
for ip in 8.8.8.8 1.1.1.1; do ip route get $ip; done
Важно:
Если у вас настроены policy-based routing (PBR) или VRF, команда тоже отразит их влияние!
Сохрани, пригодится на проде. 🔥
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍6
🔥 Когда
Иногда вы запускаете
📌 tcpdump по умолчанию работает на уровне интерфейса, а не IP-стека. Он видит весь трафик — даже тот, что будет дропнут
🛠 Как посмотреть только то, что прошло фильтрацию iptables?
1. Создаём временный NFLOG-правилo:
2. Слушаем лог-группу с
3. Потом удалим правило:
📎 Что происходит?
Правило направляет пакеты, которые дошли до этой цепочки, в NFLOG. А
✅ Когда применять:
— Отладка проблем доступа
— Проверка, дропает ли iptables нужный трафик
— Точная диагностика без "шума"
⚠️ Не забудьте убрать правило после отладки, иначе лог будет засоряться.
Сохрани, пригодится. Особенно когда "всё открыто, но не работает" 😉
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
tcpdump
врёт: ловим только то, что проходит через iptablesИногда вы запускаете
tcpdump
, видите трафик — но приложение его не получает. Почему?📌 tcpdump по умолчанию работает на уровне интерфейса, а не IP-стека. Он видит весь трафик — даже тот, что будет дропнут
iptables
.🛠 Как посмотреть только то, что прошло фильтрацию iptables?
1. Создаём временный NFLOG-правилo:
iptables -I INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1
2. Слушаем лог-группу с
tcpdump
:
tcpdump -i nflog:1 -nn -vv
3. Потом удалим правило:
iptables -D INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1
📎 Что происходит?
Правило направляет пакеты, которые дошли до этой цепочки, в NFLOG. А
tcpdump
уже читает их после обработки iptables.✅ Когда применять:
— Отладка проблем доступа
— Проверка, дропает ли iptables нужный трафик
— Точная диагностика без "шума"
⚠️ Не забудьте убрать правило после отладки, иначе лог будет засоряться.
Сохрани, пригодится. Особенно когда "всё открыто, но не работает" 😉
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍7
🔧 Отключаем IPv6 правильно через sysctl — без костылей и багов
В некоторых окружениях (legacy-сети, специфичные firewall policy, старые софты) требуется полностью отключить IPv6. Многие делают это через GRUB (
📌 Надёжный способ — через sysctl:
🔥 Не забудь:
- Если у тебя кастомные интерфейсы (
- Также удали
📍 Когда применять:
– нет поддержки IPv6 на маршрутизаторах/файрволах;
– жёсткие требования к аудиту/безопасности;
– снижение attack surface.
⚠️ Важно:
Некоторые демоны (например, Postfix, systemd-resolved) могут логировать ошибки при отсутствии IPv6 — проверь логи!
Сохрани, пригодится. А ты полностью отключаешь IPv6?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
В некоторых окружениях (legacy-сети, специфичные firewall policy, старые софты) требуется полностью отключить IPv6. Многие делают это через GRUB (
ipv6.disable=1
), но это не всегда корректно: интерфейсы всё равно могут получать link-local адреса (fe80::/10
), что приводит к неожиданностям.📌 Надёжный способ — через sysctl:
cat << 'EOF' > /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sysctl --system
🔥 Не забудь:
- Если у тебя кастомные интерфейсы (
eth0
, ens33
, и т.д.) — проверь их через sysctl net.ipv6.conf.<iface>.disable_ipv6
. - Также удали
::1
из /etc/hosts
, если не нужен loopback IPv6.📍 Когда применять:
– нет поддержки IPv6 на маршрутизаторах/файрволах;
– жёсткие требования к аудиту/безопасности;
– снижение attack surface.
⚠️ Важно:
Некоторые демоны (например, Postfix, systemd-resolved) могут логировать ошибки при отсутствии IPv6 — проверь логи!
Сохрани, пригодится. А ты полностью отключаешь IPv6?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍5
💥 Как настроить systemd-networkd для статического IP и маршрутов
Если ты не используешь NetworkManager (например, на серверах), systemd-networkd — отличный выбор. Ниже — минимальная, но рабочая настройка для интерфейса с ручным IP и маршрутами.
📁 Шаг 1: настрой сеть
Создай файл:
💡 Можно добавить несколько [Route] секций, если нужно.
🔧 Шаг 2: включи systemd-networkd и отключи другие менеджеры
⚠️ Проверь, что
🔎 Шаг 3: проверь статус и интерфейс
🧠 Когда применять:
— на headless-серверах
— в минималистичных образах
— если хочешь контроль и простоту без NM
🔥 Трюк: systemd-networkd автоматически применяет маршруты из
Сохрани, пригодится!
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Если ты не используешь NetworkManager (например, на серверах), systemd-networkd — отличный выбор. Ниже — минимальная, но рабочая настройка для интерфейса с ручным IP и маршрутами.
📁 Шаг 1: настрой сеть
Создай файл:
/etc/systemd/network/10-static.network
[Match]
Name=ens33
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.254
💡 Можно добавить несколько [Route] секций, если нужно.
🔧 Шаг 2: включи systemd-networkd и отключи другие менеджеры
systemctl disable --now NetworkManager
systemctl enable --now systemd-networkd
systemctl enable --now systemd-resolved
⚠️ Проверь, что
/etc/resolv.conf
ссылается на ../run/systemd/resolve/stub-resolv.conf
🔎 Шаг 3: проверь статус и интерфейс
networkctl status ens33
ip a s ens33
ip r
🧠 Когда применять:
— на headless-серверах
— в минималистичных образах
— если хочешь контроль и простоту без NM
🔥 Трюк: systemd-networkd автоматически применяет маршруты из
[Route]
при поднятии интерфейса — без лишнего скриптинга.Сохрани, пригодится!
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍4
🧵 Диагностика странных зависаний сетевых соединений: "всё пингуется, но не работает"
💥 Бывает, что
🔍 Проверка: запусти ping с флагами "do not fragment" и максимальным размером пакета:
Если видишь
🧠 Пример:
* 1472 + 28 (заголовки IP+ICMP) = 1500 — стандартный MTU
* если пакет не проходит, а проходит только при
🔧 Решение — задай правильный MTU на интерфейсе (или wg):
Для WireGuard:
Или временно:
💡 Когда применять:
– нестабильный VPN
– apt/ssh/rsync "зависает"
– TCP-соединения обрываются при загрузке больших данных
– странное поведение в Docker/K8s с overlay-сетями
Проверка MTU — обязательный шаг в нетипичной сетевой отладке.
Сохрани, пригодится.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
💥 Бывает, что
ping
идёт, но ssh
, curl
или apt
зависают. Проблема может быть в MTU / фрагментации пакетов.🔍 Проверка: запусти ping с флагами "do not fragment" и максимальным размером пакета:
ping -M do -s 1472 <IP>
Если видишь
Frag needed and DF set
, MTU слишком большой. Уменьшай -s
, пока не дойдёт.🧠 Пример:
* 1472 + 28 (заголовки IP+ICMP) = 1500 — стандартный MTU
* если пакет не проходит, а проходит только при
-s 1392
, значит MTU на пути — 1420 (возможно, GRE/IPsec/WireGuard)🔧 Решение — задай правильный MTU на интерфейсе (или wg):
sudo ip link set dev eth0 mtu 1420
Для WireGuard:
[Interface]
MTU = 1420
Или временно:
sudo wg set wg0 mtu 1420
💡 Когда применять:
– нестабильный VPN
– apt/ssh/rsync "зависает"
– TCP-соединения обрываются при загрузке больших данных
– странное поведение в Docker/K8s с overlay-сетями
Проверка MTU — обязательный шаг в нетипичной сетевой отладке.
Сохрани, пригодится.
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍3❤1
🔥 Падает SSH при нестабильной сети?
Вот способ держать сессию живой с помощью
💡 Решение: настроим клиентский
📌 Что это даёт:
*
*
Это помогает удерживать SSH-сессию при кратковременных потерях связи (Wi-Fi, моб. сеть, нестабильный канал), особенно полезно при работе в tmux/screen.
⚠️ Важно: это клиентская настройка. Для серверной стороны смотри
🛠 Применяется как глобально, так и в
Сохрани, пригодится, если работаешь с нестабильными каналами 👨💻
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Вот способ держать сессию живой с помощью
ServerAliveInterval
.💡 Решение: настроим клиентский
ssh_config
echo "Host *
ServerAliveInterval 30
ServerAliveCountMax 4" | sudo tee -a /etc/ssh/ssh_config
📌 Что это даёт:
*
ServerAliveInterval 30
— каждые 30 сек отправляется keep-alive пакет.*
ServerAliveCountMax 4
— если 4 ответа подряд не получено, соединение рвётся.Это помогает удерживать SSH-сессию при кратковременных потерях связи (Wi-Fi, моб. сеть, нестабильный канал), особенно полезно при работе в tmux/screen.
⚠️ Важно: это клиентская настройка. Для серверной стороны смотри
ClientAliveInterval
.🛠 Применяется как глобально, так и в
~/.ssh/config
— удобно для отдельных хостов:
Host bastion
HostName 1.2.3.4
ServerAliveInterval 15
Сохрани, пригодится, если работаешь с нестабильными каналами 👨💻
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍3
🚨 iptables: как быстро сбросить соединения от IP-нарушителя
Когда в логи сыпется подозрительная активность от одного IP (DOS, скан, brute-force) — не всегда нужно ждать, пока сработает fail2ban. Можно сразу убить соединения и запретить новые.
🔧 Быстрые действия вручную:
📦 Убедитесь, что установлен пакет
🧠 Зачем и когда:
* моментально разрывает все TCP/UDP-сессии;
* эффективно при атаках с одного IP;
* можно автоматизировать в реакции на события (через fail2ban action, auditd или кастомный watchdog-скрипт).
⚠️ Не забудь внести в постоянные правила, если блок должен сохраниться после ребута (
Сохрани, чтобы не паниковать в следующий инцидент.
А ты conntrack применяешь?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
Когда в логи сыпется подозрительная активность от одного IP (DOS, скан, brute-force) — не всегда нужно ждать, пока сработает fail2ban. Можно сразу убить соединения и запретить новые.
🔧 Быстрые действия вручную:
# 1. Сбросить активные соединения от IP
conntrack -D -s 1.2.3.4
# 2. Заблокировать весь трафик от него (до перезапуска iptables)
iptables -I INPUT -s 1.2.3.4 -j DROP
📦 Убедитесь, что установлен пакет
conntrack
(обычно conntrack-tools
).🧠 Зачем и когда:
* моментально разрывает все TCP/UDP-сессии;
* эффективно при атаках с одного IP;
* можно автоматизировать в реакции на события (через fail2ban action, auditd или кастомный watchdog-скрипт).
⚠️ Не забудь внести в постоянные правила, если блок должен сохраниться после ребута (
iptables-save
/ nftables
/ firewalld
).Сохрани, чтобы не паниковать в следующий инцидент.
А ты conntrack применяешь?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍4❤3