NetworkAdmin.ru
4.73K subscribers
240 photos
32 videos
2 files
605 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
😭 Как один rsync положил прод

Иногда прод падает не из-за zero-day, не из-за DDoS и не из-за кривого кода. Иногда его кладет… обычный rsync.

🔖 Сценарий. Есть:

прод-сервер
staging
cron-задача синхронизации
и уверенность «я же сто раз так делал»

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


rsync -av --delete /data/ backup@storage:/prod-data/


Или еще лучше:


rsync -av --delete /data/ /mnt/nfs/prod/


Все работало годами. Пока однажды:

/data не примонтировался
NFS отвалился
переменная с путем оказалась пустой
кто-то перепутал source и destination

И rsync честно сделал то, что должен был сделать.


С --delete.


▪️ Почему это происходит. rsync - не "умная синхронизация". Он синхронизирует состояние директорий. Если source пустой - значит, и на destination должно быть пусто. Логика железная.

Особенно опасные кейсы:

▪️ Не примонтированный диск
/data - пустая локальная папка

rsync --delete удаляет все на целевом хранилище.

▪️ Пустая переменная


SRC=""
rsync -av --delete $SRC /backup/


Подставится / или текущая директория. И дальше - лотерея.

▪️ Перепутаны местами аргументы


rsync -av --delete backup:/data/ /data/


Удаляем прод, потому что backup оказался пустым.

▪️ Что происходит в этот момент

inode удаляются
файловая система занята
приложения падают
БД начинают ругаться
контейнеры теряют volume

А вы смотрите на логи и видите, как rsync методично чистит прод.

▪️ Как не повторить

1️⃣ Всегда делайте dry-run


rsync -av --delete --dry-run ...


Если видите тысячи deleting - остановитесь.

2️⃣ Проверяйте, что диск примонтирован (добавляйте это в скрипты)


mountpoint -q /data || exit 1


3️⃣ Используйте защитные опции


--max-delete=100


Если удалений больше - rsync аварийно завершится.

4️⃣ Делайте snapshot перед синхронизацией.
LVM, ZFS, btrfs - спасают карьеры.

5️⃣ Разделяйте роли.
Бэкап не должен иметь права удалять прод-данные.

#linux #rsync
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😱1
📎 TCP keepalive: почему соединения умирают и как это чинить

Знакомая ситуация: приложение держит постоянное TCP-соединение (к БД, API, брокеру), все работает… а потом внезапно «connection reset» или таймаут. Особенно часто это происходит через 5–30 минут простоя. Причина обычно не в приложении, а в сети.

🤩 Что происходит

Между клиентом и сервером почти всегда есть:

NAT
firewall
балансировщик
облачный LB

Эти устройства хранят таблицы состояний соединений. Если трафика нет - запись удаляется. Со стороны приложения соединение живое, но по факту его уже нет.

▪️ Где здесь TCP keepalive

TCP keepalive - это механизм, при котором стек TCP периодически отправляет служебные пакеты, чтобы подтвердить, что соединение ещё активно.

По умолчанию в Linux:


tcp_keepalive_time = 7200 (2 часа!)
tcp_keepalive_intvl = 75
tcp_keepalive_probes = 9


Для современных инфраструктур это слишком долго - NAT обычно живет 300–900 секунд.

▪️ Как чинить

1️⃣ Включить keepalive в приложении (многие драйверы БД и HTTP-клиенты это поддерживают).

2️⃣ Настроить параметры в системе:


sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=5


Теперь проверка пойдет через 5 минут простоя, а не через 2 часа.

3️⃣ Учитывать таймауты балансировщиков (например, в облаке они могут быть 350 секунд).

#linux #networking

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Просьба не завидовать 😎

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🔥3
💫 Быстрые откаты системы без LVM

Файловая система Btrfs умеет делать снапшоты - мгновенные снимки состояния файловой системы. Это позволяет быстро откатывать систему или данные назад без использования LVM, внешних бэкапов или сложных схем.

Снапшоты в Btrfs работают по принципу Copy-on-Write (CoW): данные не копируются сразу. Создается только метаданные-ссылка на текущие блоки. Реальное место начинает занимать только то, что изменяется после создания снимка.

