Sie haben einen Namen in /etc/hosts eingetragen, die VPN-Verbindung hergestellt und erwartet, dass der Datensatz für alle sichtbar wird. Das passiert nicht, und die Überraschung geht meist mit einem zweiten Symptom einher: Der Name wird auf Ihrem Rechner aufgelöst und bei einer Kollegin nicht, was wie ein defekter VPN-DNS-Dienst aussieht und tatsächlich die hosts-Datei ist, die genau das tut, wofür sie gedacht ist. Eine hosts-Datei ist lokale Namensauflösungskonfiguration, kein Zonen-Update, und nichts an einer normalen VPN-Verbindung lädt sie hoch.

Hosts ist eine lokale Überschreibung, kein Zonen-Update

Die Datei ist eine Liste von Zuordnungen, die Namensdienst-Bibliotheken konsultieren, bevor sie einen DNS-Server fragen oder anstatt ihn zu fragen. Eine Zeile wie 10.40.0.20 build.corp.example ändert, was Anwendungen auf genau diesem einen Rechner schließen. Sie erzeugt keinen Datensatz, sie wandert nicht durch den Tunnel, und der DNS-Server, auf den der Tunnel zeigt, ahnt nichts von ihrer Existenz.

Deshalb ist der Fehler asymmetrisch. Ihr Client bekommt eine Antwort aus der Datei. Ein anderer Client fragt den VPN-DNS-Server, der nichts zurückgibt, und die Anwendung meldet, der Name existiere nicht. Beide Rechner verhalten sich korrekt; nur einer hat eine Überschreibung, die der andere nie gesehen hat.

Zwei Befehle, zwei verschiedene Komponenten

Der schnellste Weg, die Diskussion zu beenden, ist, den Unterschied in zwei Befehlen sichtbar zu machen, beide auf dem Client mit dem hosts-Eintrag ausgeführt:

getent ahosts build.corp.example
dig @10.40.0.53 build.corp.example A

Der erste fragt den eigenen Suchpfad des Systems, der auf einem typischen glibc-System lokale Dateien vor DNS liest. Der zweite schickt eine DNS-Abfrage direkt an den Server unter dieser Adresse und konsultiert überhaupt keine lokalen Dateien. Wenn der erste Ihren Eintrag zurückgibt und der zweite NXDOMAIN, haben Sie bewiesen, dass der Datensatz im DNS nicht existiert und Ihr Rechner aus einer lokalen Überschreibung antwortet.

Die Reihenfolge ist konfigurierbar, und das lohnt sich zu prüfen, bevor Sie etwas über eine bestimmte Distribution schließen. Sehen Sie sich die Zeile hosts: in /etc/nsswitch.conf an; hosts: files dns konsultiert Dateien zuerst. Kopieren Sie dieses Beispiel nicht über eine funktionierende Konfiguration, nur um die Reihenfolge zu ändern, denn echte Systeme listen oft zusätzliche Quellen und bedingte Dienst-Einträge auf, die das Beispiel nicht enthält.

systemd-resolved verwischt den Test

Auf einem System mit systemd-resolved bedient der lokale Stub auch Namen aus der hosts-Datenbank. Eine Abfrage von 127.0.0.53 ist daher kein unabhängiger Test des entfernten Servers, obwohl sie wie eine DNS-Abfrage aussieht und sich so verhält. Was der Resolver weiß und welche Server er fragen würde, bestätigen Sie mit:

resolvectl query build.corp.example
resolvectl status

Die Statusausgabe nennt die DNS-Server pro Verbindung, und so finden Sie heraus, ob die VPN-Verbindung überhaupt einen Resolver erhalten hat. Diese Frage ist getrennt vom hosts-Eintrag und diejenige, die sich lohnt, wenn ein privater Name bei allen Nutzern scheitert und nicht bei einem.

Anwendungen können eine weitere Ebene hinzufügen. Ein Browser mit eigener DNS-over-HTTPS-Einstellung, ein Container mit eigener Resolver-Konfiguration oder eine Laufzeitumgebung, die Abfragen für die Lebensdauer des Prozesses zwischenspeichert, können jeweils anders als das System antworten. Testen Sie die Anwendung, die Ihnen wichtig ist, statt anzunehmen, ein Befehl beschreibe jedes Programm auf dem Rechner.

Was einen Namen über das VPN wirklich teilt

Soll ein privater Name für alle funktionieren, braucht er einen Eigentümer, den der Resolver aller erreichen kann. Die saubere Antwort ist, den Datensatz in einer verwalteten Zone zu veröffentlichen und diese Zone über den vorgesehenen VPN-DNS-Pfad auflösbar zu machen. Dann hat der Datensatz eine einzige Wahrheitsquelle, eine Prüfspur und einen Lebenszyklus, und niemand muss sich merken, welcher Laptop eine lokale Überschreibung trägt.

Hosts-Dateien zu verteilen ist eine legitime Alternative, und es ist Endpunktverwaltung statt Namensdienst. Wenn Sie sich dafür entscheiden, muss die Datei von dem, was die Flotte verwaltet, ausgerollt, versioniert und entfernt werden, und genau so sollte es im Design beschrieben werden. „Das VPN erledigt das“ ist keine Beschreibung dieses Vorgangs.

Dynamische DNS-Registrierung ist ein dritter Mechanismus mit eigenen Berechtigungen, Update-Authentifizierung und Datensatz-Lebensdauer. Sie folgt nicht aus einem hosts-Eintrag und auch nicht daraus, dass ein Client sich einfach verbindet, es sei denn, Server und Client wurden beide dafür konfiguriert. Ein Datensatz, der von selbst erscheint, ist ein Signal dafür, dass jemand sichere Updates aktiviert hat und ein Client sich selbst registriert, und diese Konfiguration gehört in den Design-Datensatz und nicht in einen Troubleshooting-Thread. Wenn niemand sagen kann, wer diese Einstellung besitzt, behandeln Sie den automatischen Datensatz als unbestätigt und behalten Sie die verwaltete Zone als Wahrheitsquelle.

Ein aufgelöster Name ist keine Route

Namensauflösung und Erreichbarkeit sind getrennt, und eine veraltete lokale Zuordnung ist der klassische Weg, sie zu verwechseln. Ein hosts-Eintrag, der auf eine Adresse zeigt, die umgezogen ist, wählt weiterhin den veralteten Host, lange nachdem DNS korrigiert wurde, und das Symptom sieht wie ein Routingfehler bei einem Namen aus, der sich gut auflöst.

Wenn der Bericht also lautet „der Name löst auf, aber der Dienst ist nicht erreichbar“, vergleichen Sie die Systemabfrage mit einer expliziten Abfrage des VPN-DNS-Servers und prüfen Sie dann die erhaltene Adresse gegen die, die der Dienst tatsächlich verwendet. Die systemd-resolved-Referenz dokumentiert die lokalen Quellen, die sie konsultiert, und das ist die Karte, die Sie für diesen Vergleich brauchen.

Dann beheben Sie die Überschreibung über ihren Eigentümer. Eine Zeile aus Ihrer eigenen hosts-Datei zu entfernen, bewirkt nichts für die zwölf Laptops, die dieselbe Zeile von einem Deployment-Skript erhalten haben, und das ist die Version dieses Problems, die Leute tatsächlich haben.

Ähnliche Artikel