Wie mache ich das Protokoll für den Hostnamen bekannt?

10

Dies ist eine kanonische Frage zur Erkennung von Hostnamen und zum Proxying.

Ich weiß, dass einige Protokolle den Hostnamen kennen. Das heißt, wenn ich eine Verbindung zum HTTP-Server herstelle www.example.com, weiß dieser, dass ich www.example.comden HTTP-Dienst möchte , nicht www.example.netden, obwohl er sich auf derselben IP-Adresse befindet. Wie kann ich das für das Protokoll foo machen ?

(Vorübergehender Hinweis: Diese Frage erscheint gemäß dieser Metadiskussion .)

MadHatter
quelle

Antworten:

14

Um zu verstehen, was los ist, müssen Sie ein wenig über DNS wissen.

Wenn ein Client eine Verbindung zu einem Dienst auf einem bestimmten Host herstellen möchte, sucht er den Hostnamen über seine lokale DNS-Infrastruktur und erhält als Antwort eine IP-Adresse. Es stellt dann eine Verbindung zu dieser IP-Adresse her und fordert den Dienst auf die Weise an, die von dem zu implementierenden Procotol vorgeschrieben ist.

In einigen Fällen beinhaltet ein Teil dieses Procotols ein zweites Senden des ursprünglich nachgeschlagenen Hostnamens, der in diesem Fall an den Server und nicht an die DNS-Infrastruktur gesendet wird. Im Fall von HTTP wurde dies als Teil von HTTP / 1.1 in RFC 2616 hinzugefügt . Im Fall von HTTPS wurde dies als Server Name Indication (SNI) in RFC 4366 implementiert . und im Fall von FTP wurde dies durch den HOSTBefehl in RFC 7151 hinzugefügt (siehe jedoch den späteren Vorbehalt). Wenn ein solches zweites Senden nicht erfolgt, kann der Server nicht wissen, welchen Hostnamen der Client seinem lokalen DNS zugeführt hat, um die IP-Adresse des Servers abzurufen.

Beachten Sie, dass in allen Fällen eine Änderung des Protokolls erforderlich war, um dieses zweite Senden durchzuführen, und somit die Hostname der Client-Server-Interaktion bekannt zu machen. Nachdem das Protokoll geändert wurde, musste der Servercode aktualisiert werden, um es zu implementieren. Und schließlich mussten die Clients aktualisiert werden, um das neue Protokoll mit den Servern zu kommunizieren. Dieser letzte Schritt kann besonders langsam sein; Im Fall von SNI hat Internet Explorer unter Windows XP es nie implementiert, sodass auf das Protokoll nicht vertraut werden konnte, solange noch eine erhebliche Anzahl von IE-on-XP-Benutzern vorhanden war, und es dauerte ungefähr zehn Jahre, bis genug von ihnen vorhanden waren Sterben Sie ab und / oder erhalten Sie Upgrades, die SNI zuverlässig bereitstellen kann.

Das ist es also, was nötig ist, um ein Protokoll ohne Hostnamen bekannt zu machen. Es ist keine einfache Flaggeneinstellung oder Konfigurationsänderung. Wir haben einige protokollspezifische Antworten, die sich mit dem Stand der Dinge und möglichen Minderungsmaßnahmen insbesondere für dieses Protokoll befassen: für SSH (und damit auch für SFTP) und für FTP (was darauf hinweist, dass die HOSTUnterstützung für FTP derzeit uneinheitlich ist -Unterstützungsphase, auf die man sich noch nicht verlassen kann).

Die kurze Antwort lautet: Wenn Ihr Protokoll derzeit keine Hostnamenerkennung mit guter Unterstützung sowohl für Clients als auch für Server implementiert, vergessen Sie dies: Sie können dies nicht tun.

MadHatter
quelle
6
Ich denke, ich würde diese Antwort mit der Tatsache mildern, dass einige Protokolle für brandneue Produkte sind oder lokal genug sind, dass ein Unternehmen alle Instanzen von Servern und Clients kontrolliert. In diesen Fällen ist das einfache Hinzufügen von Hostnamenbefehlen oder -paketen sehr einfach und sehr einfach zu implementieren. Sie beschreiben die Schwierigkeit, einem vorhandenen Protokoll, das von vielen Anbietern bereits weit verbreitet ist, neue Funktionen hinzuzufügen.
JPhi1618
4
@ JPhi1618 Ich höre Sie, aber meiner Meinung nach ist jedes "Protokoll", das von einem einzelnen Unternehmen erstellt und implementiert und nicht in einen RFC eingebettet ist, überhaupt kein Protokoll. Es ist nur eine interne technische Entscheidung, und ich habe kein Interesse an solchen proprietären Produkten. Wie Sie hervorheben, kann der Anbieter sofort Änderungen vornehmen, um die Erkennung von Hostnamen zu implementieren, wenn er dies wünscht. aber da niemand anderes als der Verkäufer kann das tun, ich sehe nicht , wie es ist von großen Interesse für die OP.
MadHatter
Ich denke, die relevante Frage ist, ob Sie ein neues Protokoll entwerfen oder wie Sie ein vorhandenes Protokoll ändern.
Barmar
Ein proprietäres Protokoll ist immer noch ein Protokoll.
Barmar
@Barmar, das ist wahrscheinlich keine gute Diskussion, um hier einzusteigen. Bei dieser Frage geht es darum, vorhandene Protokolle zu ändern. Wenn die proprietäre technische Entscheidung / das proprietäre Engineering-Protokoll baznur von seinem Eigentümer und alleinigen Implementierer geändert werden kann, besteht die einzige Möglichkeit, den Hostnamen bekannt zu machen, darin, den Eigentümer anzusprechen. Das ist keine interessante SF-Antwort und darüber hinaus (meiner Meinung nach) nicht thematisch. " Wie entwerfe ich ein Protokoll, das den Hostnamen berücksichtigt? " Ist insgesamt eine andere Frage, die ich nicht stellen möchte .
MadHatter