▪️ Создание subvolume. Сначала создаем подтом (subvolume), если его еще нет:


btrfs subvolume create /data


▪️ Создание snapshot. Сделаем снимок текущего состояния:


btrfs subvolume snapshot /data /data_snapshot


Это занимает доли секунды независимо от размера данных.

Можно сделать snapshot только для чтения:


btrfs subvolume snapshot -r /data /snapshots/data_2026-04-20


▪️ Просмотр снапшотов


btrfs subvolume list /


▪️ Откат к предыдущему состоянию. Удаляем текущий subvolume:


btrfs subvolume delete /data


И возвращаем snapshot:


btrfs subvolume snapshot /snapshots/data_2026-04-20 /data


Система или сервис сразу получают прежнее состояние файлов.

⚠️ Важно помнить

снапшот не является полноценным Бэконом
повреждение диска уничтожит и данные, и снапшоты

для защиты данных используйте отдельные бэкапы (например restic или borg)

#linux #btrfs

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🤡1
👨‍💻 tcpdump: набор команд для быстрой диагностики сети

Инструмент незаменимый, возможностей у него огромное количество, но на практике чаще всего хватает небольшого набора команд. Ниже краткая шпаргалка из того, что реально используется в работе.

⚠️ Практически всегда добавляю ключ -nn, чтобы tcpdump не резолвил IP-адреса в домены и не подменял номера портов именами сервисов. В отладке это только мешает.

▪️ Список интерфейсов для захвата. Посмотреть, с каких интерфейсов можно слушать трафик:


tcpdump -D


Если запускать tcpdump без параметров, он будет слушать первый активный интерфейс из списка.

▪️ Захват трафика. Слушаем все интерфейсы:


tcpdump -nn -i any


Или конкретный:


tcpdump -nn -i eth0


▪️ Фильтрация по портам. Иногда один протокол полностью забивает вывод. Например, SSH. Его можно исключить:


tcpdump -nn -i any not port 22


Или наоборот смотреть только нужный порт:


tcpdump -nn -i any port 443


▪️ Фильтрация по IP. Трафик к определенному серверу:


tcpdump -nn dst 1.1.1.1


Несколько адресов:


tcpdump -nn dst 1.1.1.1 or dst 9.9.9.9


Комбинация адреса и порта:


tcpdump -nn dst 1.1.1.1 and port 443


Фильтры можно комбинировать через and / or / not.

▪️ Фильтрация по протоколу. Например, посмотреть ARP:


tcpdump -nn -i any arp


Или исключить его:


tcpdump -nn -i any not arp


▪️ Сохранение вывода. Если трафика много, удобнее писать его в файл:


tcpdump -nn -i any > ~/traffic.log


▪️ Пример из практики. Посмотреть HTTPS-трафик от конкретного клиента к серверу через VPN:


tcpdump -nn -i tun0 src 10.10.0.25 and dst 10.10.0.5 and port 443


Несмотря на пугающий вывод, tcpdump довольно простой инструмент.
Чаще всего достаточно увидеть строки вроде:


IP 10.0.0.12.53422 > 10.0.0.5.443


Где указаны источник, порт, получатель и порт назначения. Этого уже хватает, чтобы понять, что происходит в сети.

#network #tcpdump

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
❗️ cgroups v2: ограничение CPU/RAM для сервисов без Docker

Многие привыкли к тому, что лимиты CPU и памяти - это что-то из мира docker и k8s. Но на самом деле механизм один и тот же: cgroups. И если у вас обычный linux-сервер без контейнеров, вы все равно можете жестко ограничивать ресурсы для systemd-сервисов.

Это удобно, когда один процесс начинает съедать всю память, душить CPU или мешать остальным сервисам на хосте.

В современных дистрибутивах используется cgroups v2, а systemd умеет работать с ним из коробки.

▪️ Что можно ограничить:

Память. Чтобы сервис не выедал весь RAM и не отправлял сервер в OOM.
CPU. Чтобы процесс не занимал все ядра и не мешал соседям.
Число процессов. Чтобы защититься от fork-бомб и неконтролируемого роста дочерних процессов.

