Irgendwo in einem Forumsbeitrag wird ifconfig-noexec als die Lösung angeboten, die eine SSH-Sitzung am Leben hält, wenn ein Tunnel hochkommt. Die Begründung klingt plausibel, bis man prüft, was die Option berührt. Sie hindert OpenVPN daran, die Adresse der Tunnelschnittstelle zu konfigurieren, und übergibt diese Werte stattdessen an Skripte; dazu, wohin Antworten auf Ihre Verwaltungsverbindung gehen, sagt sie nichts. Wer das Gegenteil glaubt, erhält einen Tunnel ohne brauchbare Adresse und eine SSH-Sitzung, die trotzdem stirbt.

Was die Option tatsächlich delegiert

Standardmäßig bringt der Client das Tunnelgerät hoch und weist die lokale und die entfernte Adresse zu, die der Server ihm übergeben hat. Mit gesetztem ifconfig-noexec wird dieser Schritt übersprungen, und die ausgehandelten Werte werden in die Skriptumgebung exportiert, damit etwas anderes sie anwendet.

Die Zuständigkeit wandert. An ihre Stelle tritt nichts Erfundenes.

Die Frage, die die Option beantwortet, ist also, wer die Schnittstelle konfiguriert, und die Frage, die sie nicht beantwortet, ist, wie Pakete den Weg zurück zu Ihnen finden. Halten Sie beides getrennt, sonst verbringen Sie einen Abend damit, Routen zu bearbeiten, um eine Schnittstelle ohne Adresse auszugleichen.

Drei ähnliche Optionen mit unterschiedlichen Aufgaben

Die Familie ist leicht zu verwechseln, weil sich die Namen um ein Wort unterscheiden und die Symptome überlappen. Lesen Sie, was jede unterdrückt, bevor Sie eine davon wählen.

OptionWas nicht mehr geschieht
ifconfig-noexecOpenVPNs eigene Tunneladress-Konfiguration; die Werte gehen stattdessen an Skripte
route-noexecAutomatisches Hinzufügen und Entfernen von Routen; Routendetails gehen an ein Skript
route-nopullVom Server geschobene Routen und verwandte Optionen wie DNS werden abgelehnt

Das sind Alternativen, die man einzeln verstehen muss, kein Set zum Zusammenkleben. Adresskonfiguration zu unterdrücken unterdrückt keine Routenänderungen, Firewallregeln oder die geschobenen Optionen, die DNS transportieren. Ein delegiertes Skript darf außerdem Routen ändern, und das ist eine Entscheidung, die Sie abgeben, statt sie zu vermeiden.

Wenn ein Anbieter-Client die Engine einpackt, nutzen Sie dessen unterstützte Integration, statt eine Direktive auf niedriger Ebene in ein Profil zu werfen und zu hoffen, dass der Wrapper sie respektiert. Wrapper erzeugen das Profil beim Verbinden oft neu, sodass eine manuelle Änderung ohne Fehler verschwindet. Prüfen Sie, wo der Client seine Einstellungen hält, bevor Sie einen Abend mit der Datei verbringen. Das gilt für jede Zeile der Tabelle, nicht nur für die, wegen der Sie gekommen sind.

Die SSH-Sitzung, die Sie schützen wollten

Eine SSH-Verbindung hat eine Quelladresse, eine Zieladresse und einen Antwortweg. Auf einem Server, der gerade ein Full-Tunnel-Default eingerichtet hat, passt die Antwort an Ihre öffentliche Adresse zum Tunnel, und das VPN-Gateway verwirft sie.

Nichts in der Adresskonfiguration der Tunnelschnittstelle ändert daran etwas.

Was es behebt, ist eine spezifischere Route für Ihre Verwaltungsadresse über das Gateway vor dem Tunnel oder eine Richtlinienregel, die diesen Verkehr lenkt, plus die Filtereinstellungen, die Ihr Host anwendet. Die beiden Probleme treten manchmal zusammen auf, und so wird eines für eine Kur des anderen gehalten. Prüfen Sie sie getrennt: Bringen Sie den Tunnel ohne die Option hoch, sehen Sie sich die Schnittstellenadresse und den Antwortweg an, und entscheiden Sie dann, welches der beiden tatsächlich kaputt ist.

Was ein delegiertes Skript übernehmen muss

Wenn Sie wirklich wollen, dass ein anderer Eigentümer die Schnittstelle konfiguriert, zählen Sie die Arbeit auf: Wenden Sie die lokale und die entfernte Adresse an, bringen Sie das Gerät hoch, stellen Sie die Adressierung beim Abbau wieder her oder entfernen Sie sie, und tun Sie dasselbe nach einem erneuten Verbinden noch einmal. Werte aus einer erfolgreichen Sitzung dürfen nicht fest verdrahtet werden, weil der Server beim nächsten Mal ein anderes Paar ausgeben kann.

Die Umgebungsvariablen, die der Client exportiert, sind die einzige unterstützte Eingabe für diese Arbeit.

env | grep -E '^ifconfig_|^route_'

Innerhalb eines route-up-Skripts sind diese Variablen verfügbar; aus einem Cron-Job oder einer manuellen Shell nicht. Bestätigen Sie, welchen Lebenszyklus-Hook Ihre Version verwendet, und bestätigen Sie, dass der Hook mit genug Rechten läuft, um die Schnittstelle zu ändern, da der Client möglicherweise bereits zu einem unprivilegierten Benutzer gewechselt ist.

Testen Sie den gesamten Lebenszyklus, nicht eine Sitzung

Bringen Sie den Tunnel hoch, prüfen Sie die Adresse am Gerät, verbinden Sie sich dann neu und prüfen Sie sie erneut. Eine Konfiguration, die einmal funktioniert und beim zweiten Versuch scheitert, bedeutet meist, dass der delegierte Schritt nur beim ersten Verbindungsaufbau läuft.

Testen Sie dann beide Abnahmekriterien zusammen: Eine frische SSH-Verbindung über den vorgesehenen Verwaltungsweg funktioniert, und eine erlaubte Anwendung nutzt den Tunnel korrekt.

Eine alte SSH-Sitzung, die zufällig überlebt, während der Tunnel keine Adresse hat, ist kein Erfolg, und genau diesen Zustand erzeugt diese Option, wenn niemand die Arbeit übernimmt. Prüfen Sie zuerst die Schnittstellenadresse, dann den Verwaltungs-Antwortweg, dann die Anwendung. Wenn zwei der drei falsch sind, hat die Option Arbeit verschoben, ohne ihr einen Eigentümer zu geben.

Ähnliche Artikel