Testen der Fähigkeit eines Servers, eine bestimmte Domäne zu bedienen

11

Angenommen, Sie haben Server AIhren bevorzugten Webserver-Daemon eingerichtet, um ihn zu bedienen www.example.com. Jetzt möchten Sie dies verschieben Server B. Nach einigem Kopieren und Konfigurieren scheint der neue Server bereit zu sein. Ein abschließender Test wäre angebracht: Wie kann man vor dem Ändern der DNS-Einträge www.example.comvon Server B verlangen, wenn die DNS-Einträge noch auf Server A verweisen?


Ist es möglich, meine Hauptfrage zu beantworten, falls / etc / hosts nicht unter meinem Einflussbereich steht, sie mit Telnet zu testen, indem stattdessen rohes HTTP1.1 mit dem Webserver gesprochen wird?

Jarmund
quelle
8
Bitte bearbeiten Sie Ihre Frage nicht, um eine völlig neue Frage zu stellen. Bestehende Antworten werden dadurch (etwas) ungültig, und die Plattform sendet auch keine Benachrichtigungen darüber, dass sich eine Frage geändert hat. Daher ist es unwahrscheinlich, dass Personen, die bereits mit Ihrer Frage befasst sind, ihre Antworten erneut prüfen. Sie können ihnen einen direkten Kommentar hinterlassen, dass Sie eine Folgefrage haben. Oft ist es eine bessere Strategie, stattdessen eine neue Frage zu stellen (möglicherweise auf Ihre früheren Fragen und Antworten zu verweisen).
HBruijn
2
Ich denke sehr darüber nach, nur für die komplette Torpfostenverschiebung mit der Bearbeitung abzustimmen. > _ <
Wesley

Antworten:

12

DNS ist eine magische Sache. Mit genügend Kontrolle über einen Client-PC können Sie right.comin wrong.comund machen viceversa.io. Springen Sie auf einen Testclient-PC und ändern Sie die DNS-Auflösung, indem Sie entweder die Hostdatei auf diesem Client ändern, oder Sie können etwas Komplexeres tun und diesem Host einen einfachen DNS-Server zum Abfragen geben, z dnsmasq. In beiden Fällen besteht das ultimative Ziel darin, die DNS-Antwort auf Anfragen bezüglich der www.example.comAntwort mit der IP-Adresse für Server B zu senden. HTTP-Host-Header tragen dann den DNS-Namen für www.example.com, sind jedoch angestrebt Server B.

Magie!

Wesley
quelle
3
Irgendwie ist /etc/hostsmir nichts eingefallen, und das hat perfekt funktioniert. Prost auf die Erinnerung!
Jarmund
2
Die hostsDatei ist nicht an der DNS-Auflösung beteiligt, sondern stellt einen völlig separaten Mechanismus zur Namenssuche dar, den die vom Client-Betriebssystem bereitgestellte Resolver-Bibliothek zusätzlich zu den Suchvorgängen in DNS verwenden kann und wird. Persönlich denke ich, dass das "es ist magisch" -Bit nur in "es gibt keinen Grund zu verstehen" einfließt, was für Profis sicherlich eine schlechte Sache ist.
Håkan Lindqvist
@ HåkanLindqvist Du hast den Kontext und die Verwendung des Ausdrucks schwer missverstanden.
Wesley
In jedem Fall hostet DateiDNS . Das ist SF; Ich würde erwarten, dass die Leute hier, wenn überhaupt, den Unterschied kennen.
Ilmari Karonen
@IlmariKaronen Und ich habe nicht gesagt, dass Hosts-Dateien DNS sind, also wurden Ihre Erwartungen an ServerFault erfüllt und wir sind alle gut hier! ᕕ (ᐛ) ᕗ
Wesley
11

Es ist wichtig zu beachten, dass das, was für einen solchen Test für HTTP wichtig ist, überhaupt nicht mit DNS zusammenhängt, sondern mit dem, was der HTTP-Client als HostHeader-Wert sendet .

