Zum Inhalt springen

Systemd/networkd-dispatcher: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
[[Systemd/networkd-dispatcher|networkd-dispatcher]] ist Teil von [[Systemd]]
; [[Systemd/networkd-dispatcher|networkd-dispatcher]] ist Teil von [[Systemd]]
* Während man bei systemd-networkd die Konfiguration der Netzwerkschnittstellen ausschließlich über Deklarationen vornimmt, erlaubt networkd-dispatcher auf Zustandsänderungen bei den Netzwerkschnittstellen zu reagieren und Programme zu starten.
Während man bei systemd-networkd die Konfiguration der Netzwerkschnittstellen ausschließlich über Deklarationen vornimmt, erlaubt networkd-dispatcher auf Zustandsänderungen bei den Netzwerkschnittstellen zu reagieren und Programme zu starten.


Damit ist networkd-dispatcher für systemd-networkd das Pendant zu [https://wiki.ubuntuusers.de/NetworkManager/Dispatcher/ nm-dispatcher] für [https://wiki.ubuntuusers.de/NetworkManager/ NetworkManager] und den Skripten in '''/etc/network/if-*.d/''' für [https://wiki.ubuntuusers.de/interfaces/ ifupdown].
Damit ist networkd-dispatcher für systemd-networkd das Pendant zu [https://wiki.ubuntuusers.de/NetworkManager/Dispatcher/ nm-dispatcher] für [https://wiki.ubuntuusers.de/NetworkManager/ NetworkManager] und den Skripten in '''/etc/network/if-*.d/''' für [https://wiki.ubuntuusers.de/interfaces/ ifupdown].


== Arbeitsweise ==
== Arbeitsweise ==
Die beiden [https://wiki.ubuntuusers.de/systemd/Units/ systemd-Units] '''systemd-networkd.service''' und '''networkd-dispatcher.service''' müssen aktiv sein. Kontrolle[https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/#source-2 [2]]:
Die beiden [https://wiki.ubuntuusers.de/systemd/Units/ systemd-Units] '''systemd-networkd.service''' und '''networkd-dispatcher.service''' müssen aktiv sein
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
systemctl status systemd-networkd.service
systemctl status systemd-networkd.service
systemctl status networkd-dispatcher.service  
systemctl status networkd-dispatcher.service  
</syntaxhighlight>


Sobald systemd-networkd bei einer Schnittstelle einen Zustandswechsel erkennt, startet es networkd-dispatcher und dieser startet die Programme in dem Verzeichnis, welches zu dem neuen Zustand der Schnittstelle gehört. Dies funktioniert auch, wenn systemd-networkd die Schnittstelle nicht selber konfiguriert hat.
Sobald systemd-networkd bei einer Schnittstelle einen Zustandswechsel erkennt, startet es networkd-dispatcher und dieser startet die Programme in dem Verzeichnis, welches zu dem neuen Zustand der Schnittstelle gehört. Dies funktioniert auch, wenn systemd-networkd die Schnittstelle nicht selber konfiguriert hat.
Zeile 30: Zeile 30:
Es werden diese Unterverzeichnisse berücksichtigt
Es werden diese Unterverzeichnisse berücksichtigt
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
ls /etc/networkd-dispatcher/
carrier.d  degraded.d  dormant.d  no-carrier.d  off.d  routable.d
</syntaxhighlight>
</syntaxhighlight>
ls /etc/networkd-dispatcher/
carrier.d  degraded.d  dormant.d  no-carrier.d  off.d  routable.d


Der Name des Unterverzeichnisses entspricht dem neuen Zustand der Schnittstelle
Der Name des Unterverzeichnisses entspricht dem neuen Zustand der Schnittstelle


{| style="border-spacing:0;width:17cm;"
{| style="border-spacing:0;width:17cm;"
Zeile 63: Zeile 62:
|-
|-
|}
|}
Die Konfigurationsverzeichnisse müssen <tt>root</tt> gehören und niemand außer <tt>root</tt> darf in diese Ordner schreiben können.
Die Konfigurationsverzeichnisse müssen <tt>root</tt> gehören und niemand außer <tt>root</tt> darf in diese Ordner schreiben können.


== Details zu den Skripten ==
== Details zu den Skripten ==
Als Programm kann man beispielsweise eine ausführbare Textdatei mit einem Shell-Skript in das passende Verzeichnis legen, und dies ist auch als Regelfall so vorgesehen. Die Datei muss <tt>root</tt> gehören und niemand außer <tt>root</tt> darf sie beschreiben dürfen.
Als Programm kann man beispielsweise eine ausführbare Textdatei mit einem Shell-Skript in das passende Verzeichnis legen, und dies ist auch als Regelfall so vorgesehen. Die Datei muss <tt>root</tt> gehören und niemand außer <tt>root</tt> darf sie beschreiben dürfen.


Zeile 79: Zeile 78:
* Die Variablen <tt>OperationalState</tt> und <tt>AdministrativeState</tt> entsprechen wohl (d.h. nach bisherigen Erfahrungen) den Ausgaben von [https://wiki.ubuntuusers.de/systemd/networkd/#Dienstprogramm-networkctl networkctl].
* Die Variablen <tt>OperationalState</tt> und <tt>AdministrativeState</tt> entsprechen wohl (d.h. nach bisherigen Erfahrungen) den Ausgaben von [https://wiki.ubuntuusers.de/systemd/networkd/#Dienstprogramm-networkctl networkctl].
* Die Variable <tt>STATE</tt> entspricht wohl dem Verzeichnis bzw. dem neuen Zustand der Schnittstelle.
* Die Variable <tt>STATE</tt> entspricht wohl dem Verzeichnis bzw. dem neuen Zustand der Schnittstelle.
== Anwendung ==
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>


=== Logger ===
=== Logger ===
Man kann dieses Skript als '''/etc/networkd-dispatcher/routable.d/00-logger''' ablegen, ausführbar machen und in den anderen Unterverzeichnissen von '''/etc/networkd-dispatcher/''' jeweils darauf verlinken:  
Man kann dieses Skript als '''/etc/networkd-dispatcher/routable.d/00-logger''' ablegen, ausführbar machen und in den anderen Unterverzeichnissen von '''/etc/networkd-dispatcher/''' jeweils darauf verlinken:  
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
#! /bin/bash -e
#! /bin/bash -e
LOG ()  { echo ${*:- } ;} >&2
LOG ()  { echo ${*:- } ;} >&2
LOG IFACE=$IFACE $OperationalState
LOG IFACE=$IFACE $OperationalState
</syntaxhighlight>


Man erhält im Systemlog Meldungen, wann immer sich der Zustand einer Schnittstelle ändert. Das kann bei der Fehlerdiagnose helfen:
Man erhält im Systemlog Meldungen, wann immer sich der Zustand einer Schnittstelle ändert. Das kann bei der Fehlerdiagnose helfen:
journalctl -b -u networkd-dispatcher.service  
<syntaxhighlight lang="bash" highlight="1" line copy>
journalctl -b -u networkd-dispatcher.service  
</syntaxhighlight>


Beispeilausgabe  
Beispeilausgabe  
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
Mai 04 10:01:29 networkd-dispatcher[95390]: IFACE=eth0 routable
Mai 04 10:01:29 networkd-dispatcher[95390]: IFACE=eth0 routable
Mai 04 10:04:37 networkd-dispatcher[95577]: IFACE=eth0 off
Mai 04 10:04:37 networkd-dispatcher[95577]: IFACE=eth0 off
Mai 04 10:04:38 networkd-dispatcher[95580]: IFACE=WLAN routable
Mai 04 10:04:38 networkd-dispatcher[95580]: IFACE=WLAN routable
</syntaxhighlight>


== Konfiguration ==
== Konfiguration ==
Zeile 139: Zeile 136:
# [https://wiki.ubuntuusers.de/systemd/Units/ systemd/Units]
# [https://wiki.ubuntuusers.de/systemd/Units/ systemd/Units]
# [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher]
# [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher]
[[Kategorie:Systemd]]


</noinclude>
</noinclude>
[[Kategorie:Systemd]]

Version vom 31. Januar 2026, 17:50 Uhr

Systemd/networkd-dispatcher

Beschreibung

networkd-dispatcher ist Teil von Systemd

Während man bei systemd-networkd die Konfiguration der Netzwerkschnittstellen ausschließlich über Deklarationen vornimmt, erlaubt networkd-dispatcher auf Zustandsänderungen bei den Netzwerkschnittstellen zu reagieren und Programme zu starten.

Damit ist networkd-dispatcher für systemd-networkd das Pendant zu nm-dispatcher für NetworkManager und den Skripten in /etc/network/if-*.d/ für ifupdown.

Arbeitsweise

Die beiden systemd-Units systemd-networkd.service und networkd-dispatcher.service müssen aktiv sein

systemctl status systemd-networkd.service
systemctl status networkd-dispatcher.service

Sobald systemd-networkd bei einer Schnittstelle einen Zustandswechsel erkennt, startet es networkd-dispatcher und dieser startet die Programme in dem Verzeichnis, welches zu dem neuen Zustand der Schnittstelle gehört. Dies funktioniert auch, wenn systemd-networkd die Schnittstelle nicht selber konfiguriert hat.

Installation

sudo apt-get install networkd-dispatcher

Konfiguration

networkd-dispatcher startet Programme in Unterverzeichnissen von

  • /etc/networkd-dispatcher
  • /usr/lib/networkd-dispatcher

Dabei überlagern Dateien unter /etc gleichnamige Dateien unter /usr. Man sollte eigene Dateien vorzugsweise unter /etc ablegen und /usr den Distributionen vorbehalten.

Es werden diese Unterverzeichnisse berücksichtigt

ls /etc/networkd-dispatcher/ 
carrier.d  degraded.d  dormant.d  no-carrier.d  off.d  routable.d

Der Name des Unterverzeichnisses entspricht dem neuen Zustand der Schnittstelle

Zustände von Schnittstellen
Zustand Bedeutung
off Schnittstelle ist nicht betriebsbereit.
no-carrier Das Schnittstellen-Gerät ist betriebsbereit, aber es ist kein Transport auf Netzwerkebene L2 aktiv, z.B. weil bei Ethernet kein Kabel gesteckt ist oder bei WLAN keine Mitgliedschaft zu einem Funknetz besteht.
carrier Die Schnittstelle ist betriebsbereit und es können auf L2 Pakete empfangen und gesendet werden, jedoch können keine IP-Pakete ausgetauscht werden.
dormant Die Schnittstelle ist grundsätzlich betriebsbereit wie bei carrier, jedoch momentan untätig (eingeschlafen).
degraded IP-Pakete können über die Schnittstelle empfangen, jedoch nicht oder nur eingeschränkt gesendet werden, weil der Schnittstelle keine global weiterleitbare IP-Adresse zugeordnet wurde.
routeable IP-Pakete können über die Schnittstelle empfangen und gesendet werden.

Die Konfigurationsverzeichnisse müssen root gehören und niemand außer root darf in diese Ordner schreiben können.

Details zu den Skripten

Als Programm kann man beispielsweise eine ausführbare Textdatei mit einem Shell-Skript in das passende Verzeichnis legen, und dies ist auch als Regelfall so vorgesehen. Die Datei muss root gehören und niemand außer root darf sie beschreiben dürfen.

Die Programme werden mit diesen Umständen ausgeführt: # Sie werden als root ausgeführt.

  1. Bei mehreren Dateien in einem Verzeichnis kann man die Reihenfolge der Ausführung nicht steuern.
  2. Als Arbeitsverzeichnis ist die Wurzel des Dateibaums / gesetzt.
  3. Es gibt keine Argumente auf der „Kommandozeile“. "$0" ist der Dateiname.
  4. stdin ist geschlossen, stdout ist unbekannt und stderr schreibt in das Systemlog.
  5. Sie laufen in einer Programmumgebung mit diesen Variablen:
    vergrößern
    OperationalState=routable
    IP6_ADDRS=
    NOTIFY_SOCKET=/run/systemd/notify
    JOURNAL_STREAM=9:18243
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    INVOCATION_ID=e1ed182dc4f34afca8368e7a7f677da4
    LANG=de_DE.UTF-8
    AdministrativeState=unmanaged
    IP_ADDRS=
    networkd_dispatcher_args=--run-startup-triggers
    IFACE=radio
    PWD=/
    ADDR=
    STATE=routable
    Die Werte sind natürlich nur Beispiele. Man kann sich nicht darauf verlassen, dass alle Variablen mit vernünftigen Werten versehen sind und es gibt situationsabhängig noch weitere Umgebungsvariablen. Bei einer WLAN-Schnittstelle wurde z.B. die richtige SSID als ESSID übergeben.
  • Die wichtigste Variable ist IFACE. Hier steht, um welche Schnittstelle es sich handelt.
  • Die Variablen OperationalState und AdministrativeState entsprechen wohl (d.h. nach bisherigen Erfahrungen) den Ausgaben von networkctl.
  • Die Variable STATE entspricht wohl dem Verzeichnis bzw. dem neuen Zustand der Schnittstelle.

Logger

Man kann dieses Skript als /etc/networkd-dispatcher/routable.d/00-logger ablegen, ausführbar machen und in den anderen Unterverzeichnissen von /etc/networkd-dispatcher/ jeweils darauf verlinken:

#! /bin/bash -e
LOG ()  { echo ${*:- } ;} >&2
LOG IFACE=$IFACE $OperationalState

Man erhält im Systemlog Meldungen, wann immer sich der Zustand einer Schnittstelle ändert. Das kann bei der Fehlerdiagnose helfen:

journalctl -b -u networkd-dispatcher.service

Beispeilausgabe

Mai 04 10:01:29 networkd-dispatcher[95390]: IFACE=eth0 routable
Mai 04 10:04:37 networkd-dispatcher[95577]: IFACE=eth0 off
Mai 04 10:04:38 networkd-dispatcher[95580]: IFACE=WLAN routable

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Links

Projekt

Weblinks

  1. Manpage zu networkd-dispatcher 🇬🇧 – bei Focal Fossa
  2. systemd
  3. systemd/networkd
  4. systemd/Units
  5. systemd/networkd-dispatcher