Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Ключевая идея: при обновлении структуры данных не изменяется оригинал напрямую. Вместо этого создается копия, изменяется, а затем «публикуется» как новая версия. Старую версию продолжат читать те, кто начал до обновления. Когда все старые читатели завершат доступ, старая версия удаляется.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍3
Как раздавать делегированный IPv6-префикс по нескольким интерфейсам или VLAN’ам
Провайдер дал тебе, например, /56 через DHCPv6-PD. Это 256 подсетей по /64. А у тебя:
⏺ основной LAN (br0)
⏺ гостевая сеть (br1)
⏺ VPN-клиенты (wg0)
⏺ и maybe vlan10, vlan20…
Задача: разбить /56 на /64 и назначить каждой сети свою
Пример:
• Префикс от провайдера: 2001:db8:abcd::/56
• Тогда:
• br0 → 2001:db8:abcd:0001::/64
• br1 → 2001:db8:abcd:0002::/64
• wg0 → 2001:db8:abcd:0003::/64
• vlan10 → 2001:db8:abcd:0010::/64
Как назначить эти префиксы вручную
Теперь включаем RA (Router Advertisements)
Если используешь radvd — конфигурация будет выглядеть так:
Аналогично для vlanX, просто добавляешь ещё интерфейсы.
Альтернатива: автоматизация через dhcpv6 delegating-router (если systemd-networkd)
Можно использовать IPv6PrefixDelegation=yes, и тогда systemd сам может назначить /64 на каждый интерфейс, если ты пропишешь:
но это пока слабо документировано и не всегда стабильно, особенно если ты хочешь контроль, какая подсеть куда идёт. Поэтому ручное назначение /64 — надёжнее.
IPv6 Firewall
Не забудь базовую защиту:
Провайдер дал тебе, например, /56 через DHCPv6-PD. Это 256 подсетей по /64. А у тебя:
Задача: разбить /56 на /64 и назначить каждой сети свою
Пример:
• Префикс от провайдера: 2001:db8:abcd::/56
• Тогда:
• br0 → 2001:db8:abcd:0001::/64
• br1 → 2001:db8:abcd:0002::/64
• wg0 → 2001:db8:abcd:0003::/64
• vlan10 → 2001:db8:abcd:0010::/64
Как назначить эти префиксы вручную
# br0
ip -6 addr add 2001:db8:abcd:1::1/64 dev br0
# br1
ip -6 addr add 2001:db8:abcd:2::1/64 dev br1
# wg0
ip -6 addr add 2001:db8:abcd:3::1/64 dev wg0
Теперь включаем RA (Router Advertisements)
Если используешь radvd — конфигурация будет выглядеть так:
interface br0 {
AdvSendAdvert on;
prefix 2001:db8:abcd:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
interface br1 {
AdvSendAdvert on;
prefix 2001:db8:abcd:2::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
interface wg0 {
AdvSendAdvert on;
prefix 2001:db8:abcd:3::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
Аналогично для vlanX, просто добавляешь ещё интерфейсы.
Альтернатива: автоматизация через dhcpv6 delegating-router (если systemd-networkd)
Можно использовать IPv6PrefixDelegation=yes, и тогда systemd сам может назначить /64 на каждый интерфейс, если ты пропишешь:
[Network]
IPv6SendRA=yes
IPv6PrefixDelegation=yes
но это пока слабо документировано и не всегда стабильно, особенно если ты хочешь контроль, какая подсеть куда идёт. Поэтому ручное назначение /64 — надёжнее.
IPv6 Firewall
Не забудь базовую защиту:
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input iif lo accept
nft add rule inet filter input ip6 nexthdr icmpv6 accept
nft add rule inet filter input tcp dport 22 accept # SSH
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2👍1
Microsoft могла потерять до 400 млн пользователей Windows
За 3 года число активных устройств с Windows могло упасть с 1,4 до 1 млрд. Об этом пишет ZDNet, ссылаясь на слова топ-менеджера Microsoft Юсуфа Мехди.
По мнению аналитиков, если бы цифра осталась такой же, её бы не стали занижать в официальной статье.
Причины ухода:
• Скорое окончание поддержки Windows 10 (октябрь 2025),
• Переход на macOS, Linux,
• Отказ от ПК в пользу смартфонов и планшетов.
За 3 года число активных устройств с Windows могло упасть с 1,4 до 1 млрд. Об этом пишет ZDNet, ссылаясь на слова топ-менеджера Microsoft Юсуфа Мехди.
Он указал, что Windows используют «более 1 млрд устройств» — хотя ещё в 2022 году компания говорила о 1,4 млрд.
По мнению аналитиков, если бы цифра осталась такой же, её бы не стали занижать в официальной статье.
Причины ухода:
• Скорое окончание поддержки Windows 10 (октябрь 2025),
• Переход на macOS, Linux,
• Отказ от ПК в пользу смартфонов и планшетов.
❤11👍2💊2
Netplan vs NetworkManager vs ifupdown: кто рулит в 2025?
В Linux для настройки сети сегодня популярны три инструмента:
⏺ ifupdown — старый проверенный способ с конфигами в /etc/network/interfaces. Хорош для простых серверов, но не поддерживает современные фишки вроде Wi-Fi или сложных сетевых сценариев.
⏺ NetworkManager — идеален для десктопов и ноутбуков. Умеет управлять Wi-Fi, VPN, мобильными сетями, имеет GUI и CLI. На серверах бывает слишком “тяжёлым” и иногда конфликтует с другими инструментами.
⏺ Netplan — современный YAML-конфиг, который служит фронтендом для systemd-networkd (на серверах) или NetworkManager (на десктопах). Обеспечивает удобный и унифицированный подход к настройке сетей: VLAN, bonding, bridges, DHCPv6 и статические адреса.
Как выбрать?
• Для серверов сейчас рекомендуют Netplan + systemd-networkd — быстро, надёжно, удобно для автоматизации.
• Если нужно максимально простое решение — ifupdown всё ещё жив и работает.
• Для рабочих станций и ноутбуков — NetworkManager остаётся стандартом.
Если одновременно запускаются оба бэкенда, могут возникать конфликты, поэтому нужно контролировать активный менеджер сети.
Особенно это актуально при переходе между серверными и десктопными средами.
Такой подход обеспечивает гибкость и совместимость с разными типами оборудования и сценариями.
В Linux для настройки сети сегодня популярны три инструмента:
Как выбрать?
• Для серверов сейчас рекомендуют Netplan + systemd-networkd — быстро, надёжно, удобно для автоматизации.
• Если нужно максимально простое решение — ifupdown всё ещё жив и работает.
• Для рабочих станций и ноутбуков — NetworkManager остаётся стандартом.
Но важно помнить, что Netplan — это не самостоятельный сетевой менеджер, а инструмент генерации конфигураций для systemd-networkd или NetworkManager.
Если одновременно запускаются оба бэкенда, могут возникать конфликты, поэтому нужно контролировать активный менеджер сети.
Особенно это актуально при переходе между серверными и десктопными средами.
Такой подход обеспечивает гибкость и совместимость с разными типами оборудования и сценариями.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍2🔥1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Основные типы:
• CFQ (Completely Fair Queuing): Равномерное распределение ресурсов для процессов.
• Deadline: Обеспечивает выполнение операций в установленные сроки.
• Noop: Минимальные операции, подходит для систем с кэшированием.
Чтобы проверить текущий scheduler:
cat /sys/block/sda/queue/scheduler
Please open Telegram to view this post
VIEW IN TELEGRAM
👌11❤2
SSSD для интеграции Linux с Active Directory: настройка и тонкости
Интеграция Linux-серверов и рабочих станций в Active Directory (AD) — стандартная задача в смешанных инфраструктурах.
SSSD (System Security Services Daemon) — современный и гибкий способ обеспечить аутентификацию и получение информации из AD без установки громоздких клиентов вроде winbind.
Базовая схема настройки
1️⃣ Подключаем Linux к AD
Если есть realmd, достаточно:
Он автоматически настроит SSSD, Kerberos и разрешения.
Если без realmd — делаем вручную.
2️⃣ Настраиваем /etc/sssd/sssd.conf
Пример минимального конфига:
3️⃣ Права на файл конфигурации
4️⃣ Запускаем и добавляем в автозагрузку
5️⃣ Настраиваем PAM
Обновляем /etc/pam.d/common-auth и common-session для вызова pam_sss.so и автоматического создания домашней директории.
Пример для common-session:
Интеграция Linux-серверов и рабочих станций в Active Directory (AD) — стандартная задача в смешанных инфраструктурах.
SSSD (System Security Services Daemon) — современный и гибкий способ обеспечить аутентификацию и получение информации из AD без установки громоздких клиентов вроде winbind.
Базовая схема настройки
Если есть realmd, достаточно:
realm join example.com -U Administrator
Он автоматически настроит SSSD, Kerberos и разрешения.
Если без realmd — делаем вручную.
Пример минимального конфига:
[sssd]
domains = example.com
config_file_version = 2
services = nss, pam
[domain/example.com]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
ad_domain = example.com
krb5_realm = EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
fallback_homedir = /home/%u@%d
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
chmod 600 /etc/sssd/sssd.conf
systemctl enable --now sssd
Обновляем /etc/pam.d/common-auth и common-session для вызова pam_sss.so и автоматического создания домашней директории.
Пример для common-session:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤5👎1
Что делает команда chmod 755 script.sh?
Anonymous Quiz
2%
Открывает файл в редакторе
96%
Устанавливает права: владелец может всё, остальные — только читать и запускать
1%
Скрывает файл от всех
0%
Удаляет файл
🤣21❤4🔥3👍2
Слепое восстановление root-доступа: когда осталась только консоль или IPMI
Заблокировался root, слетел пароль, SSH не пускает, а у тебя только IPMI или прямой доступ к консоли?
Без паники — вот три проверенных сценария.
Способ 1: init=/bin/bash
Если можешь перезапустить сервер и попасть в GRUB:
1️⃣ На экране GRUB выбери нужное ядро и нажми e для редактирования.
2️⃣ Найди строку, начинающуюся с linux, и добавь в конец:
3️⃣ Нажми Ctrl + X или F10 — система загрузится в bash без пароля.
4️⃣ Подмонтируй root в rw:
5️⃣ Сбрось пароль:
6️⃣ Перезагрузи: exec /sbin/init или просто reboot -f
Способ 2: chroot из Live-ISO или rescue-системы
1️⃣ Подключи ISO через IPMI, загрузись в LiveCD.
2️⃣ Определи диск: lsblk, fdisk -l
3️⃣ Подмонтируй систему:
4️⃣ Сбрось пароль: passwd
5️⃣ Перезагрузи.
Способ 3: Rescue mode от хостера (если есть)
1️⃣ Активируй rescue в панели (Hetzner, OVH, etc.)
2️⃣ Подключись по SSH к rescue-системе.
3️⃣ Повтори chroot-метод выше.
Заблокировался root, слетел пароль, SSH не пускает, а у тебя только IPMI или прямой доступ к консоли?
Без паники — вот три проверенных сценария.
Способ 1: init=/bin/bash
Если можешь перезапустить сервер и попасть в GRUB:
init=/bin/bash
mount -o remount,rw /
passwd
Способ 2: chroot из Live-ISO или rescue-системы
mount /dev/sdaX /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
Способ 3: Rescue mode от хостера (если есть)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥6❤4
Samsung откладывает запуск завода чипов в Техасе
Samsung перенесла запуск полупроводникового завода в Техасе как минимум до 2026 года — из-за нехватки заказов на контрактное производство чипов.
Компания теряет позиции: из числа клиентов уже ушли Nvidia и Qualcomm.
⏺ Современные фабрики требуют миллиардных инвестиций и высокой загрузки мощностей, иначе производство становится нерентабельным.
Завод Samsung был спроектирован под 4-нм техпроцесс с FinFET, но к 2026 году рынок перейдёт на 2-нм технологии и GAA-транзисторы.
Samsung перенесла запуск полупроводникового завода в Техасе как минимум до 2026 года — из-за нехватки заказов на контрактное производство чипов.
Компания теряет позиции: из числа клиентов уже ушли Nvidia и Qualcomm.
Завод Samsung был спроектирован под 4-нм техпроцесс с FinFET, но к 2026 году рынок перейдёт на 2-нм технологии и GAA-транзисторы.
Дополнительное давление оказывает строительство флагманского комплекса TSMC в Аризоне стоимостью $100 млрд.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🥱2
Проблемы с файловыми системами
При использовании SSD для контейнерных решений важно правильно выбрать файловую систему:
• ext4: Подходит для общего использования, но не всегда эффективна при большом числе операций записи, характерных для контейнеров.
• XFS: Хорошо работает с большими файлами, но страдает при работе с мелкими.
• btrfs: Имеет интересные функции, такие как дедупликация и сжатие, но может тормозить при интенсивной записи.
Docker и тома
По умолчанию Docker использует overlay2 для управления слоями контейнеров.
Также SSD чувствительны к блокировкам метаданных, что еще больше снижает производительность.
Причины потери производительности
⏺ Журналирование: SSD быстрее работают, но если Docker не оптимизирован для этого, это может привести к потере производительности.
⏺ Малые файлы: Контейнеры часто работают с малым количеством данных, что вызывает дополнительные нагрузки на файловую систему.
1️⃣ Выбор файловой системы: Для SSD рекомендуется использовать XFS или btrfs, которые лучше справляются с мелкими файлами и высокой нагрузкой.
2️⃣ Оптимизация Docker: Отключите избыточное журналирование и используйте bind mount для томов.
3️⃣ Настройка SSD: Включите TRIM, чтобы SSD правильно освобождал место и поддерживал свою производительность.
4️⃣ Использование ZFS: Если производительность критична, ZFS будет более эффективен в контейнерных окружениях.
При использовании SSD для контейнерных решений важно правильно выбрать файловую систему:
• ext4: Подходит для общего использования, но не всегда эффективна при большом числе операций записи, характерных для контейнеров.
• XFS: Хорошо работает с большими файлами, но страдает при работе с мелкими.
• btrfs: Имеет интересные функции, такие как дедупликация и сжатие, но может тормозить при интенсивной записи.
Docker и тома
По умолчанию Docker использует overlay2 для управления слоями контейнеров.
Это может привести к дополнительным нагрузкам на SSD, так как каждый слой добавляется поверх предыдущего, увеличивая количество операций записи.
Также SSD чувствительны к блокировкам метаданных, что еще больше снижает производительность.
Причины потери производительности
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👎1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3👎1😱1
Контроль устройств через USBGuard
Как запретить флешки и другие USB-девайсы на уровне ядра
В некоторых инфраструктурах флешки — это не просто риск, а реальный вектор атак.
Как это работает:
USBGuard создаёт политику разрешённых USB-устройств по их VID/PID и serial number. Всё, что не разрешено — автоматически блокируется.
Быстрый старт:
По умолчанию все текущие устройства будут разрешены. После запуска новые — блокируются.
Пример строки правила:
Чтобы запретить всё, кроме нужного:
1️⃣ Генерируй политику.
2️⃣ Удали строки allow with-interface или allow via.
3️⃣ Переведи USBGuard в режим enforce.
Интеграция с systemd:
Как запретить флешки и другие USB-девайсы на уровне ядра
В некоторых инфраструктурах флешки — это не просто риск, а реальный вектор атак.
Чтобы контролировать, какие USB-устройства разрешены, используем USBGuard — мощный инструмент, встроенный в ядро Linux.
Как это работает:
USBGuard создаёт политику разрешённых USB-устройств по их VID/PID и serial number. Всё, что не разрешено — автоматически блокируется.
Быстрый старт:
sudo apt install usbguard
sudo usbguard generate-policy > /etc/usbguard/rules.conf
sudo systemctl enable --now usbguard
По умолчанию все текущие устройства будут разрешены. После запуска новые — блокируются.
Пример строки правила:
allow id 0781:5567 serial "4C530001181223103294" name "Cruzer Blade"
Чтобы запретить всё, кроме нужного:
Интеграция с systemd:
sudo systemctl status usbguard
sudo journalctl -u usbguard
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍2👎1
Скрытая перезагрузка Linux
Как понять, что сервер перезапускался, даже если uptime большой
Такое бывает после kexec, resume из сна, контейнерной миграции или даже обмана через sysctl. Разберёмся, как проверить, не было ли на самом деле рестарта.
1️⃣ Проверяем journalctl:
Логи systemd разбиты на сессии. Увидим границу между ними:
Если есть несколько загрузок (boot ID), был перезапуск. Даже если uptime говорит обратное.
2️⃣ Логи входов last и btmp:
Покажет перезагрузки ядра. Если пусто — подозрительно.
Проверка на сброс логов, частая практика для сокрытия следов.
3️⃣ dmesg и таймштампы ядра:
Таймштамп в первых строках должен совпадать с uptime. Если нет — возможно, kexec или resume.
4️⃣ Проверка монтирования /tmp или /run:
Как понять, что сервер перезапускался, даже если uptime большой
Иногда uptime внушительный, но сервисы «как будто» перезапускались.
Такое бывает после kexec, resume из сна, контейнерной миграции или даже обмана через sysctl. Разберёмся, как проверить, не было ли на самом деле рестарта.
Логи systemd разбиты на сессии. Увидим границу между ними:
journalctl --list-boots
Если есть несколько загрузок (boot ID), был перезапуск. Даже если uptime говорит обратное.
last reboot
Покажет перезагрузки ядра. Если пусто — подозрительно.
last -f /var/log/btmp
Проверка на сброс логов, частая практика для сокрытия следов.
dmesg | head
Таймштамп в первых строках должен совпадать с uptime. Если нет — возможно, kexec или resume.
mount | grep tmpfs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤7
Что произойдёт при вводе команды useradd newuser?
Anonymous Quiz
86%
Будет создан новый пользователь в системе
1%
Удалится текущий пользователь
13%
Запустится интерфейс настройки пользователей
0%
Произойдёт выход из системы
😁14🤷♂6❤2
Как не потерять доступ к серверу после правок сетевых настроек и systemd
Многие сисадмины хотя бы раз попадали в ситуацию: отредактировал netplan или systemd unit, перезагрузил сервер — и всё, SSH больше не отвечает.
Виртуалка висит где-то в облаке без сети, приходится лезть через консоль или IPMI. А ведь этого легко избежать.
Проверка systemd-юнитов
Systemd строго относится к синтаксису. Даже одна опечатка в .service может привести к тому, что нужный сервис не стартует.
Также полезна команда:
чтобы понять, что пошло не так при старте.
Применение сетевых настроек без перезагрузки
Редактируешь netplan? Не обязательно сразу делать netplan apply. Есть безопасный способ:
Система применит новые настройки, но через 120 секунд откатит, если ты не подтвердишь. Идеально, если боишься потерять подключение.
Если используешь systemd-networkd, можно без риска “переприменить” текущие настройки:
Это быстро и не трогает активные соединения. Работает с bridge, VLAN, bonding — как и Netplan.
Проверяем конфигурации до перезагрузки: systemd-analyze verify, netplan try, networkctl reconfigure
Многие сисадмины хотя бы раз попадали в ситуацию: отредактировал netplan или systemd unit, перезагрузил сервер — и всё, SSH больше не отвечает.
Виртуалка висит где-то в облаке без сети, приходится лезть через консоль или IPMI. А ведь этого легко избежать.
Проверка systemd-юнитов
Systemd строго относится к синтаксису. Даже одна опечатка в .service может привести к тому, что нужный сервис не стартует.
systemd-analyze verify /etc/systemd/system/your-service.service
Также полезна команда:
journalctl -xe -u your-service
чтобы понять, что пошло не так при старте.
Применение сетевых настроек без перезагрузки
Редактируешь netplan? Не обязательно сразу делать netplan apply. Есть безопасный способ:
sudo netplan try
Система применит новые настройки, но через 120 секунд откатит, если ты не подтвердишь. Идеально, если боишься потерять подключение.
Если используешь systemd-networkd, можно без риска “переприменить” текущие настройки:
sudo networkctl reconfigure
Это быстро и не трогает активные соединения. Работает с bridge, VLAN, bonding — как и Netplan.
❤13👍9
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Как с ним работать:
— Поведение можно контролировать с помощью параметра oom_score_adj. Чем выше значение (макс. 1000), тем выше вероятность, что процесс будет убит.
— Можно настроить cgroups и ограничить память для отдельных групп процессов, чтобы сбои не затрагивали всю систему.
— Желательно использовать swap-файл/раздел, чтобы отложить момент срабатывания OOM, но не полагаться на это как на основную защиту.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4👏2
Чистим /var/lib/docker без потерь
Папка /var/lib/docker со временем разрастается до страшных размеров. Там лежат:
• Контейнеры и их слепки
• Образы (в том числе устаревшие)
• Volumes (в т.ч. неиспользуемые, но привязанные к данным)
• Кеши слоев и сетевые оверлеи
Автоматическая очистка
Добавь --volumes, если хочешь подчистить жёстко.
Volumes без контейнеров:
Альтернатива: Docker GC
Можно использовать docker-gc, crontab или встроенные политики очистки (в Kubernetes — через ttlSecondsAfterFinished в Jobs).
Папка /var/lib/docker со временем разрастается до страшных размеров. Там лежат:
• Контейнеры и их слепки
• Образы (в том числе устаревшие)
• Volumes (в т.ч. неиспользуемые, но привязанные к данным)
• Кеши слоев и сетевые оверлеи
Автоматическая очистка
docker system prune -a
Добавь --volumes, если хочешь подчистить жёстко.
Диагностика
Проверь, что ест диск:
sudo du -sh /var/lib/docker/*
Показать образы, не привязанные к контейнерам:
docker images -f dangling=true
Список остановленных контейнеров:
docker ps -a --filter status=exited
Volumes без контейнеров:
docker volume ls -f dangling=true
Альтернатива: Docker GC
Можно использовать docker-gc, crontab или встроенные политики очистки (в Kubernetes — через ttlSecondsAfterFinished в Jobs).
👍12❤2🤩1
Что делает команда ls -l?
Anonymous Quiz
0%
Удаляет все файлы в папке
4%
Сортирует список по дате
95%
Показывает список файлов с подробностями: права, владелец, размер
1%
Запускает GUI для работы с файлами
🤣25👀3🤔2
Отслеживаем внезапные изменения сетевой конфигурации в Linux
Иногда вы теряете доступ по SSH, DNS резко меняется, а ip route не узнаётся. Причин может быть много: DHCP, VPN, скрипты, NetworkManager или зловред.
Разберём, как это отследить, логировать и сразу получать уведомление — даже в Telegram.
1️⃣ Слежение за изменениями IP, DNS и маршрутов
Создаём скрипт check_net.sh, который сравнивает текущие настройки с эталоном:
2️⃣ Настраиваем таймер systemd (альтернатива cron)
Файл netwatch.timer:
Файл netwatch.service:
Активируем:
3️⃣ Дополнительно: auditd и лог изменений конфигов
Иногда вы теряете доступ по SSH, DNS резко меняется, а ip route не узнаётся. Причин может быть много: DHCP, VPN, скрипты, NetworkManager или зловред.
Разберём, как это отследить, логировать и сразу получать уведомление — даже в Telegram.
Создаём скрипт check_net.sh, который сравнивает текущие настройки с эталоном:
#!/bin/bash
DIR="/var/lib/netwatch"
mkdir -p "$DIR"
NOW="$DIR/now"
PREV="$DIR/prev"
ip addr > "$NOW".ip
ip route > "$NOW".route
cat /etc/resolv.conf > "$NOW".dns
# Если первая итерация — копируем как эталон
[ ! -f "$PREV.ip" ] && cp "$NOW".ip "$PREV.ip"
[ ! -f "$PREV.route" ] && cp "$NOW".route "$PREV.route"
[ ! -f "$PREV.dns" ] && cp "$NOW".dns "$PREV.dns"
# Проверяем различия
DIFF=$(diff -u "$PREV.ip" "$NOW.ip"; diff -u "$PREV.route" "$NOW.route"; diff -u "$PREV.dns" "$NOW.dns")
if [ -n "$DIFF" ]; then
echo "$DIFF" | tee "$DIR/alert.log"
# Отправка в Telegram
TOKEN="your_bot_token"
CHAT_ID="your_chat_id"
MSG="⚠️ Изменение сети на $(hostname):%0A$(echo "$DIFF" | tail -n 20 | sed 's/$/%0A/' | sed 's/+/%2B/g')"
curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" --data-urlencode "chat_id=$CHAT_ID" --data-urlencode "text=$MSG"
# Обновляем эталон
cp "$NOW".ip "$PREV.ip"
cp "$NOW".route "$PREV.route"
cp "$NOW".dns "$PREV.dns"
fi
Файл netwatch.timer:
[Unit]
Description=Net config watcher timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
Файл netwatch.service:
[Unit]
Description=Net config watcher
[Service]
ExecStart=/usr/local/bin/check_net.sh
Активируем:
systemctl daemon-reexec
systemctl enable --now netwatch.timer
auditctl -w /etc/network/interfaces -p wa
auditctl -w /etc/netplan -p wa
auditctl -w /etc/resolv.conf -p wa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5❤3