Ansichten eines Informatikers

Warum es nicht funktioniert, die IP-Adresse direkt im URL zu verwenden

Hadmut
6.3.2022 0:29

Einige Leser fragen zum DNS-Sperren-Artikel an.

Ich hatte gerade die Sache mit dem DNS erklärt.

Nun kamen einige Leser auf die Idee, dass man doch einfach den ganzen DNS-Kram umgehen könne, DNS also gar nicht benutzten, indem man einfach im URL selbst den DNS-Namen durch die IP-Adresse ersetzt, was ja ein gültiger URL ist. Das funktioniere aber nicht.

Wieso?

Na, nicht ganz einfach, die Sache ist die:

Früher, und damit meine ich so ungefähr, weiß nicht mehr genau, vor gefühlt etwa dem Jahr 2000, ging das tatsächlich überall so. Heute geht das nur noch bei manchen Webservern, aber eher die Ausnahme. Man kann sie noch so konfigurieren, macht man aber nicht mehr.

Weil man heute Webserver virtuell baut.

Das heißt, der Webserver betreibt mehrere Webseiten unter unterschiedlichen Namen. Zur Erklärung: Mein Blog, www.danisch.de, hat die IP-Adresse 116.203.181.35.

Ich hatte vor vielen Jahren, in der Anfangszeit, noch ein zweites Blog, nämlich www.forschungsmafia.de. Ich habe das dann nicht mehr benutzt, sondern alles unter danisch.de geschrieben, weil die Leser sich beschwerten, dass ihnen zwei Blogs zu verfolgen zu viel ist. Und auch dieses Blog hat die IP-Adresse 116.203.181.35. Dieselbe. Ein und derselbe Server kann also unter ein und derselben IP-Adresse mehrere Webseiten betreiben. Hier sind es jetzt zwei, aber da, wo ich meine Blogs früher hatte, waren es über hundert (mit anderen Leuten), und es gibt Server, die haben mehr als 10.000 oder noch viel mehr.

Wie funktioniert das?

Es gibt verschiedene Methoden. Man kann es auch mit unterschiedlichen IP-Adressen machen, aber die gängige Methode ist die: Wenn Ihr beispielsweise auf die Webseite https://www.danisch.de/blog/2022/03/05/die-erklaerung-des-dns-kauderwelsch/ geht, dann schicht der Browser an den Server eben nicht nur die Anfrage GET /blog/2022/03/05/die-erklaerung-des-dns-kauderwelsch/, sondern schreibt zusätzlich in die Anfrage noch Host: www.danisch.de rein. Und damit weiß dann der Server, welchen der virtuellen Webserver (bei mir: Welches der Blogs) Ihr überhaupt anfragt. weil zum Beispiel sowas wie /index.html oder /impressum.html ja bei allen existiert.

Das heißt, dass der Browser eben nicht nur die DNS-Antwort mit der IP-Adresse braucht, sondern trotzdem noch den Hostnamen braucht, um die Anfrage richtig zu stellen. Gibt man aber direkt die IP-Adresse an, dann weiß der Browser nicht, welchen Hostnamen man abfragt, trägt direkt die IP-Adresse ein, und der Server weiß dann auch nicht, auf welchen der vielen virtuellen Webserver sich die Anfrage bezieht und gibt eine Fehlermeldung raus.

Deshalb funktioniert es nicht.

Wie funktioniert es dann?

Ein Weg, das gewünschte Ziel zu erreichen, also DNS gar nicht mehr abzufragen, ist, die IP-Adresse(n) (wenn es mehrere sind, jede auf einer eigenen Zeile) in die hosts-Datei einzutragen. Bei Linux und Mac unter /etc/hosts. Bei Windows unter c:\Windows\System32\Drivers\etc\hosts , ich bin mir aber nicht ganz sicher, ob das noch so ist, weil ich schon ewig kein Windows mehr benutzt habe. Man braucht root/Administratorrechte, um da was einzutragen.

Dann nämlich sieht der Browser immer noch den Hostname und versucht die Auflösung. Aber die Auflösungsroutine guckt zuerst in die hosts-Datei, und wenn es da drin steht, sagt sie sich „toll, da müssen wir ja DNS nicht mehr fragen, weil es da schon steht“.

Der einfachste Weg, so eine Sperre für eine bestimmte Webseite zu umgehen, ist also, die IP-Adresse in die Hosts-Datei einzutragen (nur eine IP-Adresse pro Zeile, nur eine Zeile pro IP-Adresse, und hintendran alle Hostnamen).

Für meine Blogs würde so ein Eintrag also wie

116.203.181.35 www.danisch.de www.forschungsmafia.de

aussehen.