Führen Sie mit systemd-networkd eine Aktion aus, wenn sich die Netzwerkkonfiguration ändert

10

Ich wechsle von Debian ifupdownzu systemd-networkdund es funktioniert meistens gut. Ein fehlendes Bit ist, dass ich bei jedem Netzwerkwechsel anrufen möchte killall -ARLM tinc, damit mein VPN rechtzeitig hochgefahren wird.

Bietet systemdoder systemd-networkdbietet solche Funktionalität? Wie würde ich es benutzen?

Joachim Breitner
quelle

Antworten:

3

Ich verwende networkd-dispatcher, um Ereignisse nach Änderungen des Schnittstellenstatus auszuführen:

Networkd-dispatcher ist ein Dispatcher-Daemon für Änderungen des Systemd-networkd-Verbindungsstatus. Dieser Daemon ähnelt dem NetworkManager-Dispatcher, ist jedoch in Bezug auf die von ihm unterstützten Ereignistypen aufgrund der eingeschränkten Natur von systemd-networkd wesentlich eingeschränkter.

Link zu Gitlab

gfa
quelle
Dies ist in Debian 10 (Buster) enthalten.
John Eikenberry
2

Tinc sollte als Systemeinheit aktualisiert werden, anstatt direkte Signale zu senden. Um dies zu erreichen braucht man , um ihre Unit - Dateien zu konfigurieren verkettet wird mit dem entsprechenden Require=, Before=und After=Linien im [Unit]Abschnitt. Stellen Sie außerdem sicher, dass Sie die richtigen WantedBy=Netzwerkdienste festlegen . (d. WantedBy={ network.target, network-online.target, network-pre.target} anstelle von multi-user.target)

Dies ermöglicht eine Ausführung systemctl restart systemd-networkd.service, um Ihr Netzwerk neu zu starten. Kombiniert mit systemd-resolvd, udev/ dbus(plus [email protected]wenn über WLAN) und das eigene Netzwerk funktioniert einfach.

Lesen Sie unbedingt die Artikel zum Umschalten auf systemd-networkd und Geräteabhängigkeiten . Dies ist auch eine Möglichkeit, Signale systemd.serviceüber den systemctl killBefehl an Ihre Einheiten zu senden, wie im Handbuch systemd for administartors dokumentiert

Dwight Spencer
quelle
Ich folge nicht wirklich. Wenn also tinc als systemd-Dienst ausgeführt wird, kann ich systemctl killdas Signal liefern. Ich sehe jedoch nicht, wie dies bei einer Änderung der Netzwerkkonfiguration ausgelöst werden kann.
Joachim Breitner
Sie würden nicht systemds Signalisierung nur der Ziele und Beziehungsabhängigkeiten verwenden. Sobald Ihre Netzwerkschnittstelle aktiv ist, signalisiert dies (intern zu systemd) die anderen Abhängigkeiten in der network.targetdann network-online.target, um diese Einheit zu starten. Also einfach tinc.serviceeinschließen Requires=systemd-networkd.serviceund WantedBy=network-online.targetdann, wenn systemd-networkd startet, die Schnittstelle nic and tun aufrufen, eine IP-Adresse einrichten und dann tinc signalisieren, nach Bedarf zu starten oder neu zu starten.
Dwight Spencer
Auch ich konnte keinen Weg finden, einen Neustart des Dienstes auszulösen, da network-online.target beim Trennen nicht aufhört (sollte tatsächlich einen Fehlerbericht dafür einreichen ...). Ich habe auf ein /etc/NetworkManager/dispatcher.d/ Skript zurückgegriffen, dascase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584
1
Ich finde es amüsant, dass Sie auf einen Artikel verlinkt haben, der von der Person geschrieben wurde , deren Frage Sie beantworten. :) Natürlich ist es hilfreich für spätere Leser dieser Antwort, aber es ist immer noch lustig.
Wildcard
1

Dies ist derzeit nicht möglich. Sie können systemd-networkd-wait-online.servicetinc jedoch nur als Abhängigkeit vom Start verwenden, um tinc neu zu konfigurieren. Nach meiner Erfahrung reagiert tinc schnell auf Änderungen in der Netzwerkkonfiguration. Zumindest unter Linux könnte es rtnetlink verwenden, um auf Änderungen an der Schnittstelle zu warten.

Mic92
quelle