Der Client muss natürlich eine Verbindung mit der richtigen IP-Adresse und dem richtigen Port herstellen, aber darüber hinaus kommt es auf den HostHeader an, der in der HTTP-Anforderung selbst integriert ist.


Für einen schnellen Test kann der folgende Befehl verwendet werden, ohne die Konfiguration auf Betriebssystemebene auf dem Client zu ändern:

$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar

oder, was das betrifft,

$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar


Um dasselbe mit einem normalen Webbrowser zu tun, benötigen Sie entweder eine Browsererweiterung, mit der die Anforderungsheader geändert werden können (oder möglicherweise einen HTTP-Proxy, der die Header ändert), oder Sie müssen die Konfiguration des Betriebssystems des Clientcomputers ändern.

Wie bereits erwähnt, besteht das einfachste Mittel für eine solche Konfigurationsänderung darin, der hostsDatei einen Eintrag hinzuzufügen . Auf diese Weise würde die Client-Betriebssystem-Resolver-Bibliothek bereits beim Abrufen der hostsDatei einen Treffer erhalten und muss nicht einmal eine DNS-Suche durchführen.

Weitere Optionen sind das Ändern der konfigurierten DNS-Resolver-Server auf dem Client in einen Nameserver, der so eingerichtet ist, dass er wie gewünscht antwortet.

Håkan Lindqvist
quelle
1
+1 für eine Lösung, bei der es nicht darum geht, mit der Namensauflösung
Jarmund
2
Mit " Zuletzt verwendet" curlkönnen Sie die normale Namensauflösung (DNS oder Hostdatei) überschreiben und weiterhin automatisch Header sowie SNI ausführen, wenn Sie httpS verwenden / testen. Siehe --resolvein Ihrer Manpage oder unter curl.haxx.se/docs/manpage.html .
Dave_thompson_085
4

Sie können dies mit testen telnet. Sie müssen eine rohe HTTP-Anforderung stellen, indem Sie die Befehle eingeben. Sie können keine Fehler machen, und einige Server haben eine Zeitüberschreitung, sodass Sie auch die gesamte Anforderung innerhalb dieses Zeitrahmens eingeben müssen.

Der Befehl lautet ungefähr so:

telnet serverb 80

Die Anfrage sieht ungefähr so ​​aus:

GET / HTTP/1.1
Host: www.example.com

Beachten Sie, dass es mit einer leeren Zeile enden muss, sodass Sie nach dem Host-Header zweimal die Eingabetaste drücken.

Briantist
quelle
1
Nitpick: Während bei HTTP-Headern nicht zwischen Groß- und Kleinschreibung unterschieden werden soll, besteht der normative HostHeader nicht aus Großbuchstaben. (Und anscheinend haben einige Server Probleme mit unterschiedlichen
Bob
@ Bob wahr, bearbeitet
Briantist
3

Normalerweise zwinge ich www.example.com dazu, die IP-Adresse von Server B in meinem / etc / hosts festzulegen. Ich mache das, seit ich Mosaic benutzt habe und seitdem ich es selten mache, habe ich nicht das Bedürfnis verspürt, es besser zu finden.

Als ich mich ein bisschen nach dir umsah , fand ich /superuser/403042/custom-host-file-for-firefox, das von https://addons.mozilla.org/es/firefox/addon/ beantwortet wird. foxyproxy-standard / aber es gibt eine sehr aktuelle Notiz, die besagt, dass es aufgegeben wird.

Gesetz29
quelle
Wenn Sie auf Ihre Bearbeitung antworten und nach einer Testmethode ohne / etc / hosts fragen, ist diese vorhanden. Es wäre entweder Telnet für sehr einfache Tests, ein Addon, wie ich es in meiner Antwort oben erwähnt habe, oder ein benutzerdefinierter Proxy oder (und dies ist die Methode, die ich bevorzugen würde) ein ServerAlias ​​auf Server B von beispielsweise www2.example. com.
Gesetz29
2

Wenn Sie überprüfen müssen, ob es funktioniert, empfehle ich ein einfaches Browser-Plugin wie Modify Headersfür Firefox und ändere das HOSTin www.mydomain.com.

bukk530
quelle