▪️ Пример: ограничим сервис по памяти и CPU.. Откроем override-конфиг:


systemctl edit myapp.service


Добавим:


[Service]
MemoryMax=500M
CPUQuota=50%
TasksMax=200


MemoryMax=500M - сервис не сможет использовать больше 500 МБ памяти
CPUQuota=50% - максимум половина одного CPU
TasksMax=200 - не более 200 процессов/потоков

После этого применяем изменения:


systemctl daemon-reload
systemctl restart myapp.service


Проверить лимиты можно так:


systemctl show myapp.service | grep -E "MemoryMax|CPUQuota|TasksMax"


Или посмотреть, в какой cgroup живет процесс:


systemctl status myapp.service


Если хотите ограничить уже запущенный сервис без ручного редактирования unit-файла, можно использовать runtime-свойства:


systemctl set-property myapp.service MemoryMax=300M CPUQuota=25%


Это удобно для быстрого придушивания прожорливого процесса на боевом сервере.

▪️ Еще полезные параметры:


[Service]
MemoryHigh=400M
MemoryMax=500M
CPUWeight=200
IOWeight=200


Тут разница такая:

MemoryHigh - мягкий порог, после которого ядро начинает сильнее давить процесс по памяти
MemoryMax - жесткий предел
CPUWeight - относительный приоритет по CPU среди других cgroup
IOWeight - относительный приоритет по дисковому I/O

⚠️ Важно помнить

CPUQuota=50% - это не половина всех ядер, а квота CPU-времени. На многоядерных системах поведение нужно понимать внимательно.

И еще: если сервис уже упирается в лимит памяти, он может начать падать, а не магически оптимизироваться. Лимиты защищают систему, но не исправляют плохое приложение.

#systemd #cgroups

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
👉 NTFS vs ReFS: что использовать на серверах Windows

Когда речь заходит о файловой системе на Windows Server, многие смотрят на ReFS как на новый NTFS. Но в реальной эксплуатации все не так просто.

NTFS - это универсальный и самый совместимый вариант.
ReFS - это специализированный инструмент под определенные сценарии, а не замена везде и для всего. Microsoft прямо позиционирует NTFS как файловую систему по умолчанию, а ReFS - как вариант для задач, где важны целостность данных, масштабирование и отдельные storage-оптимизации.

▪️ Что дает NTFS:

▪️максимальную совместимость с приложениями и ролями windows;
▪️привычные функции вроде ACL, квот, сжатия и EFS;
▪️нормальную жизнь для системных и загрузочных томов;
▪️меньше сюрпризов в проде, когда у вендора в требованиях написано просто: Windows Server;

▪️ Что дает ReFS:

▪️лучшую защиту от повреждения данных;
▪️integrity streams и проверку целостности;
▪️block cloning и другие оптимизации для крупных storage-нагрузок;
▪️хорошие сценарии в связке с Storage Spaces / S2D и Hyper-V-нагрузками ;

Но вот где начинается практика.

▪️ ReFS - не ставим везде вместо NTFS.

У него до сих пор не такая универсальная совместимость, как у NTFS. Для части сценариев microsoft сама рекомендует NTFS: например, SAN-тома в Failover Cluster обычно форматируют в NTFS, а для Azure File Sync серверный endpoint вообще поддерживается только на NTFS. Для S2D/Storage Spaces Direct, наоборот, ReFS - рекомендуемый вариант.

То есть выбор обычно выглядит так:

▪️Системный диск, обычный файловый сервер, универсальный сервер под все - NTFS
▪️Hyper-V, Storage Spaces Direct, большие data-volume, backup/storage-нагрузки - смотреть в сторону ReFS

▪️ Где NTFS лучше:

▪️системные и boot-разделы;
▪️серверы с максимальной совместимостью ПО;
▪️роли, где нужны квоты, сжатие, EFS и предсказуемое поведение;
▪️инфраструктура, где важнее “работает у всех”, чем storage-фишки;

▪️ Где ReFS уместен:

▪️Hyper-V-хосты;
▪️volumes под VHDX;
▪️Storage Spaces Direct;
▪️большие хранилища, где важна целостность и быстрые операции на уровне метаданных;

