Das Hook-Skript wird ausgelöst, liest ppp0 und wendet Routen auf die Schnittstelle an, die diesen Namen in diesem Moment besitzt. Manchmal ist es der Tunnel, den du meinst; manchmal ist es eine Sitzung, die sich eine Minute früher verbunden hat. Die nächste Wiederverbindung verschiebt die Nummer, und dasselbe Skript konfiguriert stillschweigend die falsche Verbindung. Die Lösung besteht darin, die Schnittstelle aus dem gerade gelaufenen Aufruf zu nehmen und das beabsichtigte Profil daneben mitzuführen.

Eine Sitzung von den Optionen bis zum Hook verfolgen

Beginne dort, wo die Sitzung entsteht. xl2tpd startet pppd mit der Optionsdatei, die pppoptfile dieses Tunnels benennt, sodass Plugin, Gerätenummer und jede Profilmarkierung dort festgelegt werden und nicht in einer globalen Datei. Ein Verbindungsmanager kann eigene Optionen erzeugen, was bedeutet, dass das Bearbeiten von /etc/ppp/options kein Beweis dafür ist, dass sich der Tunnel, der dich interessiert, geändert hat. Wenn die Verbindung hochkommt, führt pppd die Benachrichtigungsskripte des Verteilungs-Dispatchers aus. Diese Skripte erhalten den Schnittstellennamen als erstes Argument und die Profilmarkierung als sechstes.

Die Umgebung trägt dieselben Fakten unter Namen wie IFNAME und PPP_IPPARAM, aber ihre Verfügbarkeit hängt vom installierten Dispatcher ab. Lies den Dispatcher, bevor du dich auf eine Variable verlässt: Manche Distributionen behalten die Upstream-Argumentreihenfolge bei, andere filtern die Umgebung, bevor sie dein Skript aufrufen. Ein Skript, das nur $1 und das sechste Argument verwendet, funktioniert unter beiden Regelungen.

Die Schnittstelle aus dem Aufruf lesen

Der traditionelle Hook erhält die Schnittstelle zuerst. Dieser Positionswert ist die Schnittstellenkennung, die die Sitzung beschreibt, welche das Skript ausgelöst hat. Speichere ihn oben in einer Variablen und verwende diese Variable dann für Routen, Firewall-Regeln und den Abbau.

ipparam office-vpn

Hänge eine Profilmarkierung dort an, wo die Optionen definiert werden, nicht im Skript. Mit dieser Zeile in der Optionsdatei des Tunnels trägt jede aus dieser Datei erzeugte Sitzung office-vpn als sechstes Argument. Das Skript kann nach der Markierung verzweigen und trotzdem auf der echten Schnittstelle handeln. Halte beides im Code getrennt, weil die Markierung stabil ist und die Schnittstelle pro Sitzung vergeben wird.

Einen Namen nur anfordern, wenn Ablehnung richtig ist

Ein fester Name sieht einfacher aus als das Lesen von Argumenten, ändert aber das Fehlerverhalten. Die Option unit fordert eine Nummer für eine ausgehende Verbindung an, und pppd fällt auf eine dynamische Zuweisung zurück, wenn diese Einheit bereits belegt ist. Nichts an diesem Ergebnis reserviert ppp0 für dein Profil.

ifname ppp-office

Die Option ifname verhält sich anders: Ist der angeforderte Name bereits in Gebrauch oder kann er nicht zugewiesen werden, beendet sich pppd, statt einen anderen zu wählen. Das ist eine Richtlinienentscheidung, keine kosmetische Umbenennung. Verwende sie, wenn eine zweite gleichzeitige Instanz desselben Profils abgelehnt werden soll, und prüfe, dass das installierte pppd und dein Verbindungsmanager die Option durchreichen.

So oder so ist der Name, den das Skript sieht, derjenige, auf den gehandelt werden muss. Ein konfigurierter Name beseitigt nicht die Notwendigkeit, den Aufruf zu lesen, weil eine neu gestartete Sitzung immer noch einen anderen Namen als die letzte präsentieren kann.

Den Abbau an die konfigurierte Sitzung anpassen

Routen und Firewall-Regeln überleben das Skript, das sie erzeugt hat, also muss der Abbau genau die Objekte entfernen, die die Sitzung besitzt. Markiere Regeln mit der Profilmarkierung ebenso wie mit der Schnittstelle und lösche nach dieser Markierung. Wenn zwei Tunnel gleichzeitig aktiv sein können, ist das Löschen von allem, was ppp erwähnt, der Weg, auf dem eine Trennung die andere Verbindung zerstört.

Teste den Fall, der den Fehler offenlegt: Bringe die zweite PPP-Sitzung hoch, während die erste noch verbunden ist, verbinde dann die erste neu und beobachte, welche Schnittstelle der Hook meldet. Ein erfolgreicher Lauf mit einer einzigen Sitzung beweist nichts über die Namensvergabe. Wiederhole es mit gestopptem VPN, um zu bestätigen, dass der Abbau keine veraltete Route hinterlässt.

Halte die Markierung, die Schnittstelle und den Hook-Pfad in den Bereitstellungsnotizen fest. Wenn sich die Nummer nach einem Neustart ändert, erklären diese drei Werte, warum sich das Skript ohne jede Konfigurationsänderung anders verhalten hat.

Ähnliche Artikel