Avec systemd-networkd, effectuez une action lors du changement de configuration du réseau

10

Je passe de Debian ifupdownà systemd-networkd, et cela fonctionne généralement bien. Un bit manquant est qu'à chaque changement de réseau, je veux appeler killall -ARLM tinc, afin que mon VPN monte en temps opportun.

Fournit systemdou systemd-networkdfournit une telle fonctionnalité? Comment pourrais-je l'utiliser?

Joachim Breitner
la source

Réponses:

3

J'utilise networkd-dispatcherpour exécuter des événements après les changements d'état de l'interface:

Networkd-dispatcher est un démon répartiteur pour les changements d'état de connexion systemd-networkd. Ce démon est similaire à NetworkManager-dispatcher, mais est beaucoup plus limité dans les types d'événements qu'il prend en charge en raison de la nature limitée de systemd-networkd.

Lien vers Gitlab

gfa
la source
Ceci est inclus dans Debian 10 (Buster).
John Eikenberry
2

Tinc doit être mis à jour en tant qu'unité système au lieu d'envoyer des signaux directs. Pour y parvenir , on a besoin de configurer leurs fichiers unitaires être enchaînés avec les appropriés Require=, Before=et des After=lignes dans la [Unit]section. Assurez-vous également que vous définissez le bon WantedBy=pour les services réseau. (ie. WantedBy={ network.target, network-online.target, au network-pre.targetlieu de} multi-user.target)

Cela permet d'exécuter systemctl restart systemd-networkd.servicepour redémarrer votre réseau. Combiné cela avec systemd-resolvd, udev/ dbus(plus [email protected]lorsqu'il est sur wifi) et son réseau fonctionne.

Assurez-vous de lire les articles sur le passage à systemd-networkd et aux dépendances d'unité . C'est également un moyen d'envoyer des signaux à vos systemd.serviceunités via la systemctl killcommande comme indiqué dans le guide systemd pour les administrateurs

Dwight Spencer
la source
Je ne suis pas vraiment. Donc, si tinc est exécuté comme un service systemd, je peux l'utiliser systemctl killpour délivrer le signal. Mais je ne vois pas comment déclencher cela sur un changement de configuration réseau.
Joachim Breitner
Vous n'utiliseriez pas la signalisation de systemd uniquement les cibles et les dépendances relationnelles. Ainsi, une fois que votre interface réseau est en place, cela signale (en interne à systemd) les autres dépendances dans le network.targetpuis network-online.targetpour démarrer cette unité. il suffit donc d' tinc.serviceinclure Requires=systemd-networkd.service, WantedBy=network-online.targetpuis lorsque systemd-networkd démarre, cela fera apparaître l'interface nic et tun, établira une adresse IP, puis signalera à tinc de démarrer ou de redémarrer si nécessaire.
Dwight Spencer
Moi aussi, je n'ai pas pu trouver un moyen de déclencher un redémarrage du service, car network-online.target ne s'arrête pas lors de la déconnexion (devrait déposer un rapport de bogue pour cela en fait ...). J'ai eu recours à un script /etc/NetworkManager/dispatcher.d/ qui contientcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584
1
Je trouve amusant que vous ayez lié un article écrit par la personne à qui vous répondez. :) Bien sûr, cela est utile pour les lecteurs ultérieurs de cette réponse, mais c'est toujours drôle.
Wildcard
1

Ce n'est actuellement pas possible. Cependant, vous ne pouvez utiliser systemd-networkd-wait-online.servicequ'une dépendance au démarrage pour reconfigurer tinc. D'après mon expérience, tinc réagira rapidement aux changements dans la configuration du réseau. Au moins sur Linux, il pourrait utiliser rtnetlink pour écouter les changements d'interface.

Mic92
la source