#windowsserver #refs

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84
This media is not supported in your browser
VIEW IN TELEGRAM
Вот такое упражнение раз в полгода делай и системный блок всегда чистый будет

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁163💩2
📱 K8s на практике

Теория без практики - не даст большого результата. Наткнулся на hands-on челлендж:

В кластере есть Pod, который не может нормально стартануть.
Он пытается подняться, но постоянно падает.
Причина: в спецификацию недавно добавили новый контейнер, и после этого init-последовательность стала некорректной.

Задачей является найти, что именно сломали, и починить, чтобы Pod снова запускался.

Внутри будет:

▪️init containers и порядок старта;
▪️логи Pod / events;
▪️kubectl describe / logs;
▪️диагностика CrashLoopBackOff и зависаний.

Ссылка 👈

#kubernetes #devops

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
📱 Что показывать на IP-адресе Nginx, чтобы не светить виртуальные хосты

Если обратиться к Nginx-серверу по IP-адресу, а не по доменному имени, то обычно откроется либо первый virtual host в конфиге, либо тот, где указан default_server в listen. Чаще всего показывать что-то реальное на таком запросе не хочется, поэтому на IP обычно вешают заглушку.

▪️ Для HTTP это решается просто:


server {
listen 80 default_server;
server_name _;
return 404;
}


С обычным HTTP все понятно.

▪️ С HTTPS начинается самое интересное.. Если клиент приходит на сервер по IP через HTTPS, Nginx все равно должен отдать какой-то сертификат. И если отдельный сертификат для такого случая не задан, будет использован сертификат одного из виртуальных хостов. То есть конфиг вроде такого:


server {
listen 443 ssl default_server;
server_name _;
return 404;
}


не решает проблему полностью.

Что увидит пользователь: сначала предупреждение браузера о том, что сертификат не соответствует адресу, а потом, если продолжить, в сертификате можно будет увидеть домен реального сайта

Получается, что даже заглушка на IP все равно может засветить боевой домен.

▪️ Один из старых и рабочих вариантов - использовать самоподписанный сертификат-пустышку.. Создаем его так:


openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/nginx/certs/nginx.key \
-out /etc/nginx/certs/nginx.crt


И подключаем в default server:


server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /etc/nginx/certs/nginx.crt;
ssl_certificate_key /etc/nginx/certs/nginx.key;
return 404;
}


Такой подход уже лучше: реальные домены не светятся, но браузер все равно покажет предупреждение о недоверенном сертификате.

Для многих этого достаточно. Я и сам долго делал именно так. Но есть более аккуратный вариант:


server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
ssl_reject_handshake on;
return 404;
}


Здесь ключевая директива - ssl_reject_handshake on.

Она позволяет сразу отклонять TLS-handshake, не отдавая пользователю чужой сертификат и не доводя дело до стандартного браузерного предупреждения о несовпадении имени.

Что это дает на практике:

запросы по IP на 443 сразу режутся;
сертификаты реальных виртуальных хостов не светятся;
пользователь сразу получает ошибку соединения, без лишних переходов и предупреждений.

В итоге это выглядит чище, чем схема с самоподписанным сертификатом-заглушкой.

ssl_reject_handshake on удобно использовать именно в default server для HTTPS-запросов, которые не должны попадать ни в один нормальный виртуальный хост. Если задача - не просто вернуть 404, а вообще не раскрывать ничего лишнего по IP, это один из самых аккуратных вариантов.

#nginx #webserver

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Те самые юзеры: «да я и сам соберу, там делов то»

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19👍2🤡1
📘 На платформе Mentorix вышел курс — «Nginx на практике: от деплоя до production»

Практический курс по настройке Nginx для реальных задач: от базовой конфигурации до использования в production.

В курсе:
• настройка и конфигурация Nginx
• работа как reverse proxy
• SSL и HTTPS
• балансировка нагрузки
• подготовка конфигурации для production

Начать можно сразу — вводная часть курса доступна без оплаты.

🎁 Промокод: NGINX_20
Скидка 20% — действует 48 часов

👉 Пройти курс
👾 Быстрый поиск пожирателей диска

