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

10

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

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

Иоахим Брейтнер
источник

Ответы:

3

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

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

Ссылка на Gitlab

GFA
источник
Это включено в 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-networkd и зависимости от устройства . Это также способ отправки сигналов на ваши systemd.serviceустройства с помощью systemctl killкоманды, как описано в руководстве systemd для администраторов.

Дуайт Спенсер
источник
Я действительно не следую. Так что если tinc запущен как сервис systemd, я могу использовать его systemctl killдля доставки сигнала. Но я не вижу, как вызвать это при изменении конфигурации сети.
Иоахим Брейтнер,
Вы не будете использовать системную сигнализацию только для целей и зависимостей отношений. Таким образом, когда ваш сетевой интерфейс подключен, это сигнализирует (внутренне системному) о других зависимостях, чтобы network.targetзатем network-online.targetзапустить этот модуль. так просто tinc.serviceвключать Requires=systemd-networkd.serviceи WantedBy=network-online.targetзатем , когда Systemd-networkd пинает , что поднимет Nic и тун интерфейс, установить 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 для прослушивания изменений интерфейсов.

Mic92
источник