Я переключаюсь с 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 для прослушивания изменений интерфейсов.