Когда на сервере внезапно заканчивается место, первое желание - запустить что-нибудь вроде du -sh * и начать вручную искать, кто сожрал диск. Рабочий способ, но неудобный. Особенно если каталогов много, структура глубокая, а проблема уже горит.

В таких ситуациях выручает ncdu - консольная утилита для быстрого анализа использования диска. По сути это удобная оболочка над du, но с нормальной навигацией по каталогам в терминале.

▪️ Установка простая:


apt install ncdu


или


yum install ncdu


▪️ Запуск:


ncdu /


После сканирования увидите дерево каталогов, отсортированное по размеру. Дальше можно просто ходить стрелками по директориям и сразу смотреть, что именно занимает место.

Почему это удобно:

не нужно вручную гонять du по каждому уровню
сразу видно самые тяжелые каталоги
можно быстро проваливаться внутрь и искать источник проблемы
работает прямо в терминале, без GUI и лишних зависимостей


▪️ Типичный сценарий: сервер начал ругаться на нехватку места, заходите через SSH, запускаете:


ncdu /var


и почти сразу видите, кто виноват: разросшиеся логи, старые бэкапы, кэш пакетов, временные файлы или мусор в home-директориях.

▪️ Полезные варианты запуска:. анализ только нужного раздела:


ncdu /var


исключить файловые системы mount points (будет полезно, если не хотите случайно уйти в примонтированные тома и сетевые FS):


ncdu -x /


работать тише и быстрее на больших системах:


ncdu -q /data


Если запускать от root, картина будет полной, потому что утилита сможет читать все каталоги.

▪️ Еще один приятный момент: в ncdu можно не только смотреть размеры, но и сразу удалять ненужные файлы и каталоги из интерфейса. Но тут уже нужно быть очень аккуратным.

#ncdu #disk

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🔖 DNS caching servers: unbound vs bind vs systemd-resolved

Когда в инфраструктуре нужен локальный DNS-кэш, выбор обычно сводится к трем вариантам: Unbound, BIND и systemd-resolved. Все они умеют работать с DNS, но подходят под разные задачи.

▪️ Важно понять главное:

systemd-resolved - это в первую очередь локальный stub-resolver для хоста.
Unbound - легкий рекурсивный и кэширующий резолвер.
BIND - большой комбайн, который умеет и рекурсию, и authoritative DNS, и сложные серверные сценарии.

▪️ Что это значит на практике.

▪️Unbound -отличный вариант, когда нужен именно быстрый caching/recursive DNS server без лишней тяжести. Он изначально позиционируется как validating, recursive, caching resolver и хорошо подходит для локального DNS-кэша в офисе, на шлюзе, в домашней лаборатории или как отдельный резолвер для серверов.

▪️BIND - подходит, когда DNS в вашей инфраструктуре - это уже не просто кэш, а полноценный сервис с зонами, views, форвардингом, authoritative-частью, интеграциями и сложной логикой. Он мощный, гибкий, но за это платите более тяжелой конфигурацией и большим объемом настроек.

▪️systemd-resolved - удобен как локальный резолвер на самой машине. Он дает кэширование, stub-resolver на 127.0.0.53, умеет DNSSEC validation, а также работает с LLMNR и mDNS. Для ноутбука, обычного Linux-хоста или VM это часто уже достаточно хорошо. Но строить на нем центральный DNS-кэширующий сервер для всей сети - обычно не лучший выбор.

▪️ Как выбирать?

нужен DNS-кэш для сервера или небольшой сети - это Unbound
нужен DNS-комбайн с authoritative-зонами и сложной серверной логикой - это BIND
нужен просто нормальный локальный резолвер на Linux-хосте - это systemd-resolved

Поэтому перед выбором инструмента лучше честно ответить на вопрос: вам нужен локальный резолвер для одного хоста, кэширующий DNS для сети или полноценный DNS-сервер. И вот от этого уже выбирать: systemd-resolved, Unbound или BIND.

#dns #network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
✍️ iotop, dstat, pidstat: поиск узких мест по диску и CPU

Когда сервер начинает тормозить, первая ошибка - сразу лезть в логи и гадать, что что-то жрет ресурсы. Гораздо полезнее сначала быстро ответить на три вопроса: кто грузит CPU, кто долбит диск, и где именно начинается узкое место.

