З systemd-networkd виконайте дію при зміні конфігурації мережі


10

Я переходжу з Debian ifupdownна systemd-networkd, і це в основному добре працює. Одним з відсутніх бітів є те, що при кожній зміні мережі я хочу зателефонувати killall -ARLM tinc, щоб мій VPN вчасно працював.

Чи надає systemdта systemd-networkdнадає така функціональність? Як би я ним користувався?

Відповіді:


3

Я використовую networkd-dispatcherдля запуску подій після зміни статусу інтерфейсу:

Networkd-диспетчер - демон диспетчера для зміни статусу з’єднаних систем. Цей демон схожий на NetworkManager-диспетчер, але значно обмежений у типі подій, які він підтримує через обмежений характер systemd-networkd.

Посилання на Gitlab


Це включено в Debian 10 (Buster).
Джон Ейкенберрі

2

Tinc слід оновлювати як системний блок, а не надсилати прямі сигнали. Для досягнення цього потрібно , щоб налаштувати їх поодинокі файли , які будуть прикуті з відповідними Require=, Before=і After=рядків в [Unit]розділі. Також переконайтеся, що ви встановили правильність WantedBy=для мережевих служб. (Тобто. WantedBy={ network.target, network-online.target, network-pre.target} Замість multi-user.target)

Це дозволяє виконати systemctl restart systemd-networkd.serviceперезапуск вашої мережі. У поєднанні з цим systemd-resolvd, udev/ dbus(плюс , wpa_supplicant@nic.serviceколи на Wi - Fi) і своєї мережі просто працює.

Не забудьте прочитати статті про перехід на системні і мережеві залежності . Це також спосіб передавати сигнали вашим systemd.serviceпідрозділам за допомогою systemctl killкоманди, як це зафіксовано в системному посібнику для адміністратора


Я насправді не стежу. Отже, якщо tinc запускається як системна служба, я можу використовувати systemctl killдля передачі сигналу. Але я не бачу, як викликати це в зміні конфігурації мережі.
Йоахім Брейтнер

Ви б не використовували сигналізацію systemd лише про цілі та залежності залежності. Таким чином, як тільки ваш мережевий інтерфейс підсилює ці сигнали (внутрішньо для системних) інших залежностей, щоб network.targetпотім network-online.targetзапустити цей блок. тому просто tinc.serviceвключіть Requires=systemd-networkd.serviceі WantedBy=network-online.targetтоді, коли розпочнеться systemd-networkd, який підніме інтерфейс nic і tun, встановіть IP-адресу, а потім подайте сигнал на tinc, щоб запустити або перезапустити за потребою.
Дуайт Спенсер

Я теж не зміг знайти спосіб запустити перезапуск служби, оскільки network-online.target не зупиняється на відключенні (слід подати звіт про помилку для цього насправді ...). Я вдався до /etc/NetworkManager/dispatcher.d/ сценарію, який міститьcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584

1
Я знаходжу це забавним , що ви пов'язані з статтею , написаної від особи, питання , який ви відповідаєте. :) Звичайно, це корисно для наступних читачів цієї відповіді, але це все одно смішно.
Wildcard

1

Наразі це неможливо. Однак ви можете використовувати лише systemd-networkd-wait-online.serviceяк залежність від завантаження для переналаштування tinc. На мій досвід, tinc швидко реагує на зміни в конфігурації мережі. Принаймні, на Linux він міг використовувати rtnetlink для прослуховування змін інтерфейсів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.