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?

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


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 wpa_supplicant@nic.servicewenn ü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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.