Для такой первичной диагностики очень хорошо работают три утилиты: iotop, dstat и pidstat. Они не заменяют полноценный мониторинг, но отлично помогают, когда нужно быстро понять, что происходит прямо сейчас.

▪️ iotop - показывает, кто активно читает и пишет на диск. Если сервер упирается в I/O, обычный top это не всегда покажет. Процесс может почти не грузить CPU, но при этом убивать систему постоянной записью или чтением.

Запуск:


iotop


Полезный вариант:


iotop -o


Ключ -o оставляет только процессы, у которых прямо сейчас есть дисковая активность.

▪️ dstat - дает общую картину по системе

dstat хорош тем, что показывает сразу несколько метрик в одном месте:

CPU
disk I/O
network
memory
swap
interrupts


Пример запуска:


dstat


Более полезный вариант:


dstat -cdngym


Что здесь видно:

загрузка CPU
чтение/запись на диск
сетевой трафик
использование памяти
swap
активность файловой системы

▪️ pidstat - показывает статистику по конкретным процессам. Если top и iotop уже намекнули на виновника, pidstat помогает посмотреть детальнее.

Например, по CPU:


pidstat 1


По дисковой активности:


pidstat -d 1


По памяти:


pidstat -r 1


По отдельному процессу:


pidstat -p 1234 1


Где 1234 - это PID нужного процесса.

pidstat особенно полезен, когда нужно смотреть динамику: не просто кто сейчас наверху, а как процесс ведет себя во времени.

▪️ Как использовать это на практике:

1. Сначала смотрим общую картину


dstat -cdngym


Понимаем, куда система упирается: CPU, диск, память или сеть.

2. Если подозрение на диск


iotop -o


Сразу ищем, кто генерирует I/O.

3. Если нужен разбор по процессам


pidstat -d 1
pidstat 1


Смотрим поведение процессов в динамике.

Такой набор часто дает ответ быстрее, чем долгие догадки и хаотичный запуск всего подряд.

#linux #sysadmin

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🖥 gping и fping

Стандартный ping - полезный инструмент, но в реальной админской жизни его часто не хватает. Иногда хочется быстро увидеть задержку на графике, а иногда - массово проверить десятки или сотни адресов без лишней возни с выводом.

Для этого есть как минимум две полезные утилиты: gping и fping. Они не заменяют классический ping, а скорее дополняют его под разные задачи.

1️⃣ gping - ping с графиком задержки. Она умеет не просто пинговать хост, а показывать время отклика в виде графика. Причем можно проверять сразу несколько адресов одновременно.

Установка:


apt install gping


Пример запуска:


gping 1.1.1.1 8.8.8.8 8.8.4.4


На выходе получаете наглядное сравнение задержек между несколькими хостами. Например, сразу видно, какой DNS отвечает быстрее и насколько стабилен отклик во времени.

Практической пользы для серверной рутины тут не всегда много, но для личного терминала, быстрой проверки канала или просто наглядной диагностики - вещь приятная.

gping скорее из категории удобных и визуально понятных инструментов, чем must-have на каждом сервере.

2️⃣ fping - массовая проверка узлов без лишнего шума. А вот fping - уже куда более прикладная история. Это старая и проверенная утилита, которая отлично подходит для быстрого пинга списков хостов, диапазонов адресов и целых подсетей. Именно за это ее любят в мониторинге и автоматизации.

Установка:


apt install fping


Например, быстро найти активные узлы в сети можно так:


fping -g 192.168.13.0/24 -qa


На выходе получите только адреса тех хостов, которые ответили:


192.168.13.1
192.168.13.2
192.168.13.17
192.168.13.50
192.168.13.186


Очень удобно, потому что формат вывода уже готов для скриптов: одна строка - один IP.

Можно проверять и диапазон явно:


fping -s -g 192.168.13.1 192.168.13.50 -qa


Если нужен обычный пинг одного хоста:


fping 10.20.1.2


Результат будет простой и понятный:


10.20.1.2 is alive


Еще один полезный сценарий - использовать fping в скриптах через код возврата. Например:


fping 10.20.1.2 -q
echo $?


Если хост доступен, получите: 0

