Jemand bittet darum, den VPN-Client neu zu verbinden, und diese Anfrage kann drei verschiedene Dinge bedeuten. Es kann bedeuten, eine authentifizierte Sitzung zu trennen, jedem Client mitzuteilen, dass ein UDP-Server verschwindet, oder den Daemon selbst neu zu starten. Jede hat einen anderen Wirkungsradius, und die falsche Wahl macht aus einer Korrektur für einen Benutzer einen Ausfall. Der Umfang ist die Entscheidung, und der Befehl folgt daraus.

Fragen Sie, wer betroffen sein soll, bevor Sie fragen, welche Steuerung zu verwenden ist.

Eine Instanz: die Verwaltungsschnittstelle

Eine konfigurierte Verwaltungsschnittstelle kann verbundene Instanzen auflisten und genau eine davon trennen. Jede Sitzung trägt eine Client-Kennung, und client-kill CID zielt auf diese Kennung statt auf einen allgemeinen Namen. Lesen Sie die aktive Kennung aus der aktuellen Statusausgabe, denn ein aus einem älteren Protokoll kopierter Wert verweist auf eine Sitzung, die es nicht mehr gibt. Das Trennen der Instanz beendet diese Verbindung und sonst nichts.

Es garantiert keine neue Verbindung. Ob der Client zurückkommt, hängt von seinen Wiederholungseinstellungen, seinen verbleibenden entfernten Einträgen, seinen Authentifizierungsanforderungen und davon ab, ob die überwachende Anwendung noch läuft. Ein zurückkehrender Client erhält eine neue Kennung, weshalb der Vergleich von Kennungen der einzige zuverlässige Weg ist, Alt von Neu zu unterscheiden.

Eine UDP-Austrittsmeldung ist kein Befehl pro Client

explicit-exit-notify ist eine Konfigurationsdirektive zu Austritts- und Neustartereignissen. Bei einem UDP-Client teilt sie dem Gegenüber mit, dass die Sitzung endet, und das numerische Argument steuert, wie oft die Meldung wiederholt wird. Läuft der Server über UDP, sendet er eine Neustart-Steuernachricht an seine verbundenen Clients, und die dokumentierten Werte unterscheiden das erneute Verbinden mit demselben Server vom Wechsel zu einem anderen entfernten Eintrag. Das ist ein Lebenszyklussignal mit breitem Publikum.

Nichts daran wählt einen beliebigen Client zu einem beliebigen Zeitpunkt aus. Wer es als Neuverbindungsknopf behandelt, erreicht alle verbundenen Sitzungen auf einmal.

Signale wirken auf den Prozess, nicht auf eine Sitzung

SIGUSR1 bittet einen laufenden Prozess, seine Verbindung neu zu starten, ohne die Konfiguration erneut zu lesen, und die Persistenzoptionen entscheiden, was diesen Neustart übersteht. SIGHUP geht weiter: Er liest die Konfigurationsdatei erneut und öffnet seine Ressourcen neu. SIGTERM und SIGINT fordern ein geordnetes Herunterfahren an. Das sind Vorgänge auf Prozessebene: Auf einem Server mit vielen Clients betreffen sie jede Sitzung, die der Prozess trägt, nicht die im Ticket genannte.

Läuft der Prozess unter einem Dienstmanager, nutzen Sie dessen eigene Steuerung, statt ein Signal an eine PID zu senden, die Sie in einer Prozessliste gefunden haben. Lesen Sie die Unit, um zu sehen, welches Signal der Manager sendet, denn ein Neustart und ein Neuladen bewirken Unterschiedliches beim selben Daemon.

Legen Sie den Umfang fest, bevor Sie die Steuerung wählen

Drei Fragen entscheiden es. Wer soll betroffen sein: ein Benutzer, jeder Client eines Servers oder der Daemon und alles, was er trägt. Was soll überleben: die Konfiguration, der Tunnelzustand oder keines von beiden. Wer ist dazu befugt: die Verwaltungsintegration, der Dienstinhaber oder der Netzbetreiber, der die Austrittsmeldung steuert. Beantworten Sie das, und nur eine Steuerung passt.

Einen nicht authentifizierten Verwaltungs-Listener hinzuzufügen, um einen Neuverbindungsknopf zu bekommen, übergibt jedem, der den Port erreichen kann, weit mehr als diesen Knopf.

Prüfen Sie die neue Sitzung, nicht die Trennung

Ein Trennungsereignis beweist, dass die alte Sitzung beendet wurde. Es sagt nichts darüber aus, ob eine neue sich authentifiziert, eine Adresse erhält, Routen installiert oder die Ressource erreicht, die der Benutzer brauchte. Prüfen Sie die neue Kennung, dann den Tunnelzustand, dann eine echte Ressource. Diese drei Schritte sind der Unterschied zwischen einer Neuverbindung und einer funktionierenden Verbindung.

Schreiben Sie den Umfang in den Änderungsdatensatz. „Ich habe den Client neu verbunden“ ist keine Beschreibung, wenn der Client einer von vierzig auf einem geteilten Server war.

Ähnliche Artikel