Kerio unter Linux: kvnet die MAC geben, die der Server erwartet
kvnet wird bei jeder Verbindung neu erzeugt, sodass eine einmalige Adressänderung verloren geht. Lesen Sie den Wert, den der Client protokolliert hat, und wenden Sie ihn aus einem Hook nach dem Verbindungsaufbau an.
Drei Dinge müssen übereinstimmen, bevor ein Kerio-Tunnel Datenverkehr führt: die Adresse auf der Schnittstelle kvnet, der Wert, den der Client protokolliert hat, und das, was die Serverrichtlinie oder DHCP erwartet. Wenn sie nicht übereinstimmen, authentifiziert sich der Tunnel trotzdem und kommt trotzdem hoch, und genau das macht den Fehler verwirrend. Die Schnittstelle wird pro Verbindung erzeugt, eine manuell gesetzte Adresse gehört also zu dieser Sitzung und zu nichts anderem. Das ist die Form des Problems, und die Lösung ist ein Hook statt einer Konfigurationsdatei. Der Rest ist, wo der Wert zu lesen und wo er anzuwenden ist.
Warum die Adresse immer wieder zurückspringt
kvnet ist ein virtueller Adapter, den der Client beim Start einer Verbindung erzeugt und beim Ende entfernt. Ein manuelles ip link set überlebt daher genau so lange wie die Sitzung, auf die es angewendet wurde, und die nächste Verbindung beginnt mit dem, was der Client zuweist. Auf einem Rechner, auf dem der Client die erwartete Adresse nicht anwendet, führt jede Wiederverbindung dieselbe Abweichung erneut ein, und die Lease- oder Zugriffsregel weist das Gerät wieder ab.
Dieses Muster ist für sich genommen diagnostisch. Ein Tunnel, der in einer Sitzung funktioniert und in der nächsten scheitert, ist kein Anmeldedatenproblem, denn Anmeldedaten ändern sich zwischen Verbindungen nicht.
Lesen Sie den Wert beim Client, nicht bei der Schnittstelle
Der Linux-Client schreibt Aushandlungsdetails in sein Debug-Protokoll, und die Adresse, die er verwenden will, erscheint dort als letztes adressförmiges Token der Verbindungssequenz. Vergleichen Sie das mit dem, was der Kernel tatsächlich hält, und das ist einen readlink entfernt: cat /sys/class/net/kvnet/address.
Unterscheiden sich die beiden, kannte der Client den richtigen Wert und hat ihn nicht angewendet, und ein Hook, der ihn anwendet, nachdem die Schnittstelle existiert, schließt die Lücke. Enthält das Protokoll überhaupt keine Adresse, liegt das Problem früher und gehört zur Clientversion oder zum Serverprofil statt zu einem Skript.
Wenden Sie ihn an, nachdem die Schnittstelle existiert
NetworkManager-Nutzer können ein Skript in sein Dispatcher-Verzeichnis legen und nur handeln, wenn die VPN-Schnittstelle hochkommt. Ein systemd-verwalteter Client braucht mehr Sorgfalt: Ein Drop-in, das beim Dienststart läuft, löst normalerweise aus, bevor der Adapter existiert, also muss der Hook auf die Schnittstelle warten, statt sie vorauszusetzen. Setzen Sie die Adresse dann, und wenn der Kernel sie ablehnt, während die Verbindung steht, nehmen Sie sie herunter, setzen Sie sie und bringen Sie sie wieder hoch. Lesen Sie das extrahierte Token über ein MAC-Muster zurück, bevor Sie es an ip link übergeben, damit eine unerwartete Protokollzeile nicht zum Argument wird.
Alles, was als root aus dem Protokoll eines Clients läuft, verdient engen Besitz: eine Datei im Besitz von root, nicht von anderen beschreibbar, und keine Shell-Interpolation über die validierte Adresse hinaus. Behalten Sie die Musterprüfung im Skript. Lassen Sie nicht den Protokollinhalt entscheiden, welcher Befehl läuft.
Prüfen Sie die Lease statt der Verbindung
ip -4 -o addr show dev kvnet sollte eine Adresse im erwarteten Bereich zeigen, ip neigh show dev kvnet sollte das Gateway zeigen, und ein Dienst hinter dem VPN sollte antworten. Trennen Sie dann und verbinden Sie einmal neu; kehrt die Adresse zurück, löst der Hook beim falschen Ereignis aus oder gar nicht.
Eine Schnittstelle, die mit der richtigen Adresse erscheint und nie eine Lease bekommt, deutet auf die Serverseite. Das ist eine andere Prüfung und meist ein anderes Team. Bestätigen Sie, dass das Konto zulässig ist und der Pool noch eine Adresse hat, bevor Sie den Hook erneut bearbeiten.
Überdenken Sie den Workaround nach einem Upgrade
Ein Client-Build, der die Adresse korrekt setzt, lässt Ihren Hook einen veralteten Wert anwenden, was ein neuer Fehler ist, den eine Korrektur eingeführt hat. Kopieren Sie auch niemals eine MAC von einem anderen Rechner oder aus einem Forumsbeitrag; verwenden Sie den Wert, den dieser Client für dieses Konto protokolliert, und notieren Sie das Datum, an dem Sie ihn geprüft haben.
Halten Sie das Skript kurz genug, um es in einem Zug zu lesen. Workarounds, die Protokolle auswerten, sind von Natur aus vorübergehend. Die, die überleben, sind die, die ein künftiger Leser ohne den ursprünglichen Thread versteht.