Если нет:


fping 10.20.1.3 -q
echo $?


Результат: 1

Это удобно, потому что не нужно парсить лишний текст, обрезать вывод или городить grep.
Команда либо успешна, либо нет и этого уже достаточно для автоматизации.

Обе утилиты полезны, но в разных сценариях.

gping - больше про удобство и визуализацию.
fping - про практичность, автоматизацию и реальные админские задачи.

#ping #network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
9🫡1
📘 На платформе Mentorix вышел курс — «DevOps-инженер: от основ до продакшена»

Если вы хотите не просто изучить инструменты, а понять, как собирается реальная DevOps-инфраструктура — этот курс даёт полный системный подход.

🔧 Что внутри:
• Linux, администрирование и bash
• Docker и Kubernetes (реальная оркестрация)
• Terraform и Ansible (Infrastructure as Code)
• CI/CD: GitLab CI, GitHub Actions, Jenkins
• мониторинг и логирование: Prometheus, Grafana, ELK
• безопасность, сети, балансировка нагрузки
• облака (AWS/GCP/Azure)

📊 Формат:
— 82 урока и 784 шага
— 320 теорий, 325 тестов, 139 задач практических задач
— практика в каждом блоке

💡 Важно:
вы не просто изучаете инструменты — вы собираете end-to-end инфраструктуру, которую можно положить в портфолио и показывать на собеседованиях.

💰 скидка 40%, действует 24 часа

👉 Пройти курс
2👍1
📱 Bash как DSL: пишем читаемые админские скрипты

Многие админские bash-скрипты со временем превращаются в свалку из if, grep, awk, sed и случайных команд, склеенных по принципу: работает - не трогай. Проблема в том, что через месяц такой скрипт уже тяжело читать. Через полгода - страшно менять. А если его откроет другой админ, он вообще решит, что это археология, а не автоматизация.

Один из рабочих подходов - писать bash не как набор команд, а как маленький DSL: domain-specific language, то есть мини-язык под свою задачу.

Идея простая: вместо простыни команд вы собираете скрипт из понятных функций с говорящими именами.

Например, не так:


useradd -m -s /bin/bash "$name"
mkdir -p "/home/$name/.ssh"
cp ./authorized_keys "/home/$name/.ssh/authorized_keys"
chown -R "$name:$name" "/home/$name/.ssh"
chmod 700 "/home/$name/.ssh"
chmod 600 "/home/$name/.ssh/authorized_keys"


А так:


create_user "$name"
install_ssh_keys "$name"
harden_ssh_dir "$name"


Внутри этих функций может быть что угодно, но снаружи скрипт начинает читаться как сценарий действий, а не как трассировка мыслей уставшего админа.

Например:


create_user() {
useradd -m -s /bin/bash "$1"
}

install_ssh_keys() {
local user="$1"
mkdir -p "/home/$user/.ssh"
cp ./authorized_keys "/home/$user/.ssh/authorized_keys"
chown -R "$user:$user" "/home/$user/.ssh"
}

harden_ssh_dir() {
local user="$1"
chmod 700 "/home/$user/.ssh"
chmod 600 "/home/$user/.ssh/authorized_keys"
}


Теперь верхний уровень скрипта выглядит уже не как набор случайных действий, а как понятный workflow:


create_user "$name"
install_ssh_keys "$name"
harden_ssh_dir "$name"


👍 Что это дает на практике:

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

Еще один полезный прием - делать функции в стиле команд:


require_root
check_dependencies
backup_config "/etc/nginx/nginx.conf"
deploy_new_config "./nginx.conf" "/etc/nginx/nginx.conf"
test_nginx_config
reload_nginx


Такой bash уже напоминает не набор shell-команд, а язык операций для конкретной задачи.

Пример плохого Bash-скрипта:


cp "$src" "$dst" &&
nginx -t &&
systemctl reload nginx ||
echo "something failed"


Пример более читаемого подхода:


deploy_config "$src" "$dst"
validate_nginx
reload_service nginx


Да, bash не станет от этого python. Но даже в shell можно писать так, чтобы скрипт был похож на понятную инструкцию, а не на клубок из условий, пайпов и боли.

