С помощью systemd-networkd выполните действие при изменении конфигурации сети

С помощью systemd-networkd выполните действие при изменении конфигурации сети

Я переключаюсь с Debian ifupdownна systemd-networkd, и в основном все работает нормально. Не хватает только одного: при каждом изменении сети я хочу вызывать killall -ARLM tinc, чтобы мой VPN своевременно включался.

Предоставляет ли systemdили systemd-networkdтакую ​​функциональность? Как бы я ее использовал?

решение1

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

Networkd-dispatcher — это демон-диспетчер для изменений статуса соединения systemd-networkd. Этот демон похож на NetworkManager-dispatcher, но гораздо более ограничен в типах поддерживаемых событий из-за ограниченной природы systemd-networkd.

Ссылка кГитлаб

решение2

Tinc следует обновить как systemd unit вместо отправки прямых сигналов. Для этого нужно настроить файлы unit так, чтобы они были связаны с соответствующими строками 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(плюс [email protected]при использовании Wi-Fi) и ваша сеть просто заработает.

Обязательно прочтите статьи напереход на systemd-networkdизависимости единиц. Это также способ отправки сигналов вашим systemd.serviceподразделениям через systemctl killкоманду, как описано вsystemd для администраторов руководство

решение3

В настоящее время это невозможно. Однако вы можете использовать только systemd-networkd-wait-online.serviceкак зависимость от загрузки для перенастройки tinc. По моему опыту, tinc быстро отреагирует на изменения в конфигурации сети. По крайней мере, на linux он может использовать rtnetlink для прослушивания изменений интерфейсов.

Связанный контент