#bash #scripting

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9💩2
Делая ремонт, не забудьте в инсталляцию добавить самое нужное

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11
🦖 ECMP: балансировка трафика на уровне маршрутизации

Когда говорят о балансировке, то чаще вспоминают L4/L7-балансировщики. Но распределять трафик можно и ниже - прямо на уровне маршрутизации. Для этого существует ECMP - Equal-Cost Multi-Path.

Суть простая: если до одной и той же сети есть несколько маршрутов с одинаковой метрикой, роутер может использовать их параллельно, а не держать один основным, а остальные про запас.

Что это дает:

распределение нагрузки между несколькими линками;
лучшее использование полосы;
отказоустойчивость - при падении одного пути трафик уходит в оставшиеся.

Важный момент: ECMP обычно балансирует не каждый пакет как попало, а по хэшу потока. Например, учитываются source IP, destination IP, порты, протокол и весь конкретный flow идет по одному пути.

Это нужно, чтобы не получить reordering пакетов и не сломать TCP-сессии.

То есть два клиента могут уйти разными маршрутами, но один и тот же TCP-flow обычно будет идти стабильно по одному next-hop.

🤩 Где часто ошибаются:

▪️ думают, что ECMP всегда делит трафик идеально 50/50. На деле распределение зависит от числа flow и алгоритма хэширования.

▪️ путают ECMP с failover. ECMP - это не только резервирование, а именно одновременное использование нескольких равных путей.

▪️ забывают про asymmetry. В одну сторону трафик может пойти одним путем, в другую - другим. Для stateful-устройств это иногда становится проблемой.

ECMP хорошо работает там, где сеть и маршрутизация изначально под это спроектированы. Если просто включить ради баланса, можно получить странное распределение, проблемы с firewall state tracking и сложную диагностику.

#network #routing

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
⭐️ QoS в Linux

Как только в linux заходит разговор про QoS, shaping и управление трафиком, у многих сразу одна реакция: tc - это боль, страдание и странные команды из 2009 года. И это недалеко от правды. Утилита мощная, но синтаксис у нее такой, будто она не хочет, чтобы ей пользовались. При этом tc - это стандартный инструмент linux для управления очередями, задержками, полосой и приоритетами трафика.

Что с его помощью обычно делают:

ограничивают скорость;
дают приоритет важному трафику;
режут шумные сервисы;
эмулируют плохую сеть: delay, loss, jitter;
наводят порядок на WAN-линках и VPN.


Самое главное, что нужно понять:

QoS в linux почти всегда про исходящий трафик (egress). Входящий поток контролировать сложнее, обычно его либо полируют через IFB, либо ограничивают уже на стороне отправителя.

▪️ Самый простой пример - ограничить скорость интерфейса до 50 Мбит/с:


tc qdisc add dev eth0 root tbf rate 50mbit burst 32kbit latency 400ms


tbf - Token Bucket Filter
rate - лимит скорости
burst - допустимый всплеск
latency - максимальная задержка очереди

▪️ Удалить правило:


tc qdisc del dev eth0 root


Если нужен вариант без магии, для большинства случаев, чаще смотрят в сторону fq_codel или cake. Например:


tc qdisc add dev eth0 root fq_codel


fq_codel хорош тем, что помогает бороться с bufferbloat и в целом делает очередь более адекватной без сложной ручной настройки.

▪️ Если нужно не просто сделать лучше, а именно ограничить канал и при этом сохранить нормальную отзывчивость, часто используют cake:


tc qdisc add dev eth0 root cake bandwidth 100mbit


Почему tc кажется страшным:

qdisc
class
filter
parent
handle
flowid


На первый взгляд это выглядит как отдельная религия. Но на практике часто хватает 3 сценариев:

ограничить скорость
сделать очередь адекватной
эмулировать плохую сеть для тестов

Например, добавить задержку в 100 мс:


tc qdisc add dev eth0 root netem delay 100ms


Или сделать "плохую" сеть с потерями:


tc qdisc add dev eth0 root netem delay 100ms loss 2%


Это уже очень полезно для тестирования приложений, API, VoIP, VPN и всего, что в локалке работает идеально, а в реальной сети нет.